Docker仓库
Docker 仓库是用来包含镜像的位置,Docker提供一个注册服务器(Register)来保存多个仓库,每个仓库又可以包含多个具备不同tag的镜像。
Docker运行中使用的默认仓库是 Docker Hub 公共仓库。
使用docker hub公共仓库
docker hub是一个docker镜像的公共仓库,你可以注册后免费使用,而且也可以通过命令登陆,去管理个人仓库,但是,国内建议使用阿里云镜像加速器去拉取需要的镜像,docker hub的访问速度有些感人。
- 需要internet连接,速度慢;
- 所有人都可以访问;
- 由于安全原因企业不允许将镜像放到外网。
阿里云镜像加速
需要注册阿里云帐号后,登陆控制台—>>>选择容器镜像服务—>>>选择镜像加速器—>>>根据参考文档配置
- 配置docker daemon文件:
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://pmel5lap.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
私有仓库搭建本地仓库
- docker hub虽然方便,但是还是有限制
需要internet连接,速度慢
所有人都可以访问
由于安全原因企业不允许将镜像放到外网 - 好消息是docker公司已经将registry开源,我们可以快速构建企业私有仓库
- 下载registry镜像
# docker pull registry
- 运行registry容器
[root@docker1 ~]# docker run -d --name registry -p 5000:5000 -v /opt/registry:/var/lib/registry registry:2
9fc6821e077f5ea99ee7e0e7b8fb6495250325d8f52aa215ee6b240183cc7b64
[root@docker1 ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
9fc6821e077f registry:2 "/entrypoint.sh /etc…" 38 seconds ago Up 37 seconds 0.0.0.0:5000->5000/tcp registry
- 上传镜像到本地仓库
- 本地仓库在命名时候需要加上仓库的ip和端口
[root@docker1 ~]# docker tag nginx:1.16 localhost:5000/nginx:1.16
[root@docker1 ~]# docker push localhost:5000/nginx:1.16
上传成功!
Docker仓库添加证书加密功能
- 生成证书(域名westos.org要求在主机上有解析)
# mkdir certs
# openssl req -newkey rsa:4096 -nodes -sha256 -keyout certs/reg.org.key -x509 -days 365 -out certs/reg.org.crt
2. 重建registry容器
[root@docker1 ~]# docker run -d \
> --restart=always \
> --name registry \
> -v "$(pwd)"/certs:/certs \
> -e REGISTRY_HTTP_ADDR=0.0.0.0:443 \
> -e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/reg.org.crt \
> -e REGISTRY_HTTP_TLS_KEY=/certs/reg.org.key \
> -p 443:443 \
> registry:2
[root@docker1 ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
5cd2510be422 registry:2 "/entrypoint.sh /etc…" 5 seconds ago Up 3 seconds 0.0.0.0:443->443/tcp, 5000/tcp registry
- 拷贝证书到docker主机
# mkdir -p /etc/docker/certs.d/reg.org/
# cp reg.org.crt /etc/docker/certs.d/reg.org/ca.crt
- 上传镜像
# docker tag nginx:1.16 reg.org/nginx:1.16
# docker push reg.org/nginx:1.16
5. 为docker仓库添加用户认证功能
- 生成用户密码文件
[root@docker1 ~]# docker run --rm --entrypoint htpasswd registry:2 -Bbn admin westos > auth/htpasswd
[root@docker1 ~]# ls
auth certs demo game2048.tar nginx.tar registry2.tar
[root@docker1 ~]# cat auth/htpasswd
admin:$2y$05$26WOPKM5E7p7fpfJFKaQU.Gr/4BUfRXxG079UAsHL18NO.RXw047W
- 重建registry容器
# docker run -d -p 443:443 \
--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_ADDR=0.0.0.0:443 \
-e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/reg.org.crt \
-e REGISTRY_HTTP_TLS_KEY=/certs/reg.org.key \
registry:2
- docker主机认证
# docker login reg.org
8. 查看保存的登陆认证信息
9. 上传镜像
# docker tag nginx:1.16 reg.org/nginx:1.16
# docker push reg.org/nginx:1.16
- 拉取镜像
# docker pull reg.org/nginx:1.16
- 远程主机需要登陆连接仓库,下载镜像,将认证目录拷贝到远程主机
scp -r /etc/docker/certs.d/ docker2:/etc/docker/
12. 远程主机拉取镜像
# docker pull reg.org/nginx:1.16