起因
众所周知的原因,我们访问 hub.docker.com 很慢,需要使用加速镜像,具体如何使用,请看官自行搜索,这里不做重点说明,这里要说的是另外一种加速的方法:搭建私有镜像。
环境说明
受制于开发环境,我在 Windows Server 2016 Standard 中构建了很多 Images, 计划在hyper-v中创建debian系统(纯命令版本,无GUI),在debian中搭建私有的docker镜像仓库,然后将Host(Windows Server 2016 Standard)中构建的镜像上传到 debian 中, debian中仓库中存放的镜像路径使用-v操作映射到debian系统的 root/registry 路径下。
-
Windows Server 2016 Standard 安装(略)
-
Hyper-v 安装(略)
-
在hyper-v中安装debian并配置
-
首先在hyper-v中新建一个虚拟网络交换机,类型选“外部”,选中物理网卡点确定;
-
下载最小的debian镜像(ISO文件),大概300多MB,设置启动镜像后,还要在hyper-v中选中虚拟机,在设置里面将安全启动项勾掉
-
安装debian系统(略)
-
配置sudo
由于安装的是网络版镜像,安装好的系统没有sudo,执行sudo command的时候会报sudo: command not found
的错误,解决方案如下:- 切换到root用户,输入root口令(安装debian的时候设置的)
$ su
- 更新软件源并安装sudo
$ apt update $ apt install sudo
- 执行visudo修改sudoers(推荐),还有一种方式是 vi /etc/sudoers(不推荐)
... # User privilege specification root ALL=(ALL) ALL youruser ALL=(ALL) ALL ...
- 不需要重启即可使用。
- 切换到root用户,输入root口令(安装debian的时候设置的)
-
设置debian系统网卡
$ sudo vi /etc/network/interfaces
将动态获取地址注释掉,用如下代码代替
... # The primary network interface # iface eth0 inet dhcp iface eth0 inet static address 192.168.0.90 netmask 255.255.255.0 gateway 192.168.0.1
重新启动
$ sudo reboot
-
-
debian中安装docker
- 我用的是一键安装脚本
$ curl -fsSL get.docker.com -o get-docker.sh $ sudo sh get-docker.sh
- 测试安装
$ sudo docker info
- 我用的是一键安装脚本
开始搭建私有仓库(registry)
-
创建并运行registry
有了docker,一切都变得梦幻般美好,一个命令:$ sudo docker run -d -p 5000:5000 -v /root/registry:/var/lib/registry --restart always registry:2
解释一下参数:
- -d 后台运行;
- -p 5000:5000 端口映射 主机的5000端口(debian系统):容器的5000端口
- -v 路径map,将主机的 /root/registry 路径 map 到容器的 /var/lib/registry
- --restart always ,恩,这个解释起来优点麻烦,在我这里的意思是开机启动,官方的解释见Start containers automatically
这样,私有 registry 就运行起来了,且支持开机启动。
-
在 windows server standard 中设置虚拟机为自动启动
这样当物理机(windows server 2016)启动时,debian虚拟机会自动启动,debian系统内的docker 仓库也会自动启动 -
使用
-
tag 镜像
PS > docker tag windowsservercore-demo 192.168.0.90:5000/windowsserver-core-demo
-
上传镜像
- 先要修改配置文件daemon.json
windows下的路径是 c:/programdata/docker/config/daemon.json, linux下的路径 /etc/docker/daemon.json
在配置文件中增加节点:
{ "insecure-registries": ["192.168.0.90:5000"] }
- restart docker
PS > restart-service *docker*
- 上传
PS > docker push 192.168.0.90:5000/windowsserver-core-demo
- 先要修改配置文件daemon.json
-
用 curl 查看仓库中的镜像
PS > curl 192.168.0.90:5000/v2/_catalog
或者直接用网页打开 http://192.168.0.90:5000/v2/_catalog ,结果是一样的
-
下载镜像(局域网内可用)
PS > docker pull 192.168.0.90:5000/windowsserver-core-demo
-