Docker:公有仓库和私有仓库的搭建
Docker:公有仓库和私有仓库
公有仓库
Docker公有仓库是存储和分发Docker镜像的在线服务。最著名的公有仓库是Docker Hub。它包含了大量的官方镜像和社区镜像,方便用户快速获取所需的镜像。
但是国内现不能访问docker hub,因此本次公有仓库使用阿里云仓库
进入阿里巴巴开源镜像站,然后进入容器镜像控制台
开通容器镜像服务
开通后可以创建镜像仓库
可以自行选择公开或是私有
选择本地仓库
这样我们在阿里云的仓库就创建完了,我们可以在docker上登录阿里云仓库,下载或者上传镜像
登录阿里云仓库,一般在创建完镜像仓库之后会有教程
[root@docker ~]# docker login --username=kami999 crpi-nq4gaj31p1s7eii3.cn-hangzhou.personal.cr.aliyuncs.com
Password:
WARNING! Your password will be stored unencrypted in /root/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-storeLogin Succeeded
在上传镜像前需要注意阿里云对镜像格式的要求,我们可以使用tag修改
[root@docker ~]# docker tag myhttpd:latest crpi-nq4gaj31p1s7eii3.cn-hangzhou.personal.cr.aliyuncs.com/kami1/kami:myhttpd
[root@docker ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
crpi-nq4gaj31p1s7eii3.cn-hangzhou.personal.cr.aliyuncs.com/kami1/kami myhttpd e0120625b392 10 days ago 115MB
myhttpd latest e0120625b392 10 days ago 115MB
nginx latest 41f689c20910 8 weeks ago 192MB
然后可以使用push上传到镜像仓库
[root@docker ~]# docker push crpi-nq4gaj31p1s7eii3.cn-hangzhou.personal.cr.aliyuncs.com/kami1/kami:myhttpd
The push refers to repository [crpi-nq4gaj31p1s7eii3.cn-hangzhou.personal.cr.aliyuncs.com/kami1/kami]
d4f096d02045: Pushed
myhttpd: digest: sha256:27cd67a553934c5760ce7b3cc6ae783e8974d9ecf8b3a13f10eca3884efca1d4 size: 528
上传完成后到镜像仓库查看
能够看到上传的镜像,还能看到镜像的构建历史记录,删除镜像
私有仓库
一般使用harbor搭建私有仓库,Harbor 是一个功能更强大的企业级私有仓库,提供了图形化界面、用户管理、镜像复制、漏洞扫描等功能。
Harbor依赖的外部组件
Nginx(即proxy代理层):Nginx前端代理,主要用于分发前端页面UI访问和
镜像上传和下载流量。
Registry v2:镜像仓库,负责存储镜像文件。
Database(Mysql或者Postgresql):为core services提供数据库服务,负责
存储用户权限、审计日志、Docker image分组信息等数据。
我们只需要nginx和registry 用于前端代理和存储镜像
Harbor自有组件
**Core services(Admin Server):**这是Harbor的核心功能,主要提供以下服务:
**UI:**提供图形化界面,帮助用户管理registry上的镜像(image),并对用户进行授权。
**webhook:**为了及时获取registry上image状态变化的情况,在Registry上配置webhook,把状态传递给
UI模块。
**Auth服务:**负责根据用户权限给每个docker push/pull命令签发token。Docker客户端向Registry服务发
起的请求,如果不包含token,会被重定向到这里,获得token后再重新向Registry进行请求。
**API:**提供Harbor RESTful API。
Replication Job Service:提供多个Harbor实例之间的镜像同步功能。
**Log collector:**为了帮助监控Harbor运行,负责收集其他组件的log,供日后进行分析。
将harbor的压缩包上传,并且解压
[root@docker ~]# tar -xzvf harbor-offline-installer-v1.10.10\(最新版2022-02-21\).tgz
[root@docker ~]# cd harbor/
[root@docker harbor]# ls
common.sh harbor.yml LICENSE
harbor.v1.10.10.tar.gz install.sh prepare
修改harbor.yml
hostname: 192.168.100.10 #监听本地主机ip#https:# port: 443#certificate: /your/certificate/path#private_key: /your/private/key/path把这些注释掉
还能够通过该文件修改harbor的登录密码,登录密码默认为Harbor12345
harbor_admin_password: Harbor12345
还需要安装docker-compose,harbor是被docker-compose控制的,然后再运行 ./install.sh开始安装harbor,安装完毕后,可以通过 docker-compose start/stop开启/关闭harbor。
[root@docker ~]# yum -y install docker-compose
[root@docker harbor]# ./install.sh
✔ ----Harbor has been installed and started successfully.---- #出现这条信息代表脚本运行成功
我们可以通过访问http://ip/harbor来查看harbor的图形化管理界面
默认用户和密码为admin/Harbor12345
我们还需要修改docke的配置,添加信任仓库。然后再修
改镜像名,上传镜像
[root@docker ~]# vim /etc/docker/daemon.json
在镜像加速器后面添加"insecure-registries": ["192.168.100.10"]
[root@docker ~]# systemctl daemon-reload
[root@docker ~]# systemctl restart docker
我们查看运行的容器会发现全都停止运行,这是因为我们重新启动docker,而容器不会随着docker的启动而启动,因此修改配置需要在运行脚本之前修改好,如果需要容器在docker重启后继续运行,可以运行容器的时候加上 – restart always
我们进入到harbor图形化管理界面后,可以创建仓库
如何将镜像上传到harbor仓库
我们需要先登录到harbor仓库
[root@docker ~]# docker login http://192.168.100.10
Username: admin
Password:
WARNING! Your password will be stored unencrypted in /root/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-storeLogin Succeeded
[root@docker ~]# docker tag myhttpd:latest 192.168.100.10/kami/myhttpd
上传到harbor仓库
[root@docker ~]# docker push 192.168.100.10/kami/myhttpd
Using default tag: latest
The push refers to repository [192.168.100.10/kami/myhttpd]
d4f096d02045: Pushed
latest: digest: sha256:27cd67a553934c5760ce7b3cc6ae783e8974d9ecf8b3a13f10eca3884efca1d4 size: 528
总结:
常用的公共镜像仓库有Docker hub、阿里云仓库、或者daocloud仓库。
常用的私有镜像仓库有Docker官方提供的registry仓库和harbor仓库。