zoukankan      html  css  js  c++  java
  • .NET遇上Docker

    Harbor是一个开源企业级Docker注册中心,可以用于搭建私有的Docker Image仓库。可以实现权限控制等。

    安装Harbor

    首先,需要安装Docker和Docker Compose,参考其它文章。

    Harbor 0.5.0需要:

    • Docker 1.10
    • Docker Compose 1.6.0
    • Python 2.7或更高版本(且不是系统自带的Python解释器)

    Docker与Docker Compose安装可以参考这篇文章

    本文中选择将Harbor的密码存储在MySQL中,Harbor使用的MySQL是安装包中集成的MySQL的Docker镜像,所以如果系统没有MySQL也不需要事先安装

    获取Harbor安装程序

    Harbor安装程序有在线安装离线安装两种,安装方式都一样,根据需要选择。(下面二选一)

    tar xvf harbor-online-installer-<version>.tgz #在线安装文件
    tar xvf harbor-offline-installer-<version>.tgz #离线安装文件
    

    首先要确定Harbor安装位置并切换到那个文件夹下,如/usr/local:cd /usr/local

    修改配置

    下载解压完后,需要先修改配置然后才能开始安装:

    cd harbor
    nano harbor.cfg
    

    关于配置文件几个需要修改的地方:

    • hostname:WebUI的访问地址,可以是IP或域名(但不要使用127.0.0.1或localhost,这将导致无法外部访问)
    • ui_url_protocol:http(默认)或https(需要配置SSL的Nginx)
    • email_config:邮件相关配置,邮件配置用于密码重置等场景
    • harbor_admin_password:用于第一次登录WebUI时的密码,一次有效。默认用户名为admin
    • auth_mode:验证方式,db_auth(本地MySOL存储密码)或ldap_auth(LDAP)
    • ldap_config:auth_mode为LDAP时,配置ldap
    • db_password:auth_mode为db_auth时,这个项配置本地MySQL root账号的密码
    • self_registration:是否允许用户注册,on(开放注册)或off(关闭注册,只能管理员添加用户)。此项仅在auth_mode为db_auth时起作用。
    • use_compressed_js:启用js压缩合并,默认为on
    • max_job_workers:最大镜像复制作业并行数,默认为3
    • token_expiration:token过期时间,默认30分钟
    • verify_remote_cert:验证远程注册中心的证书,默认为on,当远程注册中心不适用SSL或使用自签名证书时,设置为off。
    • customize_crt:是否是自签名证书,on(自签名证书,需要设置crt_config一些列选项的值)或off(使用证书颁发机构的证书)
    • crt_config:使用自签名证书时的一些配置项

    注意:关于hostname配置,如果使用IP,请确保80端口没有被占用,否则会因为80端口被占用而导致安装后Harbor服务启动失败。

    下面是一个配置文件的配置示例:

    hostname = 192.168.1.100
    ui_url_protocol = http
    email_identity =
    email_server = smtp.xxxxxx.com
    email_server_port = 465
    email_username = reg@mritd.me
    email_password = xxxxxx
    email_from = docker <reg@mritd.me>
    email_ssl = true
    harbor_admin_password = Harbor12345
    auth_mode = db_auth
    ldap_url = ldaps://ldap.mydomain.com
    # ldap_searchdn =
    # ldap_search_pwd =
    ldap_basedn = uid=%s,ou=people,dc=mydomain,dc=com
    # ldap_filter =
    ldap_uid = uid
    ldap_scope = 3
    db_password = root123
    self_registration = off
    use_compressed_js = on
    max_job_workers = 3
    token_expiration = 30
    verify_remote_cert=off
    customize_crt = off
    # crt_country = CN
    # crt_state = State
    # crt_location = CN
    # crt_organization = mritd
    # crt_organizationalunit = mritd
    # crt_commonname = mritd.me
    # crt_email = reg.mritd.me
    

    示例配置文件中,没有被注释的配置项即使在用不到的情况下也不能注释。

    配置存储(可选)

    Harbor默认将image存储在本地文件系统,其它可选的位置包括S3,OpenStack Swift等。
    这个配置在common/templates/registry/config.yml中的storage一节来配置。

    执行安装

    修改好上述配置后,就可以执行安装了

    ./install.sh
    

    如果使用在线安装文件,需要等待image下载完成。

    注意:如果主机上的80端口已经被占用,则使用IP安装会失败,请给主机分配域名,并使用域名作为hostname来访问。如果想修改默认的80端口,见修改端口号一节

    安装完成后,访问hostname配置的域名或IP即可进入Harbor的管理页面。
    第一次使用配置文件中harbor_admin_password中的默认管理员密码,并修改密码。

    修改端口号

    对于http发布方式,Harbor默认使用80端口,需要修改端口按照如下方法:

    修改docker-compose.yml中nginx的配置,将80:80的第一个80改为自定义的端口号。
    修改common/templates/registry/config.yml,在auth部分$ui_url后面加上自定义的端口号
    修改完成后,运行下面的命令重新配置Harbor

    sudo docker-compose down
    sudo install.sh
    

    对于第一次安装,直接修改完所有配置文件后执行install.sh就可以了。

    停止/启动Harbor

    sudo docker-compose stop
    sudo docker-compose start
    

    卸载Harbor

    执行如下步骤彻底删除Harbor,以便重新安装:

    sudo docker-compose down
    rm -rf /data/database
    rm -rf /data/registry
    

    修改Harbor配置

    首先删除container,修改配置,然后运行install.sh重新启动container,命令如下:

    sudo docker-compose down
    vim harbor.cfg
    sudo install.sh
    

    基本使用

    无论是从Harbor拉取镜像或着发布镜像到Harbor,第一步都是登录Harbor这个注册中心。

    docker login ip:port
    

    按照前文的安装方式,即http安装,这个命令默认都会报错。因为Docker默认要求注册中心以https方式工作。
    命令中的端口号也不能省略,因为默认会连接https的443端口
    为了让Docker可以连接到http协议的注册中心,需要做以下修改:

    • 对于Docker for Windows
      直接在Settings窗口Deamon选项中Insecure registries中输入Harbor的服务地址即可,如图:
    • 对于Linux上的Docker
      网络中普遍留传的方法如下:
      修改/etc/default/docker这个配置文件,增加如下内容:
      DOCKER_OPTS="$DOCKER_OPTS --insecure-registry 192.168.9.18"
      楼主实测此方法对于新版Docker不可行,主要是根部不存在/etc/default/docker这个配置文件。
      经过一番寻找,对于CentOS7以上的Docker可以使用这种方法(实测可行):
      修改文件/usr/lib/systemd/system/docker.service将其中的行:
      ExecStart=/usr/bin/dockerd
      替换为:
      ExecStart=/usr/bin/dockerd --insecure-registry my-docker-registry.com:80
      然后执行如下命令,重新加载配置并重启docker服务:
      systemctl daemon-reload
      systemctl restart docker
      最后执行如下命令,验证docker的启动参数是否为我们所要:
      ps -ef | grep docker
      对于Ubuntu16.04方法类似(未亲测),修改如下配置文件:
      /lib/systemd/system/docker.service,替换其中的
      #ExecStart=/usr/bin/dockerd -H fd://

      ExecStart=/usr/bin/dockerd --insecure-registry my-docker-registry.com:5000 -H fd://
      并安装上面介绍的方式重启docker即可。

    修改以后先把docker compose停掉,然后重启Docker。(需要在Harbor安装目录下执行。(docker-compose命令都需要在doker-compose.yml所在目录中执行))
    对于Windows,在应用更改后,Docker for Windows会自动要求重启。
    对于Linux,执行下列命令:

    docker-compose stop
    service docker restart
    docker-compose start
    

    推送image到Harbor,注意,首先需要用tag命令建立源image与目标image的关联

    docker tag image:tag ip:port/harbor-project-name/image:tag
    docker push ip:port/harbor-project-name/image:tag
    

    ProjectAdmin及Developer两个组的用户有权限push,其它组用户只可以pull

    从远程拉取image

    docker pull ip:port/harbor-project-name/image:tag
    

    关于Docker的使用可见此文档

    其它

    • 当Harbor无法工作时,首先考虑使用sudo docker-compose ps查看所有container是否正常运行
    • Harbor使用rsyslog记录日志,如果遇到问题可以查看/var/log/harbor目录中的日志文件来寻找原因
    • 如果使用配置文件中的密码登录后,无法修改admin的密码(报错为修改密码失败),可以先创建一个用户,然后就可以成功修改admin的密码了。
    • Harbor的数据存储于/data/目录下,卸载或重新安装Harbor都不会影响这个目录的数据
  • 相关阅读:
    [武汉集训] Cliquers
    [NOI2017] 泳池
    [NOWCODER7] 小睿睿的方案
    动态dp初探
    [WC2008] 游览计划
    插头dp初探
    最小斯坦纳树初探
    2020ccpc总结
    Finding Palindromes
    最长非严格上升子序列的思考 && CF 1437E Make It Increasing
  • 原文地址:https://www.cnblogs.com/lsxqw2004/p/6668788.html
Copyright © 2011-2022 走看看