1,环境准备
首先确保系统已经安装了Docker
2,安装Docker Registry
sudo docker pull registry:2
3,启用TLS加密
为了安全地传输数据,需要为Docker Registry启用TLS加密。这需要创建一个自签名证书或使用由受信任的CA颁发的证书。
创建自签名证书(仅用于测试环境):
配置openssl.cnf,运行以下命令创建openssl.cnf,并将本机IP增加到证书中, 172.19.41.35修改为本机IP
#配置openssl.cnf
cat <<EOF > openssl.cnf
[req]
distinguished_name = req_distinguished_name
req_extensions = v3_req
prompt = no
[req_distinguished_name]
C = CN
ST = Beijing
L = Beijing
O = MyCompany
OU = MyDivision
CN = 172.19.41.35
[v3_req]
keyUsage = keyEncipherment, dataEncipherment
extendedKeyUsage = serverAuth
subjectAltName = @alt_names
[alt_names]
IP.1 = 172.19.41.35
DNS.1 = localhost
EOF
#生成一个私钥文件
openssl genrsa -out docker-registry.key 4096
#生成证书请求(CSR)
openssl req -new -key docker-registry.key -out docker-registry.csr -subj "/C=CN/ST=Beijing/L=Beijing/O=MyCompany/OU=MyDivision/CN=localhost" -reqexts SAN -config <(cat openssl.cnf <(printf "[SAN]\nsubjectAltName=IP:172.19.41.35,DNS:localhost"))
#生成自签名证书
openssl x509 -req -in docker-registry.csr -signkey docker-registry.key -out docker-registry.crt -days 365 -extensions SAN -extfile <(cat openssl.cnf <(printf "[SAN]\nsubjectAltName=IP:172.19.41.35,DNS:localhost"))
4,使用身份验证
Docker Registry支持多种身份验证方式,这里我们使用htpasswd进行基本的身份验证。
安装Apache工具以生成htpasswd文件:
sudo dnf install -y httpd-tools
5,创建用户和密码文件:
这将创建一个名为auth的文件,其中包含了加密后的用户名和密码对:docker:docker2024。
sudo htpasswd -Bbn docker docker2024 > auth
6,配置config.yml 文件,运行以下命令直接创建config.yml
cat <<EOF > config.yml
version: 0.1
log:
level: info
storage:
filesystem:
rootdirectory: /var/lib/registry
delete:
enabled: true
http:
addr: :5000
tls:
certificate: /etc/docker/registry/docker-registry.crt
key: /etc/docker/registry/docker-registry.key
auth:
htpasswd:
realm: "Registry Realm"
path: /etc/docker/registry/auth
EOF
7,确保文件权限正确
确保当前文件的权限设置正确,以便Docker Registry可以读取它:
并且将当前文件移动到/etc/docker/registry下
sudo chmod 600 *
sudo mkdir -p /etc/docker/registry
sudo mv * /etc/docker/registry
sudo ls -l /etc/docker/registry
8,Docker客户端使用本地私有仓库
为了让Docker客户端能够推送到或者拉取来自这个私有仓库的镜像,需要配置Docker守护进程信任这个仓库。这通常涉及到将仓库地址添加到Docker的配置文件中,使Docker允许连接非HTTPS的仓库。
把证书拷贝到/etc/docker/certs.d/{本机IP}:5000/下,然后重启docker
sudo mkdir -p /etc/docker/certs.d/172.19.41.35:5000
sudo cp /etc/docker/registry/docker-registry.crt /etc/docker/certs.d/172.19.41.35\:5000/ca.crt
sudo systemctl daemon-reload
sudo systemctl restart docker
9,运行Docker Registry
现在可以启动带有TLS和身份验证的Docker Registry容器了。
sudo docker run -d -p 5000:5000 --restart=always --name registry \
-v /etc/docker/registry:/etc/docker/registry \
-v /var/lib/registry:/var/lib/registry \
registry:2 /etc/docker/registry/config.yml
11,测试私有仓库
172.19.41.35修改为本机IP
# 输入之前设置的用户名和密码
sudo docker login 172.19.41.35:5000 -u docker -p docker2024
sudo docker pull redis:latest
sudo docker tag redis:latest 172.19.41.35:5000/redis:latest
sudo docker push 172.19.41.35:5000/redis:latest
如果一切正常,应该能够成功登录并推送镜像到私有仓库中。