Kubernetes认证考试自学系列 | 使用registry镜像搭建私有仓库

书籍来源:《CKA/CKAD应试指南:从Docker到Kubernetes完全攻略》

一边学习一边整理读书笔记,并与大家分享,侵权即删,谢谢支持!

附上汇总贴:Kubernetes认证考试自学系列 | 汇总_COCOgsta的博客-CSDN博客


前面我们创建容器所需要的镜像都是从网络下载的,但是生产服务器很多是不能连接到外网的,那么此时该如何使用镜像呢?

这个时候,我们可以在自己的内网搭建一个私有仓库,把需要的镜像上传到私有仓库,这样其他主机需要镜像的话,就可以从私有仓库自行下载了。

要想配置私有仓库的话,有两种方法。

(1)使用registry镜像。

(2)利用harbor。

本章暂且先讲registry配置私有仓库,后面会单独讲解如何使用harbor配置私有仓库。

先查看下面的拓扑图,如图2-3所示。

这里把vms101作为私有仓库,在vms101上用镜像registry创建一个容器出来,这个容器就作为私有仓库。容器的端口是5000,为了让外部其他主机能访问到此容器,所以创建这个registry容器的时候,需要映射到物理机的5000端口。

在vms101上安装并启动docker-ce,自行下载镜像registry。

docker pull hub.c.163.com/library/registry:latest
复制代码

2.2.1 搭建私有仓库并设置

在vms101上配置。

步骤1:设置docker可以通过http的方式访问,有两种方法,二选一即可。

(1)修改/usr/lib/systemd/system/docker.service,在ExecStart后面添加:

ExecStart=/usr/bin/dockerd --insecure-registry=192.168.26.101:5000 -H fd:// --containerd=/run/containerd/containerd.sock
复制代码

然后重启docker。

[root@vms101 ~]# systemctl daemon-reload ; systemctl restart docker
[root@vms101 ~]#
复制代码

(2) 或者修改/etc/docker/daemon.json, 内容如下。

[root@vms101 ~]# cat/etc/docker/daemon.json 
{
  "insecure-registries": ["192.168.26.101:5000"]
}
[root@vms101 ~]#
复制代码

步骤2:重启docker。

[root@vms101 ~]# systemctl restart docker
[root@vms101 ~]#
复制代码

步骤3:利用registry镜像创建一个容器。

[root@vms101 ~]# docker run -d --name myreg -p 5000:5000 --restart=always -v /myreg:/var/lib/registry hub.c.163.com/library/registry
dffd37ea2c0f590c93c8233f96bed35d9b984ba5aed8204981168573daa1f863
[root@vms101 ~]#
复制代码

此时私有仓库就配置好了。这里把容器的端口映射到物理机的5000端口,上传的镜像都是在容器的/var/lib/registry目录里, 为了能够保证删除容器之后上传的镜像也是存在的, 这里做了一个数据卷, 把容器的/var/lib/registry映射到物理机的/myreg目录。

下面在vms100上配置。

步骤4:修改相关配置, 使得docker能以http方式访问,这里修改的是/etc/docker/daemon.json, 内容如下。

[root@vms100 ~]# cat/etc/docker/daemon.json 
{
  "registry-mirrors": ["https://frz7i079.mirror.aliyuncs.com"],
  "insecure-registries": ["192.168.26.101:5000"]
}
[root@vms100 ~]#
复制代码

步骤5:重启docker。

[root@vms100 ~]# systemctl restart docker
[root@vms100 ~]# 
复制代码

步骤6:在vms100上对要推送的镜像进行tag操作。

[root@vms100 ~]# docker tag centos:v1 192.168.26.101:5000/cka/centos:v1
[root@vms100 ~]# 
复制代码

这里新的tag的服务器要指向docker仓库的地址, 即192.168.26.101:5000, 后面的分类cka及镜像名都可以随意定义。

步骤7:把此镜像推送到docker仓库。

[root@vms100 ~]# docker push 192.168.26.101:5000/cka/centos:v1
The push refers to a repository [192.168.26.101:5000/cka/centos]
589830c63604: Pushed 
b362758f4793: Pushing [=======>                   ] 115.6 MB/192.5 MB 
...
v1: digest: sha256:441d92a9bcead311817e501cd3be261497af size: 741
[root@vms100 ~]#
复制代码

以此类推, 可以推送多个镜像, 分类可以根据需要自己定义, 我这里把wordpress和mysql都推送到私有仓库里了。

docker tag hub.c.163.com/library/mysql 192.168.26.101:5000/rhce8/mysql:v1
docker push 192.168.26.101:5000/rhce8/mysql:v1
docker tag hub.c.163.com/library/wordpress 192.168.26.101:5000/rhce8/wordpress:v2
docker push 192.168.26.101:5000/rhce8/wordpress:v2
复制代码

步骤8:利用之前写过的rm_all_image.sh清空vms100上所有的镜像。

[root@vms100 ~]# docker images 
REPOSITORY     TAG    IMAGE ID         CREATED       SIZE 
[root@vms100 ~]#
复制代码

2.2.2 从私有仓库下载镜像

本节练习如何从私有仓库拉取镜像,首先要查看私有仓库里有多少镜像。

步骤1:安装工具jq。

[root@vms100 ~]# yum install jq -y 
   ...输出...
已安装 :
  jq.x86_64 0:1.6-2.el7

作为依赖被安装 :
  oniguruma.x86_64 0:6.8.2-1.el7
 
完毕!
[root@vms100 ~]#
复制代码

步骤2:查看私有仓库所具有的仓库。

[root@vms100 ~]# curl -s http://192.168.26.101:5000/v2/_catalog | jq 
{
  "repositories": [
    "cka/centos",
    "rhce8/mysql",
    "rhce8/wordpress"
  ]
}
[root@vms100 ~]#
复制代码

此时只看到了分类及镜像, 并没有看到这些镜像的tag, 如果想有某镜像具体的tag, 使用如下命令。

[root@vms100 ~]# curl http://192.168.26.101:5000/v2/cka/centos/tags/list
{"name":"cka/centos","tags":["v1"]}
[root@vms100 ~]#
复制代码

可以看到cka/centos对应的tag为v1。这样完整的镜像就是192.168.26.101:5000/cka/centos:v1。

步骤3:也可以通过写一个脚本实现列出仓库里一共有多少镜像。

[root@vms100 ~]# cat list_img
#!/bin/bash
file=$(mktemp)
curl -s $1:5000/v2/_catalog | jq | egrep -v '{|}|[|]' | awk -F" '{print $2}' > $file
while read aa ; do
tag=($(curl -s $1:5000/v2/$aa/tags/list | jq | egrep -v '{|}|[|]|name' | awk -F" '{print $2}'))
  for i in ${tag[*]} ; do
    echo $1:5000/${aa}:$i
  done
done < $file
rm -rf $file
[root@vms100 ~]#
复制代码

步骤4:给此脚本加上一个可执行权限。

[root@vms100 ~]# chmod +x list_img
[root@vms100 ~]#
复制代码

步骤5:执行脚本列出192.168.26.101上有多少镜像。

[root@vms100 ~]# ./list_img 192.168.26.101
192.168.26.101:5000/cka/centos:v1
192.168.26.101:5000/rhce8/mysql:v1
192.168.26.101:5000/rhce8/wordpress:v2
[root@vms100 ~]#
复制代码

步骤6:下载镜像。

[root@vms100 ~]# docker pull 192.168.26.101:5000/cka/centos:v1
Trying to pull repository 192.168.26.101:5000/cka/centos ...
v1: Pulling from 192.168.26.101:5000/cka/centos
364f9b7c969a: Pull complete
7d559fcdf1a2: Pull complete
Digest: sha256:441d92a9bcead311817e501cd32bce0c2bbb837a49e6bd2e75f8b4be261497af
Status: Downloaded newer image for 192.168.26.101:5000/cka/centos:v1
[root@vms100 ~]#
复制代码

步骤7:删除此镜像。

[root@vms100 ~]# docke rmi 192.168.26.101:5000/cka/centos:v1
Untagged: 192.168.26.101:5000/cka/centos:v1
...
[root@vms100 ~]#
复制代码

2.2.3 删除本地仓库里的镜像

本地已经拉取下来的镜像可以通过docker rmi来删除, 那么存在仓库里的镜像该如何删除呢?下面开始练习删除仓库里的镜像。

因为镜像仓库是放在vms101上的, 所以下面的步骤是在vms101上操作的。

用命令wget ftp://ftp.rhce.cc/cka-tool/delete_docker_registry_image下载脚本。

步骤1:设置变量REGISTRY_DATA_DIR, 值为/path/docker/registry/v2, 此处的/path是在创建容器时物理机对应的目录, 这里是/myreg。

[root@vms101 ~]# export REGISTRY_DATA_DIR=/myreg/docker/registry/v2
[root@vms101 ~]# chmod +x delete_docker_registry_image
复制代码

步骤2:现在删除rhce8/wordpress:v2这个镜像。

[root@vms101 ~]# ./delete_docker_registry_image -i rhce8/wordpress:v2
... 大量输出 ...
[root@vms101 ~]#
复制代码

步骤3:到vms100上验证。

[root@vms 100~] #./list_img 192.168.26.101
192.168.26.101:5000/cka/centos:v 1
192.168.26.101:5000/rhce 8/mysql:v 1
[root@vms 100~] #
复制代码

可以看到已经成功地删除了。

步骤4:自行把vms101上的registry容器删除。

[root@vms101 ~]# docker rm -f myreg
myreg
[root@vms101 ~]#
复制代码

步骤:为了以后方便, 在vms100上为镜像192.168.26.101:5000/cka/centos:v1重新做一个tag,名字为centos:v1。

[root@vms100 ~]# docker tag 192.168.26.101:5000/cka/centos:v1 cenos:v1
[root@vms100 ~]# 

猜你喜欢

转载自blog.csdn.net/guolianggsta/article/details/130461198