有些涉密的信息代码不能放在阿里云的镜像仓库,因此需要构建一个个人内网专属的私有库,将镜像或者容器代码进行推送保存。
执行代码docker pull registry
,用于搭建私服前的准备。
然后运行私有库registry,相当于本地有个私有的docker hub。
docker run -d -p 5000:5000 -v /cz/myregistry/:/tmp/registry --privileged=true registry
默认情况,仓库被创建在容器的/varlib/lregistry目录下,建议自行用容器卷映射,方便于宿主机联调。其中的5000:5000是端口,-p是指定端口映射。-d是后台守护式新建容器。
原始的ubuntu镜像启动一个ubuntu容器后,是无法识别ifconfig命令的,因此需要生成容器后,手动添加ifconfig包,然后生成成镜像副本,在上传到本地私有库中去。
docker pull ubuntu
下载原始ubuntu镜像
docker run -it --name=myubuntu ubuntu /bin/bash
以交互式启动容器
apt-get update
更新apt管理器
apt-get install net-tools
安装ifconfig命令的包
ifconfig 验证容器是否能识别该命令
可以看到已经可以识别ifconfig了,刚刚新建的这个容器,他自己的ip是172.17.0.3
。
docker commit -m="add ifconfig cmd" -a="cz" 1a87279a5cbe myubuntu:1.0
编辑生成镜像的信息,要在容器外执行这个命令
可以看到生成镜像成功,然后docker images
查看,已有该镜像。
然后利用刚刚生成的镜像新建一个容器,执行`ifconfig`可以看到是已经识别该命令的。
先执行代码,看看刚刚运行起来的私服库registry是否曾经上传过镜像
curl -XGET http://192.168.5.3:5000/v2/_catalog
查看镜像推送日志,ip输的是容器的宿主机ip,端口是刚刚创建容器时指定的5000。
可以看到没有历史上传记录
docker tag myubuntu:1.0 192.168.5.3:5000/myubuntu:1.0
打包刚刚生成的镜像,准备提交本地私有仓库
在执行docker images
可以看到刚刚打包好的镜像
cat /etc/docker/daemon.json
vim /etc/docker/daemon.json
需要在这个json文件里边取消docker默认不允许http方式推送镜像的限制
vim进入这个文件后,先加个“,”号,然后输入如下命令,其中ip需要替换为自己宿主机的ip。如果修改完成后,仍然不生效,可以尝试重启docker。
"insecure-registries":["192.168.5.3:5000"]
然后执行systemctl restart docker
重启docker。然后重运行下私服仓库docker run -d -p 5000:5000 -v /cz/myregistry/:/tmp/registry --privileged=true registry
docker push 192.168.5.3:5000/myubuntu:1.0
用docker images查看后,推送刚刚打包的镜像
查看私服库上刚刚推送的镜像记录
curl -XGET http://192.168.5.3:5000/v2/_catalog
然后删除刚刚打包和生成的镜像,重新去私服库上pull下来,运行,看看是否能正常识别ifconfig命令。
docker rmi -f 镜像id
强制删除某个镜像
docker pull 192.168.5.3:5000/myubuntu:1.0
从私服库下载刚刚上传过的镜像
docker images
查看是否已经下载成功
docker run -it 025303e926d7 /bin/bash
重新运行这个容器
ifconfig
测试该命令
可以看到已经成功。