在CentOS 7上安装和配置Docker注册表

时间:2020-02-23 14:31:39  来源:igfitidea点击:

Docker注册表是一个存储和内容交付系统,其中包含命名的Docker镜像,这些镜像具有不同的标记版本。
使用Docker的用户通过使用docker push和docker pull命令与注册表进行交互。

有时,将Docker镜像存储在本地注册表中而不是将其推送到Docker集线器是有意义的。

我们可以为大型团队节省大量带宽,并将不想公开的镜像保存在公共场所。
在CentOS 7上创建本地Docker注册表仅需遵循以下几个步骤。
有关在不同发行版上安装Docker的信息,请参阅如何在Ubuntu/Debian/Fedora/Arch/CentOS 7上安装Docker CE。

在CentOS 7上安装和配置Docker注册表

请按照以下步骤在CentOS 7服务器上安装并配置Docker注册表。

第1步:安装Docker注册表包(docker分发版)

CentOS 7.4上的docker-distribution软件包可在Extras存储库中找到。
如果在CentOS 7系统上将其禁用,则可能需要启用它。

$sudo yum -y update
$sudo yum -y install docker-distribution

步骤2:配置Docker注册表

Docker注册表配置文件位于/etc/docker-distribution/registry/config.yml中。
其格式为YAML。
如果需要进行任何修改,请在此处进行。
示例配置文件如下所示:

lang=”haml” manual=”version: 0.1
log:
  fields:
    service: registry
storage:
    cache:
        layerinfo: inmemory
    filesystem:
        rootdirectory: /var/lib/registry
http:
    addr: :5000″ message=”” highlight=”” provider=”manual”

在默认配置文件中:/var/lib/registry是将存储docker镜像的目录服务将绑定到所有网络接口上的端口5000如果启用了SELinux,则使用端口5000可能会遇到问题,请考虑禁用SELinux或者放置如果遇到问题,请在许可模式下将其启用。
如果firewalld已启用并正在运行,请在防火墙上允许该端口。

# firewall-cmd --add-port=5000/tcp --permanent
# firewall-cmd --reload

步骤3:启动Docker注册表服务

现在,我们可以启动服务并将其设置为在启动时启动。

# systemctl start docker-distribution
# systemctl enable docker-distribution

确认docker-distribution服务正在运行:

# systemctl status docker-distribution
● docker-distribution.service - v2 Registry server for Docker
   Loaded: loaded (/usr/lib/systemd/system/docker-distribution.service; disabled; vendor preset: disabled)
   Active: active (running) since Sat 2016-03-31 14:31:16 EDT; 2min 20s ago
 Main PID: 16262 (registry)
   CGroup: /system.slice/docker-distribution.service
           └─16262 /usr/bin/registry serve /etc/docker-distribution/registry/…

确认我们可以访问端口5000

# telnet 127.0.0.1 5000
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.

步骤4:将不安全的注册表添加到Docker Engine

默认情况下,Docker使用https连接到Docker注册表。
但是可能会有使用不安全注册表的用例,尤其是当我们处于受信任的网络中时。
这消除了在内部使用CA签名证书或者在所有Docker节点中信任自签名证书的需求。
以下是将不安全注册表添加到Docker引擎的步骤。
对于Ubuntu Xenial,编辑/etc/docker/daemon.json并更新密钥"不安全注册表"。
例如

{
 "insecure-registries" : ["myregistry.local:5000"]
 }

对于CentOS 7,编辑文件/etc/docker/daemon.json,例如

{
 "insecure-registries" : ["myregistry.local:5000"]
 }

对于可信任的Ubuntu,请编辑文件/etc/default/docker并更新DOCKER_OPTS,例如

DOCKER_OPTS='--insecure-registry myregistry.local:5000'

然后重启Docker引擎

# systemctl restart docker

步骤5:将Docker镜像推送到本地注册表

现在注册表已准备就绪,我们可以开始将Docker镜像推送到它了。
如果我们没有活动的DNS服务器,请使用/etc/hosts文件将主机名映射到IP地址。

# cat /etc/hosts
192.168.1.23 myregistry.local

我将从Docker中心下载ubuntu:16.04 Docker镜像,并将其推送到我的本地Docker注册表中。

# docker pull ubuntu:16.04

将图像标记为myregistry.local:5000/ubuntu:16.04.
这将为现有图像创建一个添加标签。
当标签的第一部分是主机名和端口时,Docker在推送时会将其解释为注册表的位置。

# docker tag ubuntu:16.04 myregistry.local:5000/ubuntu:16.04

将镜像推送到运行在myregistry.local:5000/ubuntu:16的本地注册表中

# docker push myregistry.local:5000/ubuntu:16.04
The push refers to repository [myregistry.local:5000/ubuntu]
db584c622b50: Pushed 
52a7ea2bb533: Pushed 
52f389ea437e: Pushed 
88888b9b1b5b: Pushed 
a94e0d5a7c40: Pushed 
16.04: digest: sha256:52286464db54577a128fa1b1aa3c115bd86721b490ff4cbd0cd14d190b66c570 size: 1357

如果图像上传成功,则最后应获得sha256哈希。
推送的图像存储在/var/lib/registry/docker/registry/v2/repository目录下。

# ls /var/lib/registry/docker/registry/v2/repositories
ubuntu

这与推送自定义docker镜像的方法相同。
要在本地注册表上下载Docker镜像,请使用以下命令:

# docker pull registry-hostname:500/image:tag
E.g
# docker pull myregistry.local:5000/ubuntu:16.04