为了更方便的部署应用到Docker容器中,可以将打包应用镜像直接通过docker push 命令推送到服务器所在地镜像仓库中,所以需要搭建私有镜像仓库。 本文使用Docker公司开发的私有镜像裤Registry。
- 下载Register的Docker镜像
docker pull registry
- 设置私有仓库用户认证
#用户账户信息存储目录
mkdir /home/data/auth
如果registry版本在2.7以下可以用以下命令创建
docker run --entrypoint htpasswd registry -Bbn admin 123456 > /home/data/auth/htpasswd
但在2.7.0以上用以上命令会报错
docker: Error response from daemon: OCI runtime create failed: container_linux.go:367: starting container process caused: exec: "htpasswd": executable file not found in $PATH: unknown.
解决参考如下:
https://github.com/docker/distribution-library-image/issues/106
https://www.coder.work/article/7351056
解决方法(用户httpd-tools创建账号信息):
yum install -y httpd-tools
htpasswd -Bbn admin 123456 > /home/data/auth/htpasswd
- 创建registry的卷 (容器数据持久化)
docker volume create registry_data
- 启动registry
docker run --name registry2 -p 5000:5000 --restart=always \
-v registry_data:/var/lib/registry \
-v /home/data/auth:/auth \
-e "REGISTRY_AUTH=htpasswd" \
-e "REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm" \
-e REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd \
-e REGISTRY_STORAGE_DELETE_ENABLED="true" \
-d registry
REGISTRY_STORAGE_DELETE_ENABLED="true"标识可删除镜像
- 修改客户端Docker Daemon的配置文件,文件位置为/etc/docker/daemon.json,由于Docker默认使用HTTPS推送镜像,而我们的镜像仓库没有支持,所以需要添加如下配置,改为使用HTTP推送;
{
"registry-mirrors": ["https://fon46f0i.mirror.aliyuncs.com"],
"insecure-registries": [
"12.7.182.10:5000"
]
}
重启配置生效
systemctl daemon-reload && systemctl restart docker
- 安装registry ui
docker pull joxit/docker-registry-ui:1.5-static
- 使用Docker容器运行docker-registry-ui服务
docker run -p 8281:80 --name registry-ui1.5 \
--link registry2:registry2 \
-e REGISTRY_URL="http://registry2:5000" \
-e DELETE_IMAGES="true" \
-e REGISTRY_TITLE="Registry2" \
-d joxit/docker-registry-ui:1.5-static
在另外一台docker服务器docker push 向此私有仓库镜像
docker pull busybox
docker tag busybox 12.78.182.15:5000/busybox:latest
docker login --username=admin 12.78.182.15:5000
#输入密码并推送
docker push 12.78.182.15:5000/busybox:latest
浏览http://registry2:8281