这段时间开始一个新项目需要使用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设置
二、目录设置
在home目录下新建三个目录auth certs data
三、自签名证书设置
openssl req \
-newkey rsa:4096 -nodes -sha256 -keyout certs/domain.key \
-x509 -days 365 -out certs/domain.crt
Common Name的设置与第一步设置的主机名一致即可。
四、创建用于docker登陆私有镜像的用户名、密码
例如:新建账号testuser 密码:testpassword
docker run --entrypoint htpasswd registry:2 -Bbn testuser testpassword > auth/htpasswd
五、创建用于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-compose up -d
用后台方式启动私有镜像仓库
六、使用docker新建账号登陆私有镜像仓库
docker login myregistryvip.com:5000
1、给准备上传到私有仓库的镜像打标
docker tag centos:latest myregistryvip.com:5000/centos:latest
2、 将打标后的镜像上传到私有仓库
docker push myregistryvip.com:5000/centos:latest
3、观察本地持久化目录中是否有变化
du -h data/
4、通过web的api接口访问查看效果
https://10.37.6.42:5000/v2/_catalog
https://10.37.6.42:5000/v2/centos/tags/list
七、排错
1、自签名证书common name输入与主机名不一致
重新部署证书修改common name与主机名一致后重启docker
2、自签名证书不安全无法通过认证
在/etc/docker/daemon.json中新增内容如下:
{
"insecure-registries": [
"myregistryvip.com:5000"
]
}
八、其他docker主机访问私有镜像仓库
1、修改hosts文件,增加私有镜像仓库的域名解析IP地址,如果有统一的dns则无需修改
2、修改/etc/docker/daemon.json文件后重启docker
{
"insecure-registries": [
"myregistryvip.com:5000"
]
}
3、使用docker通过域名登录
4、拉取仓库镜像文件
docker pull myregistryvip.com:5000/centos:latest