一、Docker 私有仓库搭建
私有仓库:
也就是在本地(局域网)搭建的一个类似公共仓库的东西,搭建好之后,我们可以将镜像提交到私有仓库中。这样我们既能使用 Docker 来运行我们的项目镜像,也避免了商业项目暴露出去的风险。
1. 拉取私有仓库镜像
Docker 官方提供了一个搭建私有仓库的镜像 registry ,只需把镜像下载下来,运行容器并暴露 5000 端口,就可以使用了。
docker pull registry:2
2. 运行镜像注册中心
docker run -d -v /opt/registry:/var/lib/registry -p 5000:5000 --name myregistry registry:2
Registry 服务默认会将上传的镜像保存在容器的 /var/lib/registry,我们将主机的 /opt/registry 目录挂载到该目录,即可实现将镜像保存到主机的 /opt/registry 目录了。
3. 验证
http://192.168.23.139:5000/v2
出现下面情况说明 registry 运行正常
4. 推送镜像到私有仓库
现在通过 push 镜像到 registry 来验证一下。
要通过 docker tag 将该镜像标志为要推送到私有仓库:
docker tag nginx:latest localhost:5000/nginx:latest
通过 docker push 命令将 Nginx 镜像 push到私有仓库中:
docker push localhost:5000/nginx:latest
查看镜像
http://192.168.23.139:5000/v2/_catalog
查看私有仓库目录,可以看到刚上传的镜像了
下载私有仓库的镜像,使用如下命令:
#先删除刚才的镜像
docker rmi -f 镜像id
#本地拉取
docker pull localhost:5000/镜像名:版本号
例如
docker pull localhost:5000/nginx:latest
常见问题:
如果拉取过程中报错或者 Registry 交互默认使用的是 HTTPS,但是搭建私有镜像默认使用的是 HTTP 服务
需要修改 [docker daemon](https://www.zhihu.com/search?q=docker daemon&search_source=Entity&hybrid_search_source=Entity&hybrid_search_extra={“sourceType”%3A"answer"%2C"sourceId"%3A2549303851}) 的启动参数(需要访问仓库的其他机器),添加如下参数,表示信任这个私有仓库,不进行安全证书检查(centos7为例)
修改 daemon.json 文件:
/etc/docker/daemon.json.rpmsave
mv daemon.json.rpmsave daemon.json
vi /etc/docker/daemon.json
添加以下内容,用于让 Docker 信任私有仓库地址,保存退出。
{
"insecure-registries": ["192.168.23.139:5000"]
}
重启:
# 重新加载某个服务的配置文件
sudo systemctl daemon-reload
# 重新启动 docker
sudo systemctl restart docker