Docker Compose 私有仓库搭建 支持 HTTPS

Docker 是一个非常流行的容器化平台,允许用户将应用程序和其依赖项打包为一个独立的轻量级容器,并且可以在任何地方运行。Docker Compose 是 Docker 官方提供的一个工具,用于定义和运行多个容器的应用程序。

在某些情况下,我们可能需要在本地搭建一个私有的 Docker 仓库,并且希望能够通过 HTTPS 的方式进行安全访问。本文将介绍如何使用 Docker Compose 搭建一个私有仓库,并支持 HTTPS。

准备工作

在开始之前,我们需要确保系统已经安装了 Docker 和 Docker Compose 工具。这两个工具在官方网站上都有详细的安装指南。

创建 Docker Compose 文件

首先,我们需要创建一个 Docker Compose 文件来定义我们的私有仓库服务。在项目的根目录下创建一个名为 docker-compose.yml 的文件,并将以下内容添加到文件中:

version: '3'
services:
  registry:
    image: registry:2
    ports:
      - 5000:5000
    volumes:
      - ./data:/var/lib/registry
    environment:
      REGISTRY_HTTP_TLS_CERTIFICATE: /certs/domain.crt
      REGISTRY_HTTP_TLS_KEY: /certs/domain.key
    command: ["registry", "serve", "/etc/docker/registry/config.yml"]
    networks:
      - default

networks:
  default:
    external:
      name: my-network

上述配置文件中,我们创建了一个名为 registry 的服务,使用 Docker 官方提供的 registry:2 镜像。我们将容器的 5000 端口映射到主机的 5000 端口,并将数据卷挂载到本地的 data 目录。

此外,我们还指定了证书和密钥文件的位置,并将其作为环境变量传递给仓库服务。最后,我们使用了一个自定义的网络 my-network,你可以根据需要修改网络名称。

创建配置文件

在上述配置文件中,我们还指定了一个配置文件的路径 /etc/docker/registry/config.yml,接下来我们需要创建这个配置文件。

在项目的根目录下创建一个名为 config.yml 的文件,并将以下内容添加到文件中:

version: 0.1
log:
  level: info
  formatter: json
  fields:
    service: registry
    environment: development
storage:
  cache:
    layerinfo: inmemory
  filesystem:
    rootdirectory: /var/lib/registry
http:
  addr: :5000
  tls:
    certificate: /certs/domain.crt
    key: /certs/domain.key

上述配置文件中,我们指定了存储方式为 filesystem,并将根目录设置为 /var/lib/registry。我们还指定了仓库服务的监听地址和端口,并且使用了之前设置的证书和密钥文件。

生成证书和密钥文件

接下来,我们需要生成证书和密钥文件,用于支持 HTTPS。可以使用 OpenSSL 工具来生成这些文件。

首先,打开终端并执行以下命令来生成私钥文件:

openssl genrsa -out domain.key 2048

然后,执行以下命令来生成证书签名请求文件:

openssl req -new -key domain.key -out domain.csr

在生成过程中,你需要提供一些证书信息,如国家、组织、通用名称等等。可以根据自己的需求进行填写。

最后,执行以下命令来生成自签名证书文件:

openssl x509 -req -in domain.csr -signkey domain.key -out domain.crt

现在,你可以将生成的 domain.crtdomain.key 文件移动到项目的根目录,并将其作为配置文件中指定的路径。

启动私有仓库服务

现在,我们已经完成了所有的准备工作,可以启动私有仓库服务了。

在终端中,进入项目的根目录,并执行以下命令:

docker-compose up -d

此命令将