云与虚拟化:实验3 搭建Docker私有仓库

实验要求

了解仓库,掌握搭建私有仓库的方法。

前置准备

要求实验主机能够连接外网,已经正确安装Docker(版本号19.03.12),并关闭防火墙和selinux。本实验各主机配置信息如表3-1所示。

表 3-1 各宿主机信息表

主机名IP地址节点角色
registry10.1.1.170/24私有仓库
node110.1.1.71/24客户端1
node210.1.1.59/24客户端2

先建立一个快照:

实验步骤

步骤1

registry主机上利用docker pull命令从Docker Hub拉取registry镜像,并通过docker images命令查看下载的registry镜像。

[root@localhost ~]# hostnamectl set-hostname registry
[root@registry ~]# docker pull registry
[root@registry ~]# docker images

步骤2

通过docker run命令启动一个registry容器,并挂载目录,利用容器提供私有仓库的服务,并通过docker ps命令查看registry容器是否运行。

[root@registry ~]# docker run -d -p 5000:5000 -v /myregistry:/var/lib/registry registry
[c93669d06c5545b1f90fcb721bdb4da43b7add9fff7ede08b9e58822d1c235d1]
[root@registry ~]# docker ps -a
root@registry:/home/dayi# docker run -d -p 5000:5000 -v /opt/myregistry:/var/lib/registry registry
3469b41b2f69ec32f06eb5d004ba84141e3d7f499b6b343756c31b4a4879ca8d
root@registry:/home/dayi#

步骤3

执行命令

curl -X GET http://127.0.0.1:5000/v2/_catalog

命令,如果显示如下信息,表示目前仓库里还没有镜像,此时私有仓库已经创建和启动完毕了。

{"repositories":[]}
root@registry:/home/dayi# curl -X GET http://127.0.0.1:5000/v2/_catalog
{"repositories":[]}
root@registry:/home/dayi# 

步骤4

拉取busybox镜像,修改tag名称后,上传到本地仓库中。

[root@registry ~]# docker pull busybox
[root@registry ~]# docker images
[root@registry ~]# docker tag busybox:latest 192.168.5.100:5000/busybox:latest
[root@registry ~]# docker images

步骤5

将镜像192.168.5.100:5000/busybox上传到本地仓库中。

[root@registry ~]# docker push 192.168.5.100:5000/busybox

步骤6

如果出现上述提示,表示本地仓库默认使用的是https协议进行上传。而当前采用是非https协议上传,可采用步骤6进行处理。修改/usr/lib/systemd/system/docker.service文件,在ExecStart参数后面添加--insecure-registry 192.168.5.100:5000。

[root@registry ~]# vi /usr/lib/systemd/system/docker.service
// 修改ExecStart参数,修改完后,内容如下
ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock --insecure-registry 192.168.5.100:5000

保存退出,重启docker服务。

[root@registry ~]# systemctl daemon-reload
[root@registry ~]# systemctl restart docker

重启registry容器。

[root@registry ~]# docker restart c93669d06c55
root@registry:/home/dayi# docker run -d -p 5000:5000 -v /opt/myregistry:/var/lib/registry registry
4d5dacc0842c47f7308100362bba7e0ed67dca3503092ee07b09d7f6a7275144
root@registry:/home/dayi# docker push 10.1.1.170:5000/busybox
Using default tag: latest
The push refers to repository [10.1.1.170:5000/busybox]
Get "https://10.1.1.170:5000/v2/": http: server gave HTTP response to HTTPS client
root@registry:/home/dayi# 

步骤7

再次上传镜像192.168.5.100:5000/busybox到本地仓库。

[root@registry ~]# docker push 192.168.5.100:5000/busybox

root@registry:/home/dayi# docker push 10.1.1.170:5000/busybox
Using default tag: latest
The push refers to repository [10.1.1.170:5000/busybox]
Get "https://10.1.1.170:5000/v2/": http: server gave HTTP response to HTTPS client
root@registry:/home/dayi# vim /usr/lib/systemd/system/docker.service
root@registry:/home/dayi# vim /usr/lib/systemd/system/docker.service
root@registry:/home/dayi#  systemctl daemon-reload
root@registry:/home/dayi# systemctl restart docker
root@registry:/home/dayi# docker push 10.1.1.170:5000/busybox
Using default tag: latest
The push refers to repository [10.1.1.170:5000/busybox]
3d24ee258efc: Retrying in 1 second 

步骤8

在客户端1和客户端2上修改/usr/lib/systemd/system/目录下的docker.service文件,在ExecStart=/usr/bin/dockerd后面添加--insecure-registry 192.168.5.100:5000,保存后并重启docker服务。

--insecure-registry 10.1.1.170:5000

客户端1:

[root@localhost ~]# hostnamectl set-hostname node1
[root@node1 ~]# vi /usr/lib/systemd/system/docker.service
// 修改ExecStart参数,修改完后,内容如下
ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock --insecure-registry 192.168.5.100:5000

保存退出,重启docker服务。

[root@node1 ~]# systemctl daemon-reload
[root@node1 ~]# systemctl restart docker

客户端2:

[root@localhost ~]# hostnamectl set-hostname node2
[root@node2 ~]# vi /usr/lib/systemd/system/docker.service
// 修改ExecStart参数,修改完后,内容如下
ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock --insecure-registry 192.168.5.100:5000

保存退出,重启docker服务。

[root@node2 ~]# systemctl daemon-reload
[root@node2 ~]# systemctl restart docker

步骤9

在客户端node1和node2上拉取私有仓库中的busybox镜像。

[root@node1 ~]# docker pull 192.168.5.100:5000/busybox
[root@node1 ~]# docker images

[root@node2 ~]# docker pull 192.168.5.100:5000/busybox
[root@node2 ~]# docker images

node1

node2

最后修改:2023 年 11 月 23 日
如果觉得我的文章对你有用,请随意赞赏