在 CentOS 7 上安装 Docker-Distribution

登录到docker-distribution-01.onitroad.com。

Docker-Distribution 包在 extras yum 存储库中可用。

检查 Docker-Distribution 包的可用版本。

[root@docker-distribution-01 ~]# yum info docker-distribution

安装 Docker-Distribution 包如下。

[root@docker-distribution-01 ~]# yum install -y docker-distribution

在 Docker 主机上使用 Secured Docker Registry:

登录到 Docker 主机 docker-manager-01.onitroad.com。

在本地 DNS 解析器中添加一个条目以设置我们的安全注册服务器的名称解析。

[root@docker-manager-01 ~]# cat >> /etc/hosts << EOF
> 192.168.1.153 docker-distribution-01.onitroad.com docker-distribution-01
> EOF

在 Docker 主机上安装 Docker Registry Service TLS/SSL 证书。

[root@docker-manager-01 ~]# mkdir -p /etc/docker/certs.d/docker-distribution-01.onitroad.com:5000
[root@docker-manager-01 ~]# scp root@docker-distribution-01:/etc/pki/tls/registry.crt /etc/docker/certs.d/docker-distribution-01.onitroad.com\:5000/
root@docker-distribution-01's password:
registry.crt

从 Docker Hub 拉取镜像。
我们稍后会将此镜像推送到我们的 Secured Docker Registry。

[root@docker-manager-01 ~]# docker pull alpine
Using default tag: latest
latest: Pulling from library/alpine
8e402f1a9c57: Pull complete
Digest: sha256:644fcb1a676b5165371437feaa922943aaf7afcfa8bfee4472f6860aad1ef2a0
Status: Downloaded newer image for alpine:latest

在将 alpine 镜像推送到 Secure Docker Registry 之前标记它。

[root@docker-manager-01 ~]# docker tag alpine docker-distribution-01.onitroad.com:5000/alpine

登录到 Secured Docker Registry。

[root@docker-manager-01 ~]# docker login docker-distribution-01.onitroad.com:5000
Username: jackli
Password:
WARNING! Your password will be stored unencrypted in /root/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store
Login Succeeded

将 alpine 镜像推送到我们的 Secured Docker Registry。

[root@docker-manager-01 ~]# docker push docker-distribution-01.onitroad.com:5000/alpine
The push refers to repository [docker-distribution-01.onitroad.com:5000/alpine]
bcf2f368fe23: Pushed
latest: digest: sha256:d05ecd4520cab5d9e5d877595fb0532aadcd6c90f4bbc837bc11679f704c4c82 size: 528

我们已经在 CentOS 7 上使用 Docker-Distribution 成功配置了一个安全的Registry。

在 CentOS 7 上使用 Docker-Distribution 配置安全注册中心(Registry)

Docker Registry 是一个内容存储和交付系统,用于存储 Docker 镜像的不同标记版本。
用户通过 Push 或者 Pull 方法与 Docker Registry 交互。
Docker Hub 是一个公共 Docker 注册表,可为数万亿用户提供数百万个图像。

但在某些情况下,我们需要设置一个私有且安全的内部 Docker Registry。

我们将在不使用容器技术的情况下创建安全的 Docker Registry。
在本文中,我们将在 CentOS 7 上使用 Docker-Distribution 配置一个安全注册中心(Registry),然后通过 Docker 主机使用它进行测试。

配置环境

私有安全的Docker Registry服务器:

  • 主机名 - docker-distribution-01.onitroad.com
  • IP 地址 - 192.168.1.153/24
  • 操作系统 - CentOS 7.6

我们还使用 下面的 Docker 主机来测试我们的安全 Docker 注册表。

  • 主机名 - docker-manager-01.onitroad.com
  • IP 地址 - 192.168.1.100/24
  • 操作系统 - CentOS 7.6
  • Docker 版本 - Docker CE 18.09
欢迎 on it road

使用 Docker-Distribution 配置安全注册中心:

我们正在配置一个安全的 Docker Registry,因此,我们必须为我们的 Docker Registry Service 创建一个 SSL/TLS 证书。

[root@docker-distribution-01 ~]# openssl req \
> -newkey rsa:2048 \
> -nodes -sha256 \
> -x509 -days 365 \
> -keyout /etc/pki/tls/private/registry.key \
> -out /etc/pki/tls/registry.crt
Generating a 2048 bit RSA private key
..............+++
.............................................................+++
writing new private key to '/etc/pki/tls/private/registry.key'
----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
----
Country Name (2 letter code) [XX]:PK
State or Province Name (full name) []:Sindh
Locality Name (eg, city) [Default City]:Karachi
Organization Name (eg, company) [Default Company Ltd]:JackLi's SysAdmin Recipes
Organizational Unit Name (eg, section) []:ITLAB
Common Name (eg, your name or your server's hostname) []:docker-distribution-01.onitroad.com
Email Address []:root@docker-distribution-01.onitroad.com

为了限制匿名访问,我们将为 Docker Registry Service 设置基本的 HTTP 身份验证。
为此,我们需要安装 htpasswd 实用程序来创建 HTTP 密码文件。

[root@docker-distribution-01 ~]# yum install -y httpd-tools

现在,创建一个 HTTP 密码文件,如下所示:

[root@docker-distribution-01 ~]# htpasswd -c -B /etc/docker-distribution/dockerpasswd jackli
New password:
Re-type new password:
Adding password for user jackli

我们使用了上面的 -B 开关来创建一个带有 bcrypt 加密的条目,因为它是目前唯一支持的格式,其他散列类型的条目将被忽略。

编辑 Docker Registry 配置文件。

[root@docker-distribution-01 ~]# vi /etc/docker-distribution/registry/config.yml

并更新如下:

version: 0.1
log:
  fields:
    service: registry
storage:
    cache:
        layerinfo: inmemory
    filesystem:
        rootdirectory: /var/lib/registry
http:
    addr: 192.168.1.153:5000
    tls:
        certificate: /etc/pki/tls/registry.crt
        key: /etc/pki/tls/private/registry.key
auth:
    htpasswd:
        realm: onitroad.com
        path: /etc/docker-distribution/dockerpasswd

警告:不要使用 TAB 键来缩进行。
否则,docker-distribution 服务会在启动过程中出现以下错误。

configuration error: error parsing /etc/docker-distribution/registry/config.yml: yaml: line 12: found character that cannot start any token

Please refer to Docker Documentation for more configuration options in config.yml.

配置错误:错误解析 /etc/docker-distribution/registry/config.yml: yaml: line 12: found character that cannot start any token

有关 config.yml 中的更多配置选项,请参阅 Docker 文档。

启动并启用 docker-distribution 服务。

[root@docker-distribution-01 ~]# systemctl start docker-distribution
[root@docker-distribution-01 ~]# systemctl enable docker-distribution
Created symlink from /etc/systemd/system/multi-user.target.wants/docker-distribution.service to /usr/lib/systemd/system/docker-distribution.service.

在 Linux 防火墙中允许 Docker Registry 服务端口 5000/tcp。

[root@docker-distribution-01 ~]# firewall-cmd --permanent --add-port=5000/tcp
success
[root@docker-distribution-01 ~]# firewall-cmd --reload
success

我们的安全 Docker 注册中心已配置完毕。

日期:2020-09-17 00:16:24 来源:oir作者:oir