如何在 Ubuntu 18.04 LTS 上设置私有 Docker 注册表如何在 Ubuntu 18.04 LTS 上设置私有 Docker 注册表如何在 Ubuntu 18.04 LTS 上设置私有 Docker 注册表如何在 Ubuntu 18.04 LTS 上设置私有 Docker 注册表
  • 文章
  • 正则表达式
    • 工具
  • 登录
找到的结果: {phrase} (显示: {results_count} 共: {results_count_total})
显示: {results_count} 共: {results_count_total}

加载更多搜索结果...

搜索范围
模糊匹配
搜索标题
搜索内容
发表 admin at 2025年2月28日
类别
  • 未分类
标签

如何在 Ubuntu 18.04 LTS 上设置私有 Docker 注册表

在此页

  1. 第 1 步 - 安装包依赖项
  2. 第 2 步 - 安装 Docker 和 Docker-compose
  3. 第 3 步 - 设置私有 Docker 注册表
  4. 第 4 步 - 测试
  5. 参考资料

Docker Registry 或 Registry 是一个开源且高度可扩展的服务器端应用程序,可用于存储和分发 Docker 镜像。它是 Docker Hub 背后的服务器端应用程序。在大多数用例中,如果您想在应用程序开发中实施 CI/CD 系统,Docker Registry 是一个很好的解决方案。 Private Docker Registry 通过将应用程序的所有自定义 Docker 映像集中在一个地方,为开发和生产周期提供更多性能。

在本教程中,我们将向您展示如何在 Ubuntu 18.04 服务器上安装和配置私有 Docker 注册表。我们将使用 Nginx 网络服务器并使用用户名和密码(基本身份验证)保护注册表。

先决条件

  • Ubuntu 18.04 服务器
  • 根权限

我们将要做什么?

  1. 安装依赖项
  2. 安装 Docker 和 Docker-compose
  3. 设置私有 Docker 注册表
  4. 测试

第 1 步 - 安装包依赖项

首先,我们要安装一些包依赖项来部署 Private Docker Registry。

使用以下命令安装包依赖项。

sudo apt install -y gnupg2 pass apache2-utils httpie

gnupg2 和 pass 包将用于将密码身份验证存储到 docker 注册表。 apache2-utils 将用于生成基本身份验证,httpie 将用于测试。

第 2 步 - 安装 Docker 和 Docker-compose

现在我们要从官方 Ubuntu 存储库安装 docker 和 docker-compose。

通过运行以下命令安装 Docker 和 Docker-compose。

sudo apt install -y docker.io docker-compose -y

安装完成后,启动docker服务并将其添加到开机时间。

sudo systemctl start docker
sudo systemctl enable docker

Docker 已启动并运行,Docker-compose 已安装。使用下面的命令检查。

docker version
docker-compose version

您将看到系统上安装的 Docker 和 Docker-compose 版本。

第 3 步 - 设置私有 Docker 注册表

在这一步中,我们将通过创建一些目录环境来配置 Docker Registry 环境,并创建一些配置,包括 docker-compose.yml、nginx 虚拟主机和其他配置等。

- 创建项目目录

为名为 registry 的项目创建一个新目录,并在其中创建 nginx 和 auth 目录。

mkdir -p registry/{nginx,auth}

之后,转到目录注册表并在 nginx 中再次创建新目录。

cd registry/
mkdir -p nginx/{conf.d/,ssl}

结果,项目目录如下图所示。

tree

- 创建 Docker-compose 脚本

现在我们要创建一个新的 docker-compose.yml 脚本来部署 Docker Registry。

进入registry目录,新建配置文件docker-compose.yml。

cd registry/
vim docker-compose.yml

首先,定义您要使用的组合版本和服务。

version: '3'
services:

之后,添加名为 registry 的第一个服务。 Docker Registry 服务将使用由 docker team registry:2 提供的 docker 镜像。它将挂载 docker 卷 registrydata 和名为 auth 的本地目录,其中包含基本身份验证文件 registry.passwd。最后,它将在名为 mynet 的自定义 docker 镜像上运行,并在容器和主机上公开端口 5000。

#Registry
  registry:
    image: registry:2
    restart: always
    ports:
    - "5000:5000"
    environment:
      REGISTRY_AUTH: htpasswd
      REGISTRY_AUTH_HTPASSWD_REALM: Registry-Realm
      REGISTRY_AUTH_HTPASSWD_PATH: /auth/registry.passwd
      REGISTRY_STORAGE_FILESYSTEM_ROOTDIRECTORY: /data
    volumes:
      - registrydata:/data
      - ./auth:/auth
    networks:
      - mynet

接下来,nginx 服务的配置将运行 HTTP 和 HTTPS 端口并挂载本地目录 conf.d 用于虚拟主机配置,以及用于 ssl 证书的 ssl。

#Nginx Service
  nginx:
    image: nginx:alpine
    container_name: nginx
    restart: unless-stopped
    tty: true
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - ./nginx/conf.d/:/etc/nginx/conf.d/
      - ./nginx/ssl/:/etc/nginx/ssl/
    networks:
      - mynet

最后,使用网桥驱动程序定义自定义网络 mynet,使用本地驱动程序定义注册表数据。

#Docker Networks
networks:
  mynet:
    driver: bridge
#Volumes
volumes:
  registrydata:
    driver: local

保存并关闭配置。

下面是完整的配置:

version: '3'
services:

#Registry
  registry:
    image: registry:2
    restart: always
    ports:
    - "5000:5000"
    environment:
      REGISTRY_AUTH: htpasswd
      REGISTRY_AUTH_HTPASSWD_REALM: Registry-Realm
      REGISTRY_AUTH_HTPASSWD_PATH: /auth/registry.passwd
      REGISTRY_STORAGE_FILESYSTEM_ROOTDIRECTORY: /data
    volumes:
      - registrydata:/data
      - ./auth:/auth
    networks:
      - mynet

#Nginx Service
  nginx:
    image: nginx:alpine
    container_name: nginx
    restart: unless-stopped
    tty: true
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - ./nginx/conf.d/:/etc/nginx/conf.d/
      - ./nginx/ssl/:/etc/nginx/ssl/
    networks:
      - mynet

#Docker Networks
networks:
  mynet:
    driver: bridge
#Volumes
volumes:
  registrydata:
    driver: local

- 配置 Nginx 虚拟主机

创建 docker-compose 脚本后,我们将为 nginx 服务创建虚拟主机和附加配置。

转到 nginx/conf.d/ 目录并创建一个名为 registry.conf 的新虚拟主机文件。

cd nginx/conf.d/
vim registry.conf

粘贴以下配置。

upstream docker-registry {
    server registry:5000;
}

server {
    listen 80;
    server_name registry.hakase-labs.io;
    return 301 https://registry.hakase-labs.io$request_uri;
}

server {
    listen 443 ssl http2;
    server_name registry.hakase-labs.io;

    ssl_certificate /etc/nginx/ssl/fullchain.pem;
    ssl_certificate_key /etc/nginx/ssl/privkey.pem;

    # Log files for Debug
    error_log  /var/log/nginx/error.log;
    access_log /var/log/nginx/access.log;

    location / {
        # Do not allow connections from docker 1.5 and earlier
        # docker pre-1.6.0 did not properly set the user agent on ping, catch "Go *" user agents
        if ($http_user_agent ~ "^(docker\/1\.(3|4|5(?!\.[0-9]-dev))|Go ).*$" )  {
            return 404;
        }

        proxy_pass                          http://docker-registry;
        proxy_set_header  Host              $http_host;
        proxy_set_header  X-Real-IP         $remote_addr;
        proxy_set_header  X-Forwarded-For   $proxy_add_x_forwarded_for;
        proxy_set_header  X-Forwarded-Proto $scheme;
        proxy_read_timeout                  900;
    }

}

保存并关闭。

接下来,创建一个额外的配置来增加 nginx 上的 max_body_size。这将允许您上传最大大小为 2GB 的 docker 图像。

vim additional.conf

下面粘贴配置。

client_max_body_size 2G;

保存并关闭。

- 配置 SSL 证书和基本身份验证

将您域的 SSL 证书文件复制到 ssl 目录。

cp /path/to/ssl/fullchain.pem ssl/
cp /path/to/ssl/privkey.pem ssl/

现在转到 auth 目录并生成新的密码文件 registry.passwd。

cd auth/

为用户 hakase 生成新密码。

htpasswd -Bc registry.passwd hakase
TYPE THE STRONG PASSWORD

至此部署Private Docker Registry的环境搭建完成。

下面是我们环境文件和目录的截图。

tree

- 运行 Docker 注册表

使用下面的 docker-compose 命令运行 Docker Registry。

docker-compose up -d

你会得到如下结果。

之后,确保注册表和 nginx 服务已启动并正在运行。使用以下命令检查。

docker-compose ps
netstat -plntu

并且您将看到注册表服务在端口 5000 上运行,nginx 服务将公开 HTTP 和 HTTPS 端口,如下所示。

第 4 步 - 测试

在我们测试我们的私有 Docker 注册表之前,我们需要将 Root CA 证书添加到 docker 本身和系统中。

如果您使用 pem 文件证书,请使用 OpenSSL 命令将其导出到 .crt 文件。

openssl x509 -in rootCA.pem -inform PEM -out rootCA.crt

现在为 docker 证书创建一个新目录并将根 CA 证书复制到其中。

mkdir -p /etc/docker/certs.d/registry.hakase-labs.io/
cp rootCA.crt /etc/docker/certs.d/registry.hakase-labs.io/

然后创建一个新目录 /usr/share/ca-certificate/extra 并将 Root CA 证书复制到其中。

mkdir -p /usr/share/ca-certificates/extra/
cp rootCA.crt /usr/share/ca-certificates/extra/

之后,重新配置 ca-certificate 包并重启 Docker 服务。

dpkg-reconfigure ca-certificates
systemctl restart docker

- 下载 Docker 镜像

使用以下命令下载新的 Docker 映像。

docker pull ubuntu:16.04

完成后,使用以下命令标记私有注册表的映像。

docker image tag ubuntu:16.04 registry.hakase-labs.io/ubuntu16

再次检查系统上的 Docker 镜像列表,您将获得如下新镜像。

docker images

- 将图像推送到私有本地注册表

使用以下命令登录到私有 Docker 注册表。

docker login https://registry.hakase-labs.io/v2/

根据 registry.htpasswd 文件键入用户名和密码。

现在检查注册表中可用的 docker 镜像。

http -a hakase https://registry.hakase-labs.io/v2/_catalog

并且 Registry 上没有 docker 镜像。

现在将我们的自定义镜像推送到 Private Docker Registry。

docker push registry.hakase-labs.io/ubuntu16

再次检查并确保您在私有存储库中获得了 ubuntu16 docker 镜像。

http -a hakase https://registry.hakase-labs.io/v2/_catalog

最后,使用 Nginx 和基本身份验证的私有 Docker 注册表的安装和配置已成功完成。

参考

  • https://linux教程/tutorial/how-to-create-docker-images-with-dockerfile/

©2015-2025 艾丽卡 support@alaica.com