1. 为什么要有私有库?

如果涉及到公司机密文件,使用DockerHub、阿里云这样的公共镜像仓库就不合适,所以需要创建一个本地私人仓库提供给团队使用,基于公司内部项目构建镜像。而 Docker Registry是官方提供的工具,可以用于构建私有镜像仓库。

2. 本地镜像发布到私有库

1. 下载镜像 Docker Registry,之后查看是否安装成功

docker pull registry    # 下载镜像
docker images    # 查看已经安装的镜像

服务器测试docker推送到私服nexus docker推送到私有仓库_linux

服务器测试docker推送到私服nexus docker推送到私有仓库_服务器_02

 2. 运行私有库 Registry,相当于本地有个私有Docker Hub。默认情况下仓库被创建在容器的/var/lib/registry目录下,建议用容器卷映射,方便于宿主机联调

docker run -d -p 5000:5000 - v /wmq/myregistry/:/tmp/registry --privileged=true registry

服务器测试docker推送到私服nexus docker推送到私有仓库_linux_03

 3. 使用 docker ps 查看该容器

docker ps

服务器测试docker推送到私服nexus docker推送到私有仓库_linux_04

4. 创建一个新镜像,即在原始 ubuntu镜像基础上安装一个 ifconfig 命令。

docker run -it ubuntu /bin/bash    # 进入ubuntu容器
apt-get update    # 更新软件包
apt-get install net-tools    # 安装ifconfig需要的net-tools

服务器测试docker推送到私服nexus docker推送到私有仓库_docker_05

ifconfig    # 在容器内执行 ifconfig命令,看是否安装成功

服务器测试docker推送到私服nexus docker推送到私有仓库_服务器_06

# 退出容器
exit   
# 提交镜像
docker commit -m="add ubuntu ifconfig" -a="wmq" 8143a151542 ubuntu_add_ifconfig:20230203

服务器测试docker推送到私服nexus docker推送到私有仓库_运维_07

docker images    # 查看是否将新生成的镜像提交成功

 

服务器测试docker推送到私服nexus docker推送到私有仓库_运维_08

5. 使用curl命令验证私服库上有什么镜像

curl -XGET localhost:5000/v2/_catalog

由于目前并没有把新镜像传到私服库里,因此此时私服库里什么都没有 

 

服务器测试docker推送到私服nexus docker推送到私有仓库_服务器_09

6. 将新镜像修改为符合私服规范的tag

语法:docker tag 镜像:tag host:port/ repository:tag

docker tag ubuntu_add_ifconfig:20230203 localhost:5000/ubuntu_add_ifconfig:20230203

服务器测试docker推送到私服nexus docker推送到私有仓库_docker_10

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    # 开启容器

服务器测试docker推送到私服nexus docker推送到私有仓库_docker_11

 

服务器测试docker推送到私服nexus docker推送到私有仓库_linux_12

9. 将新镜像使用push命令推送到私服库,并使用curl命令验证私服库镜像

语法:docker push host:port/镜像名:tag

docker push localhost:5000/ubuntu_add_ifconfig:20230203    # 将镜像上传到私服库
curl -XGET localhost:5000/v2/_catalog    # 查看私服库镜像

服务器测试docker推送到私服nexus docker推送到私有仓库_linux_13

 10. 删除本地新镜像,并从私服库拉取镜像

docker images # 查看所有镜像
docker rmi -f 3c678c2cf5c4    # 删除新镜像
docker images # 查看所有镜像,看是否删除成功
docker pull localhost:5000/ubuntu_add_ifconfig:20230203    # 从私服库拉取镜像
docker images # 查看所有镜像,看是否拉取成功

服务器测试docker推送到私服nexus docker推送到私有仓库_容器_14

11. 通过新镜像进入容器,看是否能够使用 ifconfig 命令,如果显示如下命令,则往私服库推送和拉取镜像成功。

docker run -it localhost:5000/ubuntu_add_ifconfig:20230203    # 创建并进入容器
ifconfig    # 查看该命令是否可以成功运行

服务器测试docker推送到私服nexus docker推送到私有仓库_linux_15