跳到主要内容
版本:v2.0.8

Docker

使用 dfget daemon 作为 docker daemon 的 http 代理

目前 docker 不支持带有 registry-mirrors 的私有仓库,为此,我们需要为 docker daemon 使用 HTTP 代理。

快速开始

第一步:为 http 代理生成 CA 证书

生成一个 CA 证书私钥。

openssl genrsa -out ca.key 2048

打开 openssl 配置文件 openssl.conf。设置 basicConstraints 为 true,然后您就能修改这些值。

[ req ]
#default_bits = 2048
#default_md = sha256
#default_keyfile = privkey.pem
distinguished_name = req_distinguished_name
attributes = req_attributes
extensions = v3_ca
req_extensions = v3_ca
[ req_distinguished_name ]
countryName = Country Name (2 letter code)
countryName_min = 2
countryName_max = 2
stateOrProvinceName = State or Province Name (full name)
localityName = Locality Name (eg, city)
0.organizationName = Organization Name (eg, company)
organizationalUnitName = Organizational Unit Name (eg, section)
commonName = Common Name (eg, fully qualified host name)
commonName_max = 64
emailAddress = Email Address
emailAddress_max = 64
[ req_attributes ]
challengePassword = A challenge password
challengePassword_min = 4
challengePassword_max = 20
[ v3_ca ]
basicConstraints = CA:TRUE

生成 CA 证书。

openssl req -new -key ca.key -nodes -out ca.csr -config openssl.conf
openssl x509 -req -days 36500 -extfile openssl.conf \
-extensions v3_ca -in ca.csr -signkey ca.key -out ca.crt

第二步:配置 dfget daemon

为了将 dfget daemon 作为 http 代理使用,首先你需要在 /var/log/dragonfly/dfget.yaml 中增加一条代理规则, 它将会代理 your.private.registry 对镜像层的请求:

proxy:
security:
insecure: true
tcpListen:
listen: 0.0.0.0
port: 65001
proxies:
- regx: blobs/sha256.*
hijackHTTPS:
# CA certificate's path used to hijack https requests
cert: ca.crt
key: ca.key
hosts:
- regx: your.private.registry

第三步:配置 Docker daemon

为了忽略您的证书错误,您需要在 /etc/docker/daemon.json 中把 insecure-registries 设置为您的私有代理:

{
"insecure-registries": ["your.private.registry"]
}

第四步:继续配置 Docker daemon

/etc/systemd/system/docker.service.d/http-proxy.conf 设置 dfdaemon 为 docker daemon 的 HTTP_PROXYHTTPS_PROXY 代理:

[Service]
Environment="HTTP_PROXY=http://127.0.0.1:65001"
Environment="HTTPS_PROXY=http://127.0.0.1:65001"

第五步:使用代理拉取镜像

完成以上的步骤后,我们可以尝试验证 Dragonfly 是否像我们预期的一样正常工作。

您可以像往常一样拉取镜像,比如:

docker pull your.private.registry/namespace/image:latest

自定义配置项

使用自签名证书注册

如果您使用一个自签名证书进行注册,你可以用以下配置来忽略证书错误:

proxy:
security:
insecure: true
tcpListen:
listen: 0.0.0.0
port: 65001
proxies:
- regx: blobs/sha256.*
hijackHTTPS:
# CA certificate's path used to hijack https requests
cert: ca.crt
key: ca.key
hosts:
- regx: your.private.registry
insecure: true

也可以使用以下配置提供一个证书:

proxy:
security:
insecure: true
tcpListen:
listen: 0.0.0.0
port: 65001
proxies:
- regx: blobs/sha256.*
hijackHTTPS:
# CA certificate's path used to hijack https requests
cert: ca.crt
key: ca.key
hosts:
- regx: your.private.registry
certs: ['server.crt']

您能使用以下命令获取您服务器的证书:

openssl x509 -in <(openssl s_client -showcerts \
-servername your.domain.com -connect your.domain.com:443 -prexit 2>/dev/null)