在Fedora 30/29/28上安装和使用Docker Registry

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

本教程将讨论如何在Fedora 30/29/28上安装和配置Docker注册表。 Docker注册表是一个存储和内容交付系统,其中包含命名的Docker镜像,这些镜像具有不同的标记版本。

使用Docker的用户通过使用docker push和docker pull命令与注册表进行交互。存储公共镜像的最常见方法是使用Docker集线器。在本教程中,我们将设置一个本地Docker注册表,该注册表只能在的本地网络/受限访问范围内访问。

安装Docker

使用下面的教程在Fedora上安装Docker。

如何在Fedora上安装Docker

不要忘记将用户帐户添加到在安装过程中创建的Docker组中。

sudo usermod -aG docker $(whoami)
newgrp docker

安装Docker注册表软件包(docker-distribution)

docker-distribution软件包在Fedora仓库中可用。分发是用于打包,运送,存储和交付内容的Docker工具集。

sudo dnf install docker-distribution

在Fedora上配置Docker注册表

Docker注册表配置文件位于/etc/docker-distribution/registry/config.yml中,其格式为YAML。

如果我们需要进行任何修改,请在此处进行。示例配置文件如下所示:

$cat  /etc/docker-distribution/registry/config.yml
version: 0.1
log:
  fields:
    service: registry
storage:
    cache:
        layerinfo: inmemory
    filesystem:
        rootdirectory: /var/lib/registry
http:
    addr: :5000

在默认配置文件中:/var/lib/registry是将存储docker镜像的目录服务将绑定到所有网络接口上的port5000

如果firewalld已启用并正在运行,请允许防火墙上的端口。

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

启动Docker注册表服务

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

sudo systemctl start docker-distribution
sudo systemctl enable docker-distribution

确认服务状态应表明正在运行。

$sudo 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 2019-05-04 02:11:27 EAT; 22s ago
 Main PID: 9310 (registry)
    Tasks: 6 (limit: 2323)
   Memory: 9.8M
   CGroup: /system.slice/docker-distribution.service
           └─9310 /usr/bin/registry serve /etc/docker-distribution/registry/config.yml

Jan 04 02:11:27 localhost.localdomain systemd[1]: Started v2 Registry server for Docker.
Jan 04 02:11:27 localhost.localdomain registry[9310]: time="2019-05-04T02:11:27+03:00" level=warning msg="No HTTP secret provided - generated random secret. This Jan cause problems with uploads if multiple reg>
Jan 04 02:11:27 localhost.localdomain registry[9310]: time="2019-05-04T02:11:27+03:00" level=info msg="redis not configured" go.version=go1.12beta2 instance.id=eb5f7905-8ab3-4b70-9ee2-3bed7a8cc5f2 version="v2.>
Jan 04 02:11:27 localhost.localdomain registry[9310]: time="2019-05-04T02:11:27+03:00" level=info msg="Starting upload purge in 48m0s" go.version=go1.12beta2 instance.id=eb5f7905-8ab3-4b70-9ee2-3bed7a8cc5f2 ve>
Jan 04 02:11:27 localhost.localdomain registry[9310]: time="2019-05-04T02:11:27+03:00" level=info msg="using inmemory blob descriptor cache" go.version=go1.12beta2 instance.id=eb5f7905-8ab3-4b70-9ee2-3bed7a8cc>
Jan 04 02:11:27 localhost.localdomain registry[9310]: time="2019-05-04T02:11:27+03:00" level=info msg="listening on [::]:5000" go.version=go1.12beta2 instance.id=eb5f7905-8ab3-4b70-9ee2-3bed7a8cc5f2 version="v>

还要检查端口5000的响应能力。

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

第5步:将不安全的注册表添加到Docker Engine

默认情况下,docker使用https连接到docker注册表。但是,在某些情况下,可能会使用不安全的注册表,尤其是当我们在受信任的网络上时。这消除了在内部使用CA签名证书或者在所有Docker节点中信任自签名证书的需求。以下是将不安全注册表添加到Docker Engine的步骤。

对于CentOS/Fedora/Ubuntu

编辑文件/etc/docker/daemon.json,例如

cat << EOF | sudo tee /etc/docker/daemon.json 
 {
     "insecure-registries" : [ "myregistry.local:5000" ]
 }
EOF

对于Arch Linux用户,请检查使用不安全的注册表。

然后重启Docker引擎。

sudo systemctl restart docker

第6步:将Docker镜像推送到本地注册表

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

$cat /etc/hosts
192.168.10.20 myregistry.local

从Docker中心下载恶意Linux docker镜像并将其推送到我的本地Docker注册表中。

$docker pull alpine:latest
latest: Pulling from library/alpine
bdf0201b3a05: Pull complete 
Digest: sha256:28ef97b8686a0b5399129e9b763d5b7e5ff03576aa5580d6f4182a49c5fe1913
Status: Downloaded newer image for alpine:latest

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

$docker tag alpine:latest myregistry.local:5000/alpine:latest

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

$docker push myregistry.local:5000/alpine:latest
The push refers to repository [myregistry.local:5000/alpine]
a464c54f93a9: Pushed 
latest: digest: sha256:5c40b3c27b9f13c873fefb2139765c56ce97fd50230f1f2d5c91e55dec171907 size: 528

如果图像上传成功,则应在结束时获得sha256 hashat。推送的图像存储在/var/lib/registry/docker/registry/v2/repository目录下。

$ls /var/lib/registry/docker/registry/v2/repositories
alpine

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

$docker pull myregistry.local:5000/alpine:latest
latest: Pulling from alpine
Digest: sha256:5c40b3c27b9f13c873fefb2139765c56ce97fd50230f1f2d5c91e55dec171907
Status: Downloaded newer image for myregistry.local:5000/alpine:latest