这段时间开始一个新项目需要使用docker私有镜像仓库,然后通过私有镜像仓库完成新的docker镜像制作,包括tomcat、nginx负载均衡,最后开发web程序完成对从oracle数据库迁移至本地mysql数据库的数据表查询,查询程序与tomcat镜像包一并以docker镜像方式提交,这个项目的第一步是构建一个docker私有镜像仓库,所以今天我们先来完成docker私有镜像仓库的创建:

      在部署注册表之前,需要在主机上安装Docker。注册表是registry映像的实例,并在Docker中运行。生产环境中的注册表必须受TLS保护,理想情况下应使用访问控制机制。

       制作私有镜像的主要步骤:

    一、配置主机名:myregistryvip.com 修改/etc/hosts文件增加对myregistryvip.com的ip地址解析

    二、在本地或共享存储中创建用于保存认证信息、证书信息及镜像文件的三个目录,分别是auth、certs与data

    三、生成自签名证书文件,注意CN name的域名一定要与第一步配置的主机名一致;

    四、生成docker基本认证的用户名、密码

    五、创建docker-compose启动yaml文件并以后台方式启动

    六、测试使用docker登陆本地私有镜像

一、主机基础信息配置

主机名设置

hostnamectl set-hostname myregistryvip.com

hosts设置

docker阿里注册表及镜像地址 docker 注册表镜像_centos

二、目录设置

在home目录下新建三个目录auth certs data

docker阿里注册表及镜像地址 docker 注册表镜像_主机名_02

三、自签名证书设置

openssl req \
   -newkey rsa:4096 -nodes -sha256 -keyout certs/domain.key \
   -x509 -days 365 -out certs/domain.crt

Common Name的设置与第一步设置的主机名一致即可。

docker阿里注册表及镜像地址 docker 注册表镜像_docker_03

四、创建用于docker登陆私有镜像的用户名、密码

例如:新建账号testuser 密码:testpassword

docker run --entrypoint htpasswd registry:2 -Bbn testuser testpassword > auth/htpasswd

docker阿里注册表及镜像地址 docker 注册表镜像_docker阿里注册表及镜像地址_04

五、创建用于docker-compose启动私有镜像仓库的yaml文件docker-compose.yml

registry:
   restart: always
   image: registry:2
   ports:
     - 5000:5000
   environment:
     REGISTRY_HTTP_TLS_CERTIFICATE: /certs/domain.crt
     REGISTRY_HTTP_TLS_KEY: /certs/domain.key
     REGISTRY_AUTH: htpasswd
     REGISTRY_AUTH_HTPASSWD_PATH: /auth/htpasswd
     REGISTRY_AUTH_HTPASSWD_REALM: Registry Realm
   volumes:
     - /home/data:/var/lib/registry
     - /home/certs:/certs
     - /home/auth:/auth

docker阿里注册表及镜像地址 docker 注册表镜像_docker_05

docker-compose up -d

用后台方式启动私有镜像仓库

六、使用docker新建账号登陆私有镜像仓库

docker login myregistryvip.com:5000

docker阿里注册表及镜像地址 docker 注册表镜像_docker_06

1、给准备上传到私有仓库的镜像打标

docker tag centos:latest myregistryvip.com:5000/centos:latest

docker阿里注册表及镜像地址 docker 注册表镜像_主机名_07

2、 将打标后的镜像上传到私有仓库

docker push myregistryvip.com:5000/centos:latest

docker阿里注册表及镜像地址 docker 注册表镜像_docker阿里注册表及镜像地址_08

3、观察本地持久化目录中是否有变化

du -h  data/ 

docker阿里注册表及镜像地址 docker 注册表镜像_docker_09

4、通过web的api接口访问查看效果

https://10.37.6.42:5000/v2/_catalog

docker阿里注册表及镜像地址 docker 注册表镜像_centos_10

 

https://10.37.6.42:5000/v2/centos/tags/list

docker阿里注册表及镜像地址 docker 注册表镜像_docker_11

七、排错

1、自签名证书common name输入与主机名不一致

docker阿里注册表及镜像地址 docker 注册表镜像_docker_12

重新部署证书修改common name与主机名一致后重启docker

2、自签名证书不安全无法通过认证

docker阿里注册表及镜像地址 docker 注册表镜像_docker阿里注册表及镜像地址_13

在/etc/docker/daemon.json中新增内容如下:

{
     "insecure-registries": [
         "myregistryvip.com:5000"
     ]
 }

docker阿里注册表及镜像地址 docker 注册表镜像_docker_14

八、其他docker主机访问私有镜像仓库

1、修改hosts文件,增加私有镜像仓库的域名解析IP地址,如果有统一的dns则无需修改

docker阿里注册表及镜像地址 docker 注册表镜像_docker_15

 2、修改/etc/docker/daemon.json文件后重启docker

{
     "insecure-registries": [
         "myregistryvip.com:5000"
     ]
 }

3、使用docker通过域名登录

docker阿里注册表及镜像地址 docker 注册表镜像_centos_16

4、拉取仓库镜像文件

docker pull myregistryvip.com:5000/centos:latest

docker阿里注册表及镜像地址 docker 注册表镜像_docker_17