Docker仓库

Docker 仓库是用来包含镜像的位置,Docker提供一个注册服务器(Register)来保存多个仓库,每个仓库又可以包含多个具备不同tag的镜像。

Docker运行中使用的默认仓库是 Docker Hub 公共仓库。

docker镜像默认root密码 docker 镜像加密_docker镜像默认root密码

使用docker hub公共仓库

docker hub是一个docker镜像的公共仓库,你可以注册后免费使用,而且也可以通过命令登陆,去管理个人仓库,但是,国内建议使用阿里云镜像加速器去拉取需要的镜像,docker hub的访问速度有些感人。

  1. 需要internet连接,速度慢;
  2. 所有人都可以访问;
  3. 由于安全原因企业不允许将镜像放到外网。
阿里云镜像加速

需要注册阿里云帐号后,登陆控制台—>>>选择容器镜像服务—>>>选择镜像加速器—>>>根据参考文档配置

  • 配置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开源,我们可以快速构建企业私有仓库
  1. 下载registry镜像
# docker pull registry
  1. 运行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
  1. 上传镜像到本地仓库
  • 本地仓库在命名时候需要加上仓库的ip和端口
[root@docker1 ~]# docker tag nginx:1.16 localhost:5000/nginx:1.16
[root@docker1 ~]# docker push  localhost:5000/nginx:1.16

docker镜像默认root密码 docker 镜像加密_docker_02


上传成功!

Docker仓库添加证书加密功能
  1. 生成证书(域名westos.org要求在主机上有解析)
# mkdir  certs
# openssl req -newkey rsa:4096 -nodes -sha256 -keyout certs/reg.org.key -x509 -days 365 -out certs/reg.org.crt

docker镜像默认root密码 docker 镜像加密_Docker_03


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
  1. 拷贝证书到docker主机
# mkdir -p /etc/docker/certs.d/reg.org/
# cp reg.org.crt /etc/docker/certs.d/reg.org/ca.crt
  1. 上传镜像
# docker tag nginx:1.16 reg.org/nginx:1.16
# docker push reg.org/nginx:1.16

docker镜像默认root密码 docker 镜像加密_docker_04


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
  1. 重建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
  1. docker主机认证
# docker login reg.org

docker镜像默认root密码 docker 镜像加密_nginx_05


8. 查看保存的登陆认证信息

docker镜像默认root密码 docker 镜像加密_docker_06


9. 上传镜像

# docker tag nginx:1.16 reg.org/nginx:1.16
# docker push reg.org/nginx:1.16
  1. 拉取镜像
# docker pull  reg.org/nginx:1.16
  1. 远程主机需要登陆连接仓库,下载镜像,将认证目录拷贝到远程主机
scp -r /etc/docker/certs.d/ docker2:/etc/docker/

docker镜像默认root密码 docker 镜像加密_nginx_07


12. 远程主机拉取镜像

# docker pull reg.org/nginx:1.16

docker镜像默认root密码 docker 镜像加密_Docker_08