在CentOS 7上建立本地Docker Registry
首先
我发现DockerHub上有很多镜像可供选择,但是我想把自己创建的Docker镜像上传到自己的Registry,并随时下载并启动它。
可以准备一个Dockerfile并从DockerHub下载Docker镜像进行创建,但是它可能需要很长时间。所以我们可以准备一个已经准备好的镜像,并将其放置在某个Docker服务器上。
可以通过HTTPS进行证书注册通信,但内部使用只是为了提供一个方便快速使用的环境。
请在服务器和客户端上准备两个环境(例如虚拟机)。
步骤
请用中文概括以下步骤。
-
- docker のインストール
-
- docker の起動
-
- Docker Registry の用意
-
- サーバ側でイメージの用意(ダウンロードとRegistry)
-
- Docker Registry からイメージのダウンロード
サーバ側でダウンロード
クライアント側でダウンロード
安装Docker
需要在注册表服务器和客户端上进行安装。
要在rpm中安装docker,需要先进行下载源注册。
yum -y install yum-utils
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
yum install -y docker-ce
启动 Docker
在注册表服务器上,通过客户端启动 docker 服务,并在操作系统启动时自动启动。
systemctl start docker
systemctl enable docker
准备Docker Registry
在注册表服务器上下载注册表镜像
docker pull registry
以下是以 Docker 镜像添加的方式
docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
registry latest 2d4f4b5309b1 3 months ago 26.2MB
启动 Docker Registry
启动Docker Registry时,为了使Registry上的镜像持久化,需要将主机操作系统的目录挂载到容器中。
docker run -d -p 5000:5000 \
-v /var/opt:/var/lib/registry \
registry
确认容器已启动
docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
35b3882b8536 registry "/entrypoint.sh /etc…" About an hour ago Up About an hour 0.0.0.0:5000->5000/tcp dreamy_roentgen
在主机操作系统上,会创建以下类型的目录,并在其下挂载。
ls /var/opt/docker/registry/v2/
blobs repositories
如果注册图像,则以下是存储图像的目录 repositories 下的位置。
ls -l /var/opt/docker/registry/v2/repositories/aaa
合計 0
drwxr-xr-x 5 root root 55 9月 16 15:33 centos_local
在服务器端准备图像(下载和注册表)。
将原始镜像下载到本地仓库服务器上进行注册。
不拘一格,暫且下載 CentOS。
docker pull centos
Using default tag: latest
latest: Pulling from library/centos
3c72a8ed6814: Pull complete
Digest: sha256:76d24f3ba3317fa945743bb3746fbaf3a0b752f10b10376960de01da70685fbd
确认已经下载完成
docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
centos latest 0d120b6ccaa8 5 weeks ago 215MB
registry latest 2d4f4b5309b1 2 months ago 26.2MB
创建(带标签的)镜像以登记到 Docker Registry
通常情况下,我们会使用 Dockerfile 等来创建包含各种工具和配置的镜像,但这次我们只需直接使用下载的 CentOS 镜像。
docker tag centos localhost:5000/aaa/centos_local:1.0
进行标记后,可以得到如下图片。
docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
centos latest 0d120b6ccaa8 5 weeks ago 215MB
localhost:5000/aaa/centos_local 1.0 0d120b6ccaa8 5 weeks ago 215MB
registry latest 2d4f4b5309b1 2 months ago 26.2MB
将映像注册到 Docker 仓库
将已打标签的镜像注册到Docker Registry。
docker push localhost:5000/aaa/centos_local:1.0
The push refers to repository [localhost:5000/iseki/centos_local]
291f6e44771a: Pushed
1.0: digest: sha256:fc4a234b91cc4b542bac8a6ad23b2ddcee60ae68fc4dbd4a52efb5f1b0baad71 size: 529
注册后,图像不再需要,可以删除。
docker rmi localhost:5000/iseki/centos_local:1.0
Untagged: localhost:5000/iseki/centos_local:1.0
Untagged: localhost:5000/iseki/centos_local@sha256:fc4a234b91cc4b542bac8a6ad23b2ddcee60ae68fc4dbd4a52efb5f1b0baad71
确认删除后,确认列表中没有图像。
docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
centos latest 0d120b6ccaa8 5 weeks ago 215MB
registry latest 2d4f4b5309b1 2 months ago 26.2MB
从Docker Registry下载镜像。
在服务器端下载
你可以从服务器上执行以下命令来进行下载。
docker pull localhost:5000/aaa/centos_local:1.0
客户端下载
如果没有在客户端设置以下内容,连接无法进行。
如果没有在客户端进行以下配置,无法连接。
只有在客户端进行以下设定,才能连接上。
cat /etc/docker/daemon.json
{ "insecure-registries":["<Docker RegistoryのサーバーIP、またはホスト名>:5000"] }
进行上述设置后,重新启动 Docker 服务。
systemctl restart docker
在这种状态下,执行从docker注册服务器获取镜像的命令。
docker pull 10.1.5.25:5000/aaa/centos_local:1.0
1.0: Pulling from iseki/centos_local
3c72a8ed6814: Pull complete
Digest: sha256:fc4a234b91cc4b542bac8a6ad23b2ddcee60ae68fc4dbd4a52efb5f1b0baad71
Status: Downloaded newer image for 10.1.5.25:5000/aaa/centos_local:1.0
10.1.5.25:5000/aaa/centos_local:1.0
Docker的映像被下载
# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
10.1.5.25:5000/aaa/centos_local 1.0 0d120b6ccaa8 7 weeks ago 215MB