docker私有仓库的创建使用和认证
1、搭建本地私有仓库registry v2(Docker Registry 2.0版本在安全性和性能上做了诸多优化,并重新设计了镜像的存储的格式。Docker目前1.6之后支持V2)
1)构建私有仓库:docker run -d -p 5000:5000 --restart=always --name registry -v /mnt/registry:/var/lib/registry registry:2
-d:表示后台运行该容器
-p:宿主机端口映射到容器端口
--restart:容器启动后自动启动私有镜像仓库
-v:容器挂载到宿主机上
2)为要上传的镜像设置标签:docker tag hello-world:latest localhost:5000/my-hello-world
3)推送打好的标签镜像到私有仓库: docker pull localhost:5000/my-hello-world
4)通过地址访问的方式查看私有仓库是否有上传的镜像文件:http://IP:5000/v2/my-hello-world(自己添加标签的镜像名称)/tags/list
curl http://192.168.1.58:5000/v2/_catalog 查看仓库信息
2、配置私有仓库认证(上面上传镜像时候都没有登录信息验证)
1)生成证书: mkdir registry && cd registry && mkdir certs && cd certs
openssl req -x509 -days 3650 -subj '/CN=192.168.1.58:5000/' -nodes -newkey rsa:2048 -keyout domain.key -out domain.crt
-x509:是一个自签发证书的格式
-days:证书的有效性
rsa:算法及长度
2)生成用户名和密码(一直测试registry2的不知道为什么一直不行,安装中出现WARNING: IPv4 forwarding is disabled. Networking will not work.问题,问题汇总里面有解决)
cd .. && mkdir auth
docker run --entrypoint htpasswd registry:2.5 -Bbn abc abc123 > /root/registry/auth/htpasswd
启动docker的私有仓库:
docker run -d \
-p 5000:5000 \
--restart=always \
--name registry \
-v "$(pwd)"/auth:/auth \
-e "REGISTRY_AUTH=htpasswd" \
-e "REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm" \
-e REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd \
-v "$(pwd)"/certs:/certs \
-e REGISTRY_HTTP_TLS_CERTIFICATE=certs/domain.crt \
-e REGISTRY_HTTP_TLS_KEY=certs/domain.key \
registry:2.5
3)docker registry配置访问接口
sudo mkdir -p /etc/docker/certs.d/192.168.1.58:5000
sudo cp certs/domain.crt /etc/docker/certs.d/192.168.1.58:5000
4)docker registry私有仓库使用登记
在终端/etc/docker/daemon.json文件中添加如下内容(有内容的话逗号隔开,去掉大口号)
{"insecure-registries":["192.168.1.58:5000"]}
5)重启并加载docker配置文件
systemctl restart docker
测试:docker login ip:端口 方式测试登录
镜像打标签:docker tag hello-world:latest 192.168.1.58:5000/myhelloworld
推送:docker push 192.168.1.58:5000/myhelloworld
查看仓库的目录挂载: /mnt/registry/docker/registry/v2/repositories