1. 为什么要有私有库?
如果涉及到公司机密文件,使用DockerHub、阿里云这样的公共镜像仓库就不合适,所以需要创建一个本地私人仓库提供给团队使用,基于公司内部项目构建镜像。而 Docker Registry是官方提供的工具,可以用于构建私有镜像仓库。
2. 本地镜像发布到私有库
1. 下载镜像 Docker Registry,之后查看是否安装成功
docker pull registry # 下载镜像
docker images # 查看已经安装的镜像
2. 运行私有库 Registry,相当于本地有个私有Docker Hub。默认情况下仓库被创建在容器的/var/lib/registry目录下,建议用容器卷映射,方便于宿主机联调
docker run -d -p 5000:5000 - v /wmq/myregistry/:/tmp/registry --privileged=true registry
3. 使用 docker ps 查看该容器
docker ps
4. 创建一个新镜像,即在原始 ubuntu镜像基础上安装一个 ifconfig 命令。相关原理和语法可参考Docker - 8. Docker镜像底层原理_Aaron_neil的博客-CSDN博客
docker run -it ubuntu /bin/bash # 进入ubuntu容器
apt-get update # 更新软件包
apt-get install net-tools # 安装ifconfig需要的net-tools
ifconfig # 在容器内执行 ifconfig命令,看是否安装成功
# 退出容器
exit
# 提交镜像
docker commit -m="add ubuntu ifconfig" -a="wmq" 8143a151542 ubuntu_add_ifconfig:20230203
docker images # 查看是否将新生成的镜像提交成功
5. 使用curl命令验证私服库上有什么镜像
curl -XGET localhost:5000/v2/_catalog
由于目前并没有把新镜像传到私服库里,因此此时私服库里什么都没有
6. 将新镜像修改为符合私服规范的tag
语法:docker tag 镜像:tag host:port/ repository:tag
docker tag ubuntu_add_ifconfig:20230203 localhost:5000/ubuntu_add_ifconfig:20230203
7. 修改配置文件使其支持http
由于docker默认不允许使用http方式推送镜像,因此我们通过配置选项来取消这个显示。如果修改完不生效,则建议重启docker。具体操作为修改 /etc/docker/daemon.json文件如下:
{
"insecure-registries" : [ "localhost:5000" ]
}
8. 重新加载、重启docker、启动容器
systemctl daemon-reload
systemctl restart docker
docker ps -a # 查看容器id
docker start 572ee242dd76 # 开启容器
9. 将新镜像使用push命令推送到私服库,并使用curl命令验证私服库镜像
语法:docker push host:port/镜像名:tag
docker push localhost:5000/ubuntu_add_ifconfig:20230203 # 将镜像上传到私服库
curl -XGET localhost:5000/v2/_catalog # 查看私服库镜像
10. 删除本地新镜像,并从私服库拉取镜像
docker images # 查看所有镜像
docker rmi -f 3c678c2cf5c4 # 删除新镜像
docker images # 查看所有镜像,看是否删除成功
docker pull localhost:5000/ubuntu_add_ifconfig:20230203 # 从私服库拉取镜像
docker images # 查看所有镜像,看是否拉取成功
11. 通过新镜像进入容器,看是否能够使用 ifconfig 命令,如果显示如下命令,则往私服库推送和拉取镜像成功。
docker run -it localhost:5000/ubuntu_add_ifconfig:20230203 # 创建并进入容器
ifconfig # 查看该命令是否可以成功运行
注:该博客中部分图文内容来自于的 Docker - 新镜像推送私服库 学习笔记,仅供参考。如看其他Docker内容,可看我博客Docker系列aaron_neil_Dcoker系列,持续更新中。