服务器名称 | IP地址 | 说明 |
---|---|---|
服务器200 | 192.168.1.200 | docker私有仓库 |
服务器210 | 192.168.1.210 | docker客户端 |
软件 | 版本号 | 查询命令 |
---|---|---|
docker | Docker version 18.09.1, build 4c52b90 | docker -v |
centos8 | CentOS Linux release 8.0.1905 (Core) | cat /etc/redhat-release |
参考博客(文章目录一):https://blog.csdn.net/renfeigui0/article/details/103314065
1、在服务器200上拉取仓库镜像registry。
docker pull registry
2、在服务器200上运行docker私有仓库镜像,创建容器my-registry。
docker run -d -p 5000:5000 --restart=always --name my-registry \
-v /registry:/registry \
-e REGISTRY_STORAGE_DELETE_ENABLED=true \
-e REGISTRY_HTTP_ADDR=0.0.0.0:5000 \
registry:latest
说明
-d,后台运行容器
-p 5000:5000 ,映射容器5000端口至宿主机5000端口。
- - restart always,设置重新启动策略,在docker重新启动时自动重新启动容器my-registry。
- -name my-registry,给容器命名。
-v /registry:/registry,把docker容器中/registry目录的数据加载到宿主机的/registry目录,宿主机的/registry目录如果不存在会自动创建。目的是为了防止docker私有仓库这个容器被删除时,仓库里的镜像也会被删除。宿主机查看到的私有仓库镜像就在这个目录中。
-e REGISTRY_STORAGE_DELETE_ENABLED,设置是否允许删除仓库存储的镜像。
-e REGISTRY_HTTP_ADDR=0.0.0.0:5000,设置镜像仓库地址。
3、查看私有仓库镜像,暂时没有镜像。
yum install -y tree
tree /registry/
或
ls /registry/docker/registry/v2/repositories
或
curl http://192.168.1.200:5000/v2/_catalog
1、docker客户端210下载官网hello-world镜像。
docker pull hello-world
2、docker客户端210为hello-world镜像创建新标签,当标签的第一部分是主机名和端口时(192.168.1.200:5000),上传镜像时docker会将其解释为镜像仓库的位置。
docker tag hello-world:latest 192.168.1.200:5000/client210-hello-world
3、docker客户端210上传创建新标签的镜像至私有仓库服务器200。
docker push 192.168.1.200:5000/client210-hello-world
docker客户端210上传镜像至私有仓库服务器200报错问题一:报错“no route to host”
问题一解决方法:私有仓库服务器200设置防火墙(解决方法三)
参照博客(解决方法三):https://blog.csdn.net/renfeigui0/article/details/103843538
docker客户端服务器210上传镜像至私有仓库服务器200报错问题二:报错“ http: server gave HTTP response to HTTPS client”
问题二解决方法:docker客户端服务器210,编辑配置文件/etc/docker/daemon.json,增加内容“私有仓库IP:端口号”,保存配置文件,重启docker服务。
vi /etc/docker/daemon.json
{
"insecure-registries": ["192.168.1.200:5000"]
}
systemctl restart docker
4、上传成功后,查看私有仓库镜像,已经可以看到我们上传的镜像了。
curl http://192.168.1.200:5000/v2/_catalog
5、测试下载镜像过程:查看、删除docker客户端服务器210本地镜像,确认本地已无镜像,下载私有仓库服务器200镜像,查看下载到本地的镜像。
docker images
docker rmi 192.168.1.200:5000/client210-hello-world
docker images
docker pull 192.168.1.200:5000/client210-hello-world
docker images
1、私有仓库服务器200下载web界面管理工具docker-registry-web镜像。
docker pull hyper/docker-registry-web
2、设置私有仓库只读参数为false,创建启动容器registry-web。
docker run -itd -p 8080:8080 --restart=always --name registry_web --link my-registry \
-e REGISTRY_URL=http://192.168.1.200:5000/v2 \
-e REGISTRY_NAME=192.168.1.200:5000 \
-e REGISTRY_READONLY=false \
hyper/docker-registry-web:latest
说明
-d,后台运行容器。
-p 8080:8080,映射容器8080端口至宿主机8080端口。
- - restart always,设置重新启动策略,在docker重新启动时自动重新启动容器my-registry。
- -name my-registry 给容器命名。
--link ,设置连接的仓库。
-e REGISTRY_URL,设置仓库URL。
-e REGISTRY_NAME,设置仓库主机。
-e REGISTRY_READONLY ,设置仓库是否允许读写、删除。
3、防火墙开放端口8080。
firewall-cmd --zone=public --add-port=8080/tcp --permanent
firewall-cmd --reload
firewall-cmd --zone=public --query-port=8080/tcp
4、docker私有仓库服务器200,编辑配置文件/etc/docker/daemon.json,增加内容“私有仓库IP:端口号”,保存配置文件,重启docker服务。
vi /etc/docker/daemon.json
{
"insecure-registries": ["192.168.1.200:5000"]
}
systemctl restart docker
5、局域网内其他主机打开浏览器,输入网址http://192.168.1.200:8080,访问私有仓库镜像如下图,还可以删除镜像。
参照博客:https://blog.csdn.net/renfeigui0/article/details/103847409
参照博客:https://blog.csdn.net/renfeigui0/article/details/104037381
参照博客:https://blog.csdn.net/renfeigui0/article/details/103952313