云与虚拟化:实验3 搭建Docker私有仓库
实验要求
了解仓库,掌握搭建私有仓库的方法。
前置准备
要求实验主机能够连接外网,已经正确安装Docker(版本号19.03.12),并关闭防火墙和selinux。本实验各主机配置信息如表3-1所示。
表 3-1 各宿主机信息表
主机名 | IP地址 | 节点角色 |
---|---|---|
registry | 10.1.1.170/24 | 私有仓库 |
node1 | 10.1.1.71/24 | 客户端1 |
node2 | 10.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