应用场景: 在局域网中
- 电脑A可以上外网,局域网ip为192.168.31.3,
充当局域网中的代理服务器192.168.31.3:19966
- 电脑B不可以上网,局域网ip为192.168.31.5
- 电脑C不可以上网,局域网ip为192.168.31.4
- B、C可以通过A代理上网,apt通过代理也可以正常下载
- 在B配置docker私有仓库,C拉取B仓库的镜像
章节适用说明:
- 在B中需要进行
一、网络配置
使docker可以上网,从而可以拉取registry
- 当B使用
docker push 192.168.31.5:5000/tag_name
需要断开docker代理
这样其实很不方便,改进的局域网私有仓库搭建思路:
- 作为私有仓库的主机B,有两块网卡,一块连接外网,一块连接局域网,这样不需要代理服务器A
- 这样B可以省去
push
到私有仓库时需要断开代理的麻烦 - C可以不用连接外网,
直接拉取局域网B仓库的镜像
- C如果不能直接上外网,可以在B上搭建代理服务器,C通过B可以代理上网,正常使用apt
一、网络配置
1 配置docker代理
sudo vi /lib/systemd/system/docker.service
在[Service]部分下增加Environment字段,配置http代理地址
[Service]
Environment="HTTP_PROXY=192.168.31.3:19966/" "HTTPS_PROXY=192.168.31.3:19966/"
重启docker服务
systemctl daemon-reload
systemctl restart docker
2 配置国内docker源
vim /etc/docker/daemon.json
阿里镜像(可以自己申请加速地址)1
{
"registry-mirrors": ["https://alzgoonw.mirror.aliyuncs.com"]
}
中科大源:
{
"registry-mirrors": ["https://docker.mirrors.ustc.edu.cn"]
}
二、服务端配置2
1 拉取registry镜像
docker pull registry
2 运行仓库容器
拉取成功之后,使用docker images -a
检查是否存在registry
docker run -d -p 5000:5000 --name="docker-registry" --restart=always -v /root/docker/registry/:/var/lib/registry/ registry
注:
- 后台启动 registry 镜像构建出来的容器,并命名为 docker-registry,端口号映射为 5000 到 5000
- –restart=always 代表当容器因为某些原因停止时,不管退出码是什么都自动重启。除了 always 还有 on-failure 代表只有退出码不为 0 时才重启,并且接受重启次数参数:–restart=on-failture:5
- -v 指定将宿主机的 /root/docker/registry/ 目录挂载到容器的 /var/lib/registry/ 目录。
- 端口占用:
查询占用:lsof -i:5000
若要关闭使用这个端口的程序,使用kill + 对应的pid,kill -9 PID号
3 push镜像到私有仓库
将B(ip:192.168.31.5)的registry
镜像push
到局域网私有仓库(其实还是在B的主机上,但是局域网中的其他机器可以访问到)
- 需要将
registry
镜像做一个标签
docker tag registry 192.168.31.5:5000/liu/registry
-
push
到局域网私有仓库,docker不使用代理
docker push 192.168.31.5:5000/liu/registry
- 检查私有仓库中的镜像,输出
{"repositories":["liu/registry"]}
,成功
curl 192.168.31.5:5000/v2/_catalog
第二步出错:The push refers to repository [192.168.31.5:5000/liu/registry] Get https://192.168.31.5:5000/v2/: http: server gave HTTP response to HTTPS client
解决:
vim /etc/docker/daemon.json
加入:
"insecure-registries": [
"192.168.31.5:5000"
]
注意需要逗号隔开。文件配置错误会导致:Failed to start Docker Application Container Engine.
例如模板:
{
"data-root": "/var/lib/docker",
"log-opts": {
"max-size": "2g",
"max-file": "2"
},
"registry-mirrors": [
"https://docker.mirrors.ustc.edu.cn/",
"https://hub-mirror.c.163.com",
"https://registry.docker-cn.com",
"https://dockerhub.azk8s.cn",
"https://reg-mirror.qiniu.com",
"https://registry.docker-cn.com"
],
"runtimes": {
"nvidia": {
"runtimeArgs": [],
"path": "/usr/bin/nvidia-container-runtime"
}
},
"log-driver": "json-file"
}
service docker restart
三、客户拉取局域网中私有仓库镜像
docker pull 192.168.31.5:5000/liu/registry
Error response from daemon: Get https://192.168.31.5:5000/v2/: http: server gave HTTP response to HTTPS client
解决:
vim /etc/docker/daemon.json
加入:
"insecure-registries": [
"192.168.31.5:5000"
]
service docker restart