使用docker部署项目,需要把项目代码加入到docker中,然后应用通过拉取docker镜像运行应用。为了减少风险和方便管理,我们可以使用harbor创建属于自己的私有仓库,第一所有镜像存储在本地,发布版本可以直接在harbor上拉取镜像,所有环境均属于公司环境定制。不过这里有一个问题需要注意,如果我们的节点比较多的话在拉取的时候一个harbor会出现不够用的情况,这个时候就需要高负责,不过后面有高负载的方法。
Harbor安装
这里先不说Harbor的原理问题,因为安装完之后我们才能更容易理解原理,这里使用一台服务安装Harbor,高可用可以使用Harbor的复制功能,把主数据同步到备份仓库里,这种方式虽然可以做高可用,但是不太推荐。因为一旦两台只是镜像的同步,还是相当于两个独立的仓库,一个节点出现问题另一个节点的数据就无法同步过来,就是启动之后也不一定能够自动同步,所以在生产环境中不太建议使用这种方式做高可用,下面会介绍这种方法:
环境准备:
[root@wulaoer ~]# yum install -y yum-utils device-mapper-persistent-data lvm2 [root@wulaoer ~]# yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo [root@wulaoer ~]# yum install -y docker-ce-17.12.1.ce [root@wulaoer ~]# systemctl start docker [root@wulaoer ~]# systemctl enable docker Created symlink from /etc/systemd/system/multi-user.target.wants/docker.service to /usr/lib/systemd/system/docker.service.
因为仓库中保存的都是镜像文件,所以需要安装docker。docker安装完成之后需要管理容器,可以使用docker-compose进行容器管理,也可以解决docker的run层面的很多问题,如:网络,数据卷,执行指令,环境变量,资源限制等等。有了docker-compose可以一键重启,关闭,删除,监控所有的docker服务,只需要配置一次就可以对容器进行统一管理。
docker-compose安装方法:
第一种:
[root@wulaoer ~]# curl -L https://get.daocloud.io/docker/compose/releases/download/1.12.0/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose [root@wulaoer ~]# chmod +x /usr/local/bin/docker-compose [root@wulaoer ~]# docker-compose version # 查看版本号,测试是否安装成功
根据自己的需求选择适合自己的版本,
第二种
[root@wulaoer ~]# yum -y install epel-release #安装需要的源 [root@wulaoer ~]# yum -y install python-pip #安装pip [root@wulaoer ~]# pip install docker-compose #安装docker-compose [root@k8s-node3 harbor]# docker-compose version #查看版本
下载Harbor文件,解压并安装:
[root@wulaoer ~]# wget https://storage.googleapis.com/harbor-releases/release-1.9.0/harbor-offline-installer-v1.9.1-rc1.tgz [root@wulaoer ~]# tar -zxf harbor-offline-installer-v1.9.1-rc1.tgz
查看一下基本配置:
[root@wulaoer ~]# cd harbor [root@wulaoer harbor]# cat harbor.yml # Configuration file of Harbor # The IP address or hostname to access admin UI and registry service. # DO NOT use localhost or 127.0.0.1, because Harbor needs to be accessed by external clients. hostname: 10.211.55.41 #定义本机IP,允许所有用户访问 # http related config http: # port for http, default is 80. If https enabled, this port will redirect to https port port: 80 #端口 # https related config # https: # # https port for harbor, default is 443 # port: 443 # # The path of cert and key files for nginx # certificate: /your/certificate/path # private_key: /your/private/key/path # Uncomment external_url if you want to enable external proxy # And when it enabled the hostname will no longer used # external_url: https://reg.mydomain.com:8433 # The initial password of Harbor admin # It only works in first time to install harbor # Remember Change the admin password from UI after launching Harbor. harbor_admin_password: Harbor12345 #默认admin的密码 # Harbor DB configuration database: # The password for the root user of Harbor DB. Change this before any production use. password: root123 #数据库密码 # The maximum number of connections in the idle connection pool. If it <=0, no idle connections are retained. max_idle_conns: 50 # The maximum number of open connections to the database. If it <= 0, then there is no limit on the number of open connections. # Note: the default number of connections is 100 for postgres. max_open_conns: 100 # The default data volume data_volume: /data #数据存储位置 # Harbor Storage settings by default is using /data dir on local filesystem # Uncomment storage_service setting If you want to using external storage # storage_service: # # ca_bundle is the path to the custom root ca certificate, which will be injected into the truststore # # of registry's and chart repository's containers. This is usually needed when the user hosts a internal storage with self signed certificate. # ca_bundle: # # storage backend, default is filesystem, options include filesystem, azure, gcs, s3, swift and oss # # for more info about this configuration please refer https://docs.docker.com/registry/configuration/ # filesystem: # maxthreads: 100 # # set disable to true when you want to disable registry redirect # redirect: # disabled: false # Clair configuration clair: # The interval of clair updaters, the unit is hour, set to 0 to disable the updaters. updaters_interval: 12 jobservice: # Maximum number of job workers in job service max_job_workers: 10 notification: # Maximum retry count for webhook job webhook_job_max_retry: 10 chart: # Change the value of absolute_url to enabled can enable absolute url in chart absolute_url: disabled # Log configurations log: # options are debug, info, warning, error, fatal level: info # configs for logs in local storage local: # Log files are rotated log_rotate_count times before being removed. If count is 0, old versions are removed rather than rotated. rotate_count: 50 # Log files are rotated only if they grow bigger than log_rotate_size bytes. If size is followed by k, the size is assumed to be in kilobytes. # If the M is used, the size is in megabytes, and if G is used, the size is in gigabytes. So size 100, size 100k, size 100M and size 100G # are all valid. rotate_size: 200M # The directory on your host that store log location: /var/log/harbor #日志 # Uncomment following lines to enable external syslog endpoint. # external_endpoint: # # protocol used to transmit log to external endpoint, options is tcp or udp # protocol: tcp # # The host of external endpoint # host: localhost # # Port of external endpoint # port: 5140 #This attribute is for migrator to detect the version of the .cfg file, DO NOT MODIFY! _version: 1.9.0 # Uncomment external_database if using external database. # external_database: # harbor: # host: harbor_db_host # port: harbor_db_port # db_name: harbor_db_name # username: harbor_db_username # password: harbor_db_password # ssl_mode: disable # max_idle_conns: 2 # max_open_conns: 0 # clair: # host: clair_db_host # port: clair_db_port # db_name: clair_db_name # username: clair_db_username # password: clair_db_password # ssl_mode: disable # notary_signer: # host: notary_signer_db_host # port: notary_signer_db_port # db_name: notary_signer_db_name # username: notary_signer_db_username # password: notary_signer_db_password # ssl_mode: disable # notary_server: # host: notary_server_db_host # port: notary_server_db_port # db_name: notary_server_db_name # username: notary_server_db_username # password: notary_server_db_password # ssl_mode: disable # Uncomment external_redis if using external Redis server # external_redis: # host: redis # port: 6379 # password: # # db_index 0 is for core, it's unchangeable # registry_db_index: 1 # jobservice_db_index: 2 # chartmuseum_db_index: 3 # Uncomment uaa for trusting the certificate of uaa instance that is hosted via self-signed cert. # uaa: # ca_file: /path/to/ca # Global proxy # Config http proxy for components, e.g. http://my.proxy.com:3128 # Components doesn't need to connect to each others via http proxy. # Remove component from `components` array if want disable proxy # for it. If you want use proxy for replication, MUST enable proxy # for core and jobservice, and set `http_proxy` and `https_proxy`. # Add domain to the `no_proxy` field, when you want disable proxy # for some special registry. proxy: http_proxy: https_proxy: no_proxy: 127.0.0.1,localhost,.local,.internal,log,db,redis,nginx,core,portal,postgresql,jobservice,registry,registryctl,clair components: - core - jobservice - clair [root@wulaoer harbor]#
根据自己的需求修改相应的配置,安装harbor。
[root@wulaoer harbor]# ./prepare #加载修改的配置文件 [root@wulaoer harbor]# ./install.sh
重启一下docker-compose
[root@wulaoer harbor]# docker-compose restart #这里注意可以先关闭在启动,也可以重启如果报错,在执行一次重启 Restarting nginx ... done #harbor的反响代理组件 Restarting harbor-jobservice ... done #负责镜像复制工作 Restarting harbor-core ... done #是Harbor的核心功能,主要提供UI、webhook、token Restarting harbor-portal ... done #Harbor的registry, UI, token等服务,通过一个前置的反向代理统一接收浏览器、Docker客户端的请求,并将请求转发给后端不同的服务。 Restarting registry ... done #镜像仓库,负责存储镜像文件 Restarting redis ... done #存储缓存信息 Restarting registryctl ... done #主要提供操作registry的api接口 Restarting harbor-db ... done #负责存储用户权限,审计日志,Dockerimage分组信息等数据 Restarting harbor-log ... done #为了帮助Harbor运行,负责手机其他组件的log,供日后分析
docker-compose的重启方式:
[root@wulaoer harbor]# docker-compose up -d #启动 [root@wulaoer harbor]# docker-compose down -v #关闭
这就是整个Harbor的应用,我们在看一下官方提供的原理图,是否能够会更明白一点
测试一下
在本地pull一个镜像,然后tag一个分支推送到harbor上是否成功。下拉取一个镜像,看是否拉取成功:
[root@wulaoer harbor]# docker pull cirros Using default tag: latest latest: Pulling from library/cirros 3d6427f49fe3: Pull complete 1915bfe8159b: Pull complete d0ec9ef25b96: Pull complete Digest: sha256:8654d33ecbcdc8fd65c80325c3ec3b1bc938dfad9f20d1a2e3cf21e521ab70e6 Status: Downloaded newer image for cirros:latest
这里tag一个分支(注意,tage分支前的wulaoer是在harbor上创建的项目名称),登录前后都可以,分支和原镜像IMAGE ID是一样的,这个需要注意。
[root@wulaoer harbor]# docker login 10.211.55.41 Username (admin): admin Password: Login Succeeded [root@wulaoer harbor]# docker tag cirros:latest 10.211.55.41/wulaoer/cirros:test1 [root@wulaoer harbor]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE goharbor/chartmuseum-photon v0.9.0-v1.9.1 0aa7451af9b8 2 weeks ago 131MB goharbor/harbor-migrator v1.9.1 a83f1be1ec94 2 weeks ago 362MB goharbor/redis-photon v1.9.1 4d8d79a557df 2 weeks ago 110MB goharbor/clair-photon v2.0.9-v1.9.1 98b318ca3cb0 2 weeks ago 165MB goharbor/notary-server-photon v0.6.1-v1.9.1 78dac4ed14d8 2 weeks ago 138MB goharbor/notary-signer-photon v0.6.1-v1.9.1 5d9f413e14a8 2 weeks ago 135MB goharbor/harbor-registryctl v1.9.1 f4b2b72cdf71 2 weeks ago 99.6MB goharbor/registry-photon v2.7.1-patch-2819-2553-v1.9.1 d460d658f383 2 weeks ago 82.3MB goharbor/nginx-photon v1.9.1 0db1e12b9d30 2 weeks ago 43.9MB goharbor/harbor-log v1.9.1 368dd79ef99f 2 weeks ago 82.6MB goharbor/harbor-jobservice v1.9.1 71d4a3eaff94 2 weeks ago 141MB goharbor/harbor-core v1.9.1 d105210d9924 2 weeks ago 155MB goharbor/harbor-portal v1.9.1 2dced1823043 2 weeks ago 51.3MB goharbor/harbor-db v1.9.1 91784692a954 2 weeks ago 147MB goharbor/prepare v1.9.1 44775181c88d 2 weeks ago 148MB 10.211.55.41/wulaoer/cirros test1 bc94bceaae77 9 months ago 10.3MB cirros latest bc94bceaae77 9 months ago 10.3MB
扩展一下,登录命令:
docker login -u admin -p admin 10.211.55.41
tag一个分支后,把tag的分支推送到harbor上,如果没有登录一定要登录。
[root@wulaoer harbor]# docker push 10.211.55.41/wulaoer/cirros:test1 The push refers to repository [10.211.55.41/wulaoer/cirros] abbd6d6ac643: Pushed 75b99987219d: Pushed 0cc237193a30: Pushed test1: digest: sha256:96137d51e0e46006243fa2403723eb47f67818802d1175b5cde7eaa7f19446bd size: 943
使用浏览器登录Harbor,查看一下wulaoer项目下是否有镜像文件存在,如果有说明推送成功,没有就推送失败,使用命令登录后在推送一次。
Harbor已经搭建完成,如何拉取镜像,先把原来的镜像删除,在直接拉取镜像。
[root@k8s-node3 harbor]# docker rmi -f bc94bceaae77 #IMAGE ID [root@k8s-node3 harbor]# docker pull 10.211.55.41/wulaoer/cirros:test1
我们登录一下harbor查看一下拉取时间。
高可用方法:
登录到Harbor之后在同步管理中创建同步规则如下:
在名称中创建规则名字,可以简单做一个描述。同步方式有两种一种是推送一种拉取,根据主和被选择,源资源过滤器根据需求选择不通的tag和名称。注意目的Registry中需要在仓库管理中选择一个需要同步的目标harbor连接信息。可以选择触发方式等。
问题解决方法:
[root@wulaoer harbor]# docker login 10.211.55.41 Username: admin Password: Error response from daemon: Get https://10.211.55.41/v2/: dial tcp 10.211.55.41:443: getsockopt: connection refused
解决方法:
[root@wulaoer harbor]# vi /usr/lib/systemd/system/docker.service ....... ExecStart=/usr/bin/dockerd --insecure-registry=10.211.55.41 ExecStartPost=/sbin/iptables -I FORWARD -s 0.0.0.0/0 -j ACCEPT #如果关闭了防火墙可以忽略 ...........
重启一下服务
[root@wulaoer harbor]# systemctl restart docker [root@wulaoer harbor]# ./install.sh
重新测试
[root@wulaoer harbor]# docker login 10.211.55.41 Username: admin Password: Login Succeeded
至此,整个流程搭建完了,这里需要注意,不建议使用这种高可以在生产环境中。
您可以选择一种方式赞助本站
支付宝扫一扫赞助
微信钱包扫描赞助
赏