在 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。
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
使用 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 注册中心已配置完毕。
