在某些业务场景下,Dockerhub、阿里云这样的公共镜像仓库可能不太方便,涉及机密的公司不可能提供镜像给公网,所以需要创建一个本地私人仓库供给团队使用,基于公司内部项目构建镜像。Docker Registry是官方提供的工具,可以用于构建私有镜像仓库。
# 一、下载Docker Registry
docker pull registry
# 二、运行Registry
运行私有库Registry以后,相当于在本地搞了一个私有Docker Hub。
docker run -d -p 5000:5000 -v /zzyyuse/myregistry/:/tmp/registry --privileged=true registry
默认情况,仓库被创建在容器的/var/lib/registry目录下,建议自行用容器卷映射,方便与宿主机联调。至于数据卷的概念我们后面会谈到。
# 三、构建新的镜像
此处我们使用ubuntu镜像创建容器实例,安装ifconfig命令后将新的镜像commit。
首先从Hub上下载ubuntu镜像到本地成功运行,原始的ubuntu镜像是不带ifconfig命令的。
在外网连通的情况下,安装ifconfig命令并测试通过。
apt-get update
apt-get install net-tools
2
安装完成以后,commit我们的新镜像。
docker commit -m="提交的描述信息" -a="作者" 容器ID 要创建的目标镜像名:[标签名]
启动新的ubuntu镜像并和原来的进行对比:
首先官网默认下载的Ubuntu没有ifconfig命令。我们自己commit构建的新镜像,新增加了ifconfig功能,可以成功使用。
# 四、curl验证私有库
# 使用curl命令发送HTTP GET请求,获取Docker镜像仓库的目录列表。
curl -XGET http://192.168.111.162:5000/v2/_catalog
2
可以看到,目前私服库没有任何镜像上传过。
# 五、修改新镜像的Tag
docker tag 镜像:Tag Host:Port/Repository:Tag
OPTIONS说明:
docker tag:Docker命令,用于给镜像打标签。
镜像:Tag:表示要打标签的本地镜像的名称和标签。
Host:Port/Repository:Tag:表示目标镜像仓库的地址、端口、仓库名称和标签。
执行这条命令后,本地的镜像将被添加一个新的标签,并且与目标镜像仓库的地址和标签信息相关联。这样可以方便后续推送镜像到指定的仓库。
# 六、修改配置文件
docker默认不允许http方式推送镜像,通过修改配置选项来取消这个限制。
vim命令新增如下红色内容:vim /etc/docker/daemon.json
{
"registry-mirrors": ["https://aa25jngu.mirror.aliyuncs.com"],
"insecure-registries": ["192.168.111.162:5000"]
}
这个配置是json格式的,2个配置中间有个逗号 ',' 修改完后如果不生效,建议重启docker。
# 七、push推送到私有库
docker push 192.168.111.162:5000/zzyyubuntu:1.2
# 八、curl再次验证私有库
curl -XGET http://192.168.111.162:5000/v2/_catalog
# 九、pull到本地并运行
docker pull 192.168.111.162:5000/zzyyubuntu:1.2
docker run -it 镜像ID /bin/bash