Docker Registry自签证书教程

概述

在使用Docker Registry时,我们通常需要为其配置HTTPS连接。在开发环境或私有网络中,我们可以使用自签证书来实现HTTPS连接,这样可以保证通信的安全性。本文将教会你如何使用自签证书配置Docker Registry。

整体流程

下面是整个过程的流程图:

journey
    title Docker Registry自签证书配置流程
    section 生成证书
    Generate Key Pair -> Generate Certificate Signing Request -> Generate Self-signed Certificate
    section 配置Registry
    Copy Certificate -> Configure Docker Registry
    section 配置Docker客户端
    Copy Certificate -> Configure Docker Client

详细步骤

1. 生成密钥对

首先,我们需要生成密钥对,用于对证书进行签名。我们可以使用OpenSSL工具来生成密钥对。

打开终端并运行以下命令:

openssl genrsa -out registry.key 2048

该命令将生成一个2048位的RSA密钥,保存在名为registry.key的文件中。

2. 生成证书签名请求

接下来,我们需要生成证书签名请求(Certificate Signing Request, CSR)。CSR是用来向证书颁发机构(Certificate Authority, CA)申请证书的文件。

继续在终端中运行以下命令:

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

该命令将使用之前生成的密钥对来生成一个CSR文件,保存在名为registry.csr的文件中。在生成CSR时,需要填写一些相关信息,如国家、组织、Common Name等。请根据你的实际情况填写相关信息。

3. 生成自签证书

现在,我们可以使用之前生成的CSR文件来生成自签证书。

继续在终端中运行以下命令:

openssl x509 -req -days 365 -in registry.csr -signkey registry.key -out registry.crt

该命令将使用CSR文件和之前生成的密钥对来生成一个自签证书,保存在名为registry.crt的文件中。此处的-days参数指定了证书的有效期,此处设置为365天,你可以根据需要进行调整。

至此,我们已经生成了自签证书。

4. 配置Docker Registry

现在,我们将自签证书配置到Docker Registry中。

首先,将生成的证书文件(registry.crt)复制到Registry服务器上的某个目录,例如/etc/docker/certs.d/registry.example.com/。注意,registry.example.com应替换为你的Registry的域名或IP地址。

接下来,我们需要配置Registry服务器以使用自签证书。

打开Registry服务器上的/etc/docker/daemon.json文件,并添加以下内容:

{
  "insecure-registries": [],
  "registry-mirrors": [],
  "debug": true,
  "experimental": true,
  "tls": true,
  "tlscert": "/etc/docker/certs.d/registry.example.com/registry.crt",
  "tlskey": "/etc/docker/certs.d/registry.example.com/registry.key"
}

在以上配置中,tls设置为true以启用TLS连接,tlscerttlskey分别指定了证书和密钥的路径。

保存并关闭文件,然后重启Docker服务以使配置生效:

sudo systemctl restart docker

至此,我们已经成功配置了Docker Registry以使用自签证书。

5. 配置Docker客户端

最后,我们需要将自签证书配置到Docker客户端,以确保与Registry的安全连接。

将生成的证书文件(registry.crt)复制到Docker客户端上的相应目录,例如~/.docker/certs.d/registry.example.com/

确保在Docker客户端的/etc/docker/daemon.json文件中有以下配置:

{
  "insecure-registries": [],
  "registry-mirrors": [],
  "debug": true,
  "experimental": true,
  "tls": true,
  "tlscert": "~/.docker/certs.d/registry.example.com/registry.crt",
  "tlskey": "~/.docker/certs.d/