五、仓库管理
于2022年4月15日重新编辑
一、仓库简介
仓库是集中存放镜像的地方,分为公共仓库跟私有仓库。
需要注意的是,注册服务器(registry)是存放仓库的服务器,一个注册服务器可以有多个仓库,每个仓库下面可以有多个镜像。
镜像分为官方提供的镜像跟用户提供的镜像
在OFFICIAL列显示OK的为官方提供的镜像。
带有用户前缀的为用户提供的镜像。
二、公共仓库
下面介绍使用公共仓库存放我们的镜像。
2.1 注册一个账号
首先注册并登录docker官方网站
2.2 创建自己的公共仓库
2.3 登录hubdocker
docker login
Username: tz90
Password:
Login Succeeded
2.4 修改标签
修改标签格式,tz90
是你注册的账号名,格式为hubdocker账户名/镜像名:标签
docker tag busybox tz90/busybox:latest
2.5 上传镜像
docker push tz90/busybox:latest
2.6 查看上传的镜像
搜索上传的镜像
三、第三方镜像市场
3.1 第三方镜像仓库
第三方镜像仓库有腾讯云,网易云,阿里云,时速云。
3.2 下载镜像
下面以腾讯云为例,注册登陆搜索复制仓库地址要一气呵成!
1)随便选一个ubuntu的镜像下载
2)选择镜像信息,复制仓库地址
3)然后使用如下命令下载
docker pull ccr.ccs.tencentyun.com/qcloud/ubuntu
#改个名字,原来的名字太长了
docker tag ccr.ccs.tencentyun.com/qcloud/ubuntu ubuntu:latest
四、搭建本地仓库
4.1 配置私有仓库
我们可以使用registry镜像来搭建一个本地私有仓库,方便内网环境的机器使用。
1)下载registry镜像
docker run -d -v /opt/registry:/var/lib/registry -p 5555:5000 \
--restart=always --name registry registry
:'
-v:将宿主机目录/opt/registry挂载到容器目录/var/lib/registry
-p:将宿主机端口5555映射为容器的端口5000
--restart=always:如果容器出现意外终止就重新启动
'
2) 给镜像重新打标记
docker tag ubuntu:18.04 10.154.0.110:5555/ubuntu:18.04
:'
需要将镜像重新打标记,格式为IP:端口/镜像名:标签
IP地址为宿主机的IP地址
端口为宿主机端口
'
3)设置docker可以通过http方式访问
vim /etc/docker/daemon.json
{
"registry-mirrors": ["https://1byiy1iz.mirror.aliyuncs.com"],
"insecure-registries":["10.154.0.110:5555"]
}
systemctl daemon-reload
systemctl restart docker
注意两行之间有逗号
如果没加入会出下如下报错
4)测试
#上传镜像
docker push 10.154.0.110:5555/ubuntu:18.04
#查看镜像
curl http://10.154.0.110:5555/v2/_catalog
#下载上传到私有仓库的镜像
docker pull 10.154.0.110:5555/httpd:latest
访问宿主机查看上传的镜像
4.2 配置私有仓库认证
私有仓库没有配置认证,谁都能上传镜像,这是不安全的,接下来进行登录认证配置。
1)生成自签名证书
yum install openssl openssl-devel
vim /etc/pki/tls/openssl.cnf
[ v3_ca ]
#新增如下语句
subjectAltName = IP:10.154.0.110 #这里是宿主机IP
#生成证书,这里是宿主机IP加端口
mkdir -p /registry/certs && cd /registry/certs
openssl req -x509 -days 3650 -subj '/CN=10.154.0.110:5555/' -nodes -newkey rsa:2048 -keyout domain.key -out domain.crt
-x509:是一个自签发证书的格式
-days 3650:标识证书有效期
10.154.0.110:5555:标识具体部署Docker Registry本地镜像仓库的宿主机IP地址和端口号
rsa:2048:RSA私钥长度为2048bit
domain.key和domain.crt:就是生成的证书文件名
2)生成登录到私有仓库的用户名密码
cd /registry/ && mkdir auth
#这里账户为tz密码为123456
docker run --entrypoint htpasswd registry:2.7.0 -Bbn tz 123456 > /registry/auth/htpasswd
3)启动私有仓库
docker run -d -p 5555:5000 --restart=always --name registry -v /mnt/registry:/var/lib/registry -v /registry/auth:/auth -e "REGISTRY_AUTH=htpasswd" -e "REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm" -e REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd -v /registry/certs:/certs -e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/domain.crt -e REGISTRY_HTTP_TLS_KEY=/certs/domain.key registry:2.7.0
4)复制自己自行签发的CA根证书部署到其他机器中
mkdir -p /etc/docker/certs.d/10.154.0.110:5555
cp /registry/certs/domain.crt /etc/docker/certs.d/10.154.0.110\:5555/
#例如112也要使用私有仓库
scp /registry/certs/domain.crt 10.154.0.112:/etc/docker/certs.d/10.154.0.110\:5555/
5)重启docker
systemctl reload docker
systemctl restart docker
6)测试
#打标签
docker tag hello-world:latest 10.154.0.110:5555/hello
#登录
docker login 10.154.0.110:5555
#上传镜像
docker push 10.154.0.110:5555/hello
#退出账号
docker logout 10.154.0.110:5555
4.3 删除私有仓库的镜像
https://www.jianshu.com/p/b93feaf43f37
五、参考资料
- 《Docker技术入门与实践》第三版
- 配置私有仓库认证(转载这里)
- 配置私有仓库认证(参考)
- 使用Docker Compose搭建私有仓库认证(需要研究)
- 菜鸟教程