Docker本地私有镜像仓库registry创建,并使用启用TLS加密身份验证机制

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

如果一切正常,应该能够成功登录并推送镜像到私有仓库中。

### 如何搭建配置Docker本地私有Registry镜像仓库 #### 下载运行官方Registry镜像 为了建立一个基本的私有Docker Registry,可以从Docker Hub获取官方提供的`registry`镜像。这一步骤通过命令行完成: ```bash docker pull registry:latest ``` 此操作会下载最新版本的`registry`镜像至本地环境[^3]。 #### 启动Registry服务实例 接着,利用之前拉取下来的镜像来启动一个新的容器作为私有Registry服务器,指定必要的参数以确保其能够长期稳定运行以及支持删除功能: ```bash docker run -d \ -p 5000:5000 \ --restart always \ --name registry \ -v /opt/registry:/var/lib/registry \ -e REGISTRY_STORAGE_DELETE_ENABLED="true" \ registry:latest ``` 上述指令设置了端口映射(`-p`)使得外部网络可以访问该服务;启用了自动重启策略(`--restart`)保障稳定性;挂载了一个卷用于存储实际的数据文件(-v),且开启了允许删除的功能[-e](REGISTRY_STORAGE_DELETE_ENABLED)。 #### 测试与验证 一旦成功部署了私有Registry之后,就可以尝试推送一些自定义构建好的镜像上去做初步测试。在此之前可能还需要调整客户端机器上的Docker守护进程配置以便能顺利连接到新设立的服务地址。具体做法涉及编辑daemon.json文件加入insecure-registries字段指明非HTTPS协议下的目标主机名或IP加上对应的监听端口号组合而成的位置信息[^4]。 #### 增强安全性(可选) 考虑到安全因素,在生产环境中通常建议为私有Registry配备认证机制及SSL/TLS加密传输通道。对于前者来说,可以通过集成HTPasswd或其他形式的身份验证插件实现;而后者则需准备好数字证书材料后按照指引进行相应设置[^5]。 #### 图形化管理界面(推荐) 尽管原生的Docker Registry不自带GUI组件,不过借助于Portainer、Harbor这类第三方解决方案同样可以获得直观易用的操作面板来进行日常维护工作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值