搭建企业级的私有 Docker 镜像仓库
简介
私有镜像仓库可以方便企业,或者个人开发者共享内部镜像而不会泄漏私有代码,而且可以加速镜像的拉取。能更加方便得集成到容器化的 CI/CD 中去。也可建立自己的公共镜像仓库。
首图很重要呀
首发地址:https://www.zhoujiangang.com/p/use-harbor-create-private-registries/
会持续修改的文章,请关注原博客。
还没有服务器?快入一台 2018 年阿里云双 12 底价服务器吧!
优惠的一小部分
查看更多
背景
在没有使用 《镜像加速配置》(可参考前半部分配置) 的时候。
- 公司或者个人项目代码不能公开,如何共享镜像或者快速发布?直接共享
Dockerfile用时build吗? - 在国内直接拉取官方镜像非常缓慢。如何才能快速取官方基础镜像呢?
- 国内的网络环境下,项目在
CI/CD过程中拉取镜像可能会花费比较多的时间,如何能加快拉取镜像的速度?
没错,搭建私有镜像仓库吧。
方案选择
搭建私有镜像仓库有几种方式:
- 官方
registry推荐使用registry:2v2 版本的镜像 harbor方案, 则是在官方的基础上添加了权限控制、界面化等功能
这里主要说说 harbor 的搭建。
开始
先看看 harbor 管理面板效果
先看看管理面板效果
系统环境及配置要求
| 资源 | 配置 | 说明 |
|---|---|---|
| CPU | 2核 起步 | 4核 更佳 |
| Mem | 4GB 起步 | 8GB 更佳 |
| Disk | 40GB 起步 | 160GB 更佳 |
硬盘主要存储镜像,镜像量大可以考虑加大。
软件要求:
| 软件 | 版本 | 说明 |
|---|---|---|
| Python | 2.7 以上 | Linux 服务器基本都安装了 2.7 版本,可以 python 尝试,未装的装上 |
| Docker | 1.10 以上 | 《CentOS 安装 Docker》 |
| Docker Compose | 1.6.0 以上 | 《安装 docker-compose》 |
| Openssl | 推荐用最高版本 | 生成证书,自备证书的忽略 |
安装
安装步骤:
- 下载安装器
- 修改配置文件
harbor.cfg - 运行
install.sh执行安装,此 shell 脚本会生成所需要的配置文件,调用docker-compose来进行镜像拉取及启动。
harbor 有两种方式进行安装。分为离线和在线,假如网络环境不佳可以先择离线安装。
这里选择在线方式(拉取远程镜像来安装)安装:
本示例使用当前最新稳固版本 v1.6.3
下载安装器:
$ wget https://storage.googleapis.com/harbor-releases/release-1.6.0/harbor-online-installer-v1.6.3.tgz想要离线的可以使用(离线版本会比较大):
$ wget https://storage.googleapis.com/harbor-releases/release-1.6.0/harbor-offline-installer-v1.6.3.tgz解压安装程序:
$ tar -zxvf harbor-offline-installer-v1.6.3.tgz修改配置文件:
$ cd harbor$ vim harbor.cfg修改以下部分:
hostname = hub.zhoujiangang.com:41533 # 修改为你自己的域名,因为我机子端口限制,所以改为非 443,假如 443 可以给镜像仓库使用,则可以直接用 `hub.zhoujiangang.com`ui_url_protocol = https # 最好换成 https 吧,假如想用 `http` 的话,需要在用户端设置支持 `http` 访问,需要重启服务。...ssl_cert = /data/harbor/cert/hub.zhoujiangang.com.crt # 对于目录没有要求的可以不改,因为 data 目录下有很多其它项目,所以作此修改ssl_cert_key = /data/harbor/cert/hub.zhoujiangang.com.key # 对于目录没有要求的可以不改,因为 data 目录下有很多其它项目,所以作此修改harbor_admin_password = Harbor12345 # 修改管理面板的登录密码修改 docker-compose.yml 文件, 不关心安装位置、端口的可以忽略。默认 docker-compose.yml 日志放在 var/logs/ 下,端口开放 80, 443, 4443, 因为这些端口我已经被占用,需要修改。
先创立根文件夹,把所有数据全放在 /data/harbor 下面,便于以后查看。
$ mkdir -p /data/harbor当前使用自备证书的方式,免去了所有用户端手动增加信任的操作。
还没有证书可以参考这里 《轻松全站 HTTPS,还没用上 https (可申请泛域名证书)的朋友可以操练起来了》 只需有域名,轻松申请证书。
也可以手动使用 openssl 来申请证书,只需设置双方信任就可,可参考官方配置文档 《Configuring Harbor with HTTPS Access》
用以上方法申请好证书后,把申请好的证书移动到 ssl_cert, ssl_cert_key 配置的目录中去。
注意
假如是使用 acme.sh 申请的,则可作如下配置:
ssl_cert = ~/.acme.sh/zhoujiangang.com/fullchain.cer # 实在要这么配置,最好把路径改为绝对路径 ~ 在不用客户表示不同的位置。ssl_cert_key = ~/.acme.sh/zhoujiangang.com/hub.zhoujiangang.com.key # 实在要这么配置,最好把路径改为绝对路径 ~ 在不用客户表示不同的位置。不过建议进行改名,并移动到 /data/harbor/cert 目录下
$ mkdir -p /data/harbor/cert$ cp ~/.acme.sh/zhoujiangang.com/fullchain.cer /data/harbor/cert/hub.zhoujiangang.com.crt$ cp ~/.acme.sh/zhoujiangang.com/hub.zhoujiangang.com.key /data/harbor/cert/hub.zhoujiangang.com.key证书设置完成后,可进行 docker-compose.yml 的配置。
可直接用如下配置:
version: '2'services: log: image: goharbor/harbor-log:v1.6.3 container_name: harbor-log restart: always volumes: - /data/harbor/log/:/var/log/docker/:z - ./common/config/log/:/etc/logrotate.d/:z ports: - 127.0.0.1:1514:10514 networks: - harbor registry: image: goharbor/registry-photon:v2.6.2-v1.6.3 container_name: registry restart: always volumes: - /data/harbor/registry:/storage:z - ./common/config/registry/:/etc/registry/:z - ./common/config/custom-ca-bundle.crt:/harbor_cust_cert/custom-ca-bundle.crt:z networks: - harbor environment: - GODEBUG=netdns=cgo depends_on: - log logging: driver: "syslog" options: syslog-address: "tcp://127.0.0.1:1514" tag: "registry" postgresql: image: goharbor/harbor-db:v1.6.3 container_name: harbor-db restart: always volumes: - /data/harbor/database:/var/lib/postgresql/data:z networks: - harbor env_file: - ./common/config/db/env depends_on: - log logging: driver: "syslog" options: syslog-address: "tcp://127.0.0.1:1514" tag: "postgresql" adminserver: image: goharbor/harbor-adminserver:v1.6.3 container_name: harbor-adminserver env_file: - ./common/config/adminserver/env restart: always volumes: - /data/harbor/config/:/etc/adminserver/config/:z - /data/harbor/secretkey:/etc/adminserver/key:z - /data/harbor/:/data/:z networks: - harbor depends_on: - log logging: driver: "syslog" options: syslog-address: "tcp://127.0.0.1:1514" tag: "adminserver" ui: image: goharbor/harbor-ui:v1.6.3 container_name: harbor-ui env_file: - ./common/config/ui/env restart: always volumes: - ./common/config/ui/app.conf:/etc/ui/app.conf:z - ./common/config/ui/private_key.pem:/etc/ui/private_key.pem:z - ./common/config/ui/certificates/:/etc/ui/certificates/:z - /data/harbor/secretkey:/etc/ui/key:z - /data/harbor/ca_download/:/etc/ui/ca/:z - /data/harbor/psc/:/etc/ui/token/:z networks: - harbor depends_on: - log - adminserver - registry logging: driver: "syslog" options: syslog-address: "tcp://127.0.0.1:1514" tag: "ui" jobservice: image: goharbor/harbor-jobservice:v1.6.3 container_name: harbor-jobservice env_file: - ./common/config/jobservice/env restart: always volumes: - /data/harbor/job_logs:/var/log/jobs:z - ./common/config/jobservice/config.yml:/etc/jobservice/config.yml:z networks: - harbor depends_on: - redis - ui - adminserver logging: driver: "syslog" options: syslog-address: "tcp://127.0.0.1:1514" tag: "jobservice" redis: image: goharbor/redis-photon:v1.6.3 container_name: redis restart: always volumes: - /data/harbor/redis:/var/lib/redis networks: - harbor depends_on: - log logging: driver: "syslog" options: syslog-address: "tcp://127.0.0.1:1514" tag: "redis" proxy: image: goharbor/nginx-photon:v1.6.3 container_name: nginx restart: always volumes: - ./common/config/nginx:/etc/nginx:z networks: - harbor ports: - 41522:80 - 41533:443 - 41534:4443 depends_on: - postgresql - registry - ui - log logging: driver: "syslog" options: syslog-address: "tcp://127.0.0.1:1514" tag: "proxy"networks: harbor: external: false以上配置作了处地方修改:
- 将所有挂载的目录更改为
/data/harbor - 将 nginx 块配置,暴露的端口修改为(因为我测试的机子 80,443 都已经被占用,假如你希望将这些端口给 harbor 使用,则可改回去)
ports: - 41522:80 - 41533:443 - 41534:4443直接使用 80, 443 提供服务, 可改回之前的配置
ports: - 80:80 - 443:443 - 4443:4443一律配置完成,开始安装
$ ./install.sh执行成功可以看到有如下输出:
...[Step 2]: checking existing instance of Harbor ...[Step 3]: starting Harbor ...Creating network "harbor_harbor" with the default driverCreating harbor-log ... doneCreating harbor-adminserver ... doneCreating harbor-db ... doneCreating registry ... doneCreating redis ... doneCreating harbor-ui ... doneCreating harbor-jobservice ... doneCreating nginx ... done? ----Harbor has been installed and started successfully.----Now you should be able to visit the admin portal at https://hub.zhoujiangang.com:41533.For more details, please visit goharbor/harbor .[root@test-node harbor]#执行成功后,你可以访问 https://hub.zhoujiangang.com:41533 来访问管理面板。在配置 harbor.cfg 时没有修改密码的话,默认的账号为 admin 密码为 Harbor12345
删除 harbor 使用 docker-compose down -v
[root@test-node harbor]# docker-compose down -vStopping harbor-jobservice ... doneStopping nginx ... doneStopping harbor-ui ... doneStopping registry ... doneStopping harbor-adminserver ... doneStopping redis ... doneStopping harbor-db ... doneStopping harbor-log ... doneRemoving harbor-jobservice ... doneRemoving nginx ... doneRemoving harbor-ui ... doneRemoving registry ... doneRemoving harbor-adminserver ... doneRemoving redis ... doneRemoving harbor-db ... doneRemoving harbor-log ... doneRemoving network harbor_harbor[root@test-node harbor]#新建客户,开始推着镜像
新建一个 os 客户
新建好之后,需要先设置为管理员,否则推送时会显示验证不通过。
新建一个项目
新建一个项目
在 Docker 用户端登录
$ docker login hub.zhoujiangang.com:41533Username: osPassword:Login Succeeded输入新建账号的账号密码,登录成功后可以进行推送镜像。
升级镜像 tag 名,推送镜像
$ docker tag docker tag ubuntu:latest hub.zhoujiangang.com:41533/os/ubuntu:latest$ docker push hub.zhoujiangang.com:41533/os/ubuntuThe push refers to repository [hub.zhoujiangang.com:41533/os/ubuntu]b9b7103af585: Pushedca2991e4676c: Pusheda768c3f3878e: Pushedbc7f4b25d0ae: Pushedlatest: digest: sha256:acd85db6e4b18aafa7fcde5480872909bd8e6d5fbd4e5e790ecc09acc06a8b78 size: 1150显示推送成功。
镜像推送成功,服务端查看
小结
整个私有镜像就搭建完成了,当然这只是一个简易的入门教程,还有很多配置需要在 harbor.cfg 中作修改、调优才能用到生产环境。本文权当抛砖引玉,希望能有所帮助。
还没有服务器?趁活动底价入一台吧
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是摆设,本站源码仅提供给会员学习使用!
7. 如遇到加密压缩包,请使用360解压,如遇到无法解压的请联系管理员
开心源码网 » 搭建企业级的私有 Docker 镜像仓库
优惠的一小部分