详解私有 Docker Registry 部署方案及用户手册

 更新时间:2026年04月29日 09:41:15   作者:凭X而动  
本文主要介绍了详解私有 Docker Registry 部署方案,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

本文档旨在帮助在 Ubuntu 18.04 系统上从零开始部署一个私有的 Docker Registry(镜像仓库),并提供详细的使用说明。通过本文档,您将完成以下任务:

  • 获取当前 Ubuntu 系统信息
  • 安装 Docker 引擎
  • 运行私有 Registry 容器
  • 配置 Docker 客户端以使用 HTTP 私有仓库
  • 测试推送和拉取镜像
  • 多机访问配置
  • 常用维护命令

1. 系统环境检查

在开始之前,请确认您的 Ubuntu 系统版本。执行以下命令查看发行版信息:

cat /etc/os-release

示例输出:

NAME="Ubuntu"
VERSION="18.04.5 LTS (Bionic Beaver)"
ID=ubuntu
ID_LIKE=debian
PRETTY_NAME="Ubuntu 18.04.5 LTS"
VERSION_ID="18.04"
...

如果您的系统是 Ubuntu 18.04,则可以继续下面的步骤。其他版本可能略有差异,但整体流程相似。

2. 安装 Docker

Docker 是运行私有仓库的基础。我们将使用官方仓库安装最新版本的 Docker CE。

2.1 更新包索引并安装依赖

sudo apt-get update
sudo apt-get install -y \
    apt-transport-https \
    ca-certificates \
    curl \
    software-properties-common

2.2 添加 Docker 官方 GPG 密钥

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -

2.3 添加稳定版 Docker 仓库

sudo add-apt-repository \
   "deb [arch=amd64] https://download.docker.com/linux/ubuntu \
   $(lsb_release -cs) \
   stable"

2.4 安装 Docker CE

sudo apt-get update
sudo apt-get install -y docker-ce docker-ce-cli containerd.io

2.5 启动 Docker 并设置开机自启

sudo systemctl start docker
sudo systemctl enable docker

2.6 (可选)将当前用户加入 docker 组

为了避免每次使用 Docker 都需要 sudo,可以将当前用户加入 docker 组:

sudo usermod -aG docker $USER

重要:执行该命令后,需要重新登录或者执行 newgrp docker 使组权限生效。

3. 部署私有 Docker Registry

我们将使用 Docker 官方提供的 registry:2 镜像来运行一个轻量级的私有仓库。

3.1 创建数据存储目录

镜像数据将持久化保存在宿主机的 /data/docker-registry 目录下,请确保该目录存在且 Docker 有读写权限:

sudo mkdir -p /data/docker-registry

3.2 运行 Registry 容器

执行以下命令启动 Registry 容器:

docker run -d \
  --name docker-registry \
  --restart=always \
  -p 5000:5000 \
  -v /data/docker-registry:/var/lib/registry \
  -e REGISTRY_STORAGE_DELETE_ENABLED=true \
  registry:2

参数说明:

  • -d:后台运行容器
  • --name docker-registry:指定容器名称
  • --restart=always:容器退出时自动重启
  • -p 5000:5000:将宿主机的 5000 端口映射到容器的 5000 端口
  • -v /data/docker-registry:/var/lib/registry:挂载数据卷,将镜像数据持久化到宿主机
  • -e REGISTRY_STORAGE_DELETE_ENABLED=true:启用删除镜像的功能(可选)
  • registry:2:使用的镜像名称和标签

执行后,Docker 会自动拉取 registry:2 镜像并启动容器。如果看到类似以下输出,则表示容器已成功启动:

Unable to find image 'registry:2' locally
2: Pulling from library/registry
...
Digest: sha256:...
Status: Downloaded newer image for registry:2
95792afadf5365eeb296a670c3f7ee11b82df0580260686a50527441d1d1585a

3.3 验证容器运行状态

docker ps

应该能看到名为 docker-registry 的容器,状态为 Up。同时可以通过 curl 测试 Registry API 是否正常:

curl http://localhost:5000/v2/

如果返回空 JSON {},说明 Registry 运行正常。

4. 配置 Docker 客户端

Docker 默认要求仓库使用 HTTPS 连接,而我们的私有仓库仅提供 HTTP 服务。因此需要将仓库地址添加到 Docker 的 insecure-registries 列表中。

4.1 编辑 Docker 配置文件

sudo vim /etc/docker/daemon.json

如果文件不存在,则新建。添加以下内容:

{
  "insecure-registries": ["localhost:5000"]
}

注意:如果要从其他机器访问此私有仓库,请将 localhost 替换为该服务器的实际 IP 地址(例如 192.168.1.100:5000)。并且需要在每一台需要访问此仓库的机器上都进行相同配置。

4.2 重启 Docker 服务

sudo systemctl restart docker

4.3 重新启动 Registry 容器

Docker 重启后会停止所有容器,需要手动启动 Registry 容器:

docker start docker-registry

5. 测试私有仓库

5.1 拉取测试镜像

docker pull hello-world

5.2 为镜像打上仓库地址标签

docker tag hello-world localhost:5000/hello-world:test

5.3 推送镜像到私有仓库

docker push localhost:5000/hello-world:test

推送成功后,会显示镜像的 layer 上传信息。

5.4 查看仓库中的镜像列表

curl http://localhost:5000/v2/_catalog

应输出类似 {"repositories":["hello-world"]}

5.5 从私有仓库拉取镜像

先删除本地镜像,模拟新环境:

docker rmi hello-world localhost:5000/hello-world:test

然后从私有仓库拉取:

docker pull localhost:5000/hello-world:test

运行拉取的镜像:

docker run --rm localhost:5000/hello-world:test

如果看到 Hello-World 的输出,则整个流程成功。

6. 从其他机器访问私有仓库

6.1 确定服务器 IP 地址

在运行 Registry 的服务器上执行:

ip addr show  # 或 ifconfig

找到内网 IP(如 192.168.1.100)或公网 IP。

6.2 在客户端机器上配置 insecure-registries

编辑客户端的 /etc/docker/daemon.json,添加:

{
  "insecure-registries": ["服务器IP:5000"]
}

重启客户端 Docker:

sudo systemctl restart docker

6.3 推送镜像到远程仓库

在客户端机器上,为镜像打标签并推送:

docker tag hello-world 服务器IP:5000/hello-world:test
docker push 服务器IP:5000/hello-world:test

6.4 拉取镜像

docker pull 服务器IP:5000/hello-world:test

7. 防火墙设置

如果服务器启用了防火墙(如 ufw),需要开放 5000 端口:

sudo ufw allow 5000

8. 常用管理命令

查看容器状态

docker ps -a | grep docker-registry

查看容器日志

docker logs docker-registry

实时跟踪日志:docker logs -f docker-registry

停止/启动容器

docker stop docker-registry
docker start docker-registry

查看存储使用情况

du -sh /data/docker-registry

列出仓库中的所有镜像

curl http://localhost:5000/v2/_catalog

查看某个镜像的所有标签

curl http://localhost:5000/v2/<镜像名>/tags/list

9. 常见问题

Q: 为什么推送镜像时报错http: server gave HTTP response to HTTPS client?

A: 因为没有将仓库地址添加到 insecure-registries,请按照第 4 节配置并重启 Docker。

Q: 如何删除私有仓库中的镜像?

A: Registry 默认不支持通过 API 直接删除镜像,需要先启用删除功能(已在启动命令中通过 -e REGISTRY_STORAGE_DELETE_ENABLED=true 启用),然后通过 Docker Registry API 进行删除,操作较复杂。建议使用 GC(垃圾回收)功能清理未使用的 blob。

Q: 镜像存储位置空间不足怎么办?

A: 可以挂载更大的磁盘到 /data/docker-registry,或者定期清理无用镜像。清理后需要手动执行垃圾回收:docker exec docker-registry registry garbage-collect /etc/docker/registry/config.yml

Q: 如何为私有仓库启用 HTTPS?

A: 生产环境强烈建议启用 HTTPS。可以通过配置 Registry 使用 SSL 证书实现,具体步骤请参考 Docker Registry 官方文档

10. 总结

至此,您已经成功在 Ubuntu 18.04 上部署了私有的 Docker Registry,并掌握了基本的使用方法。该私有仓库可以用于团队内部共享镜像,节省公网带宽,并提升镜像拉取速度。更多相关私有 Docker Registry 部署内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 教你如何通过编写dockerfile部署python项目

    教你如何通过编写dockerfile部署python项目

    Dockerfile是一个放置在项目根目录下的描述文件,可以利用 Docker 命令基于该文件构建一个镜像,下面这篇文章主要给大家介绍了关于如何通过编写dockerfile部署python项目的相关资料,需要的朋友可以参考下
    2024-07-07
  • docker harbor私有仓库登录报错的问题解决

    docker harbor私有仓库登录报错的问题解决

    本文主要介绍了docker harbor私有仓库登录报错,通过报错信息可知,Docker无法验证Harbor私有仓库所使用的SSL证书,下面就来介绍一下问题解决,感兴趣的可以了解一下
    2025-08-08
  • 如何实现不同网段docker容器网络互通

    如何实现不同网段docker容器网络互通

    文章讲解了通过Docker bridge网络实现容器间通信的方法,包括关闭防火墙、拉取busybox镜像、创建容器并测试IP连通性,使用--link参数连接容器,以及跨网段通信的配置技巧
    2025-07-07
  • docker registry 私有仓库的搭建过程

    docker registry 私有仓库的搭建过程

    这篇文章主要介绍了docker registry 私有仓库,私有仓库最常用的就是Registry、Harbor两种,那接下来详细介绍如何搭建registry私有仓库,感兴趣的朋友跟随小编一起看看吧
    2022-01-01
  • k8s手动拉取docker镜像的方法示例

    k8s手动拉取docker镜像的方法示例

    docker是一种便捷的容器化解决方案,它可以通过拉取镜像的方式轻松地部署和管理应用程序,本文主要介绍了k8s手动拉取docker镜像的方法示例,感兴趣的可以了解一下
    2024-02-02
  • Docker本地目录挂载的实现步骤

    Docker本地目录挂载的实现步骤

    本文主要介绍了Docker本地目录挂载的实现步骤
    2024-02-02
  • Docker如何使用Dockerfile构建镜像

    Docker如何使用Dockerfile构建镜像

    本篇文章主要介绍了Docker如何使用Dockerfile构建镜像,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-05-05
  • Docker Compose 与 Harbor 私有仓库详解

    Docker Compose 与 Harbor 私有仓库详解

    本文将探讨Docker Compose多容器编排工具与Harbor企业级私有仓库的核心技术,帮助读者掌握从容器管理到镜像安全存储的完整解决方案,感兴趣的朋友一起看看吧
    2025-06-06
  • docker-compose管理容器network与ip问题

    docker-compose管理容器network与ip问题

    这篇文章主要介绍了docker-compose管理容器network与ip问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-01-01
  • 通过idea打包项目到docker的操作方法

    通过idea打包项目到docker的操作方法

    这篇文章主要介绍了通过idea打包项目到docker的操作方法,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-05-05

最新评论