天天看點

Kubernetes認證考試自學系列 | 使用registry鏡像搭建私有倉庫

作者:熱愛程式設計的通信人

書籍來源:《CKA/CKAD應試指南:從Docker到Kubernetes完全攻略》

一邊學習一邊整理讀書筆記,并與大家分享,侵權即删,謝謝支援!

附上彙總貼:Kubernetes認證考試自學系列 | 彙總_COCOgsta的部落格-CSDN部落格

前面我們建立容器所需要的鏡像都是從網絡下載下傳的,但是生産伺服器很多是不能連接配接到外網的,那麼此時該如何使用鏡像呢?

這個時候,我們可以在自己的内網搭建一個私有倉庫,把需要的鏡像上傳到私有倉庫,這樣其他主機需要鏡像的話,就可以從私有倉庫自行下載下傳了。

要想配置私有倉庫的話,有兩種方法。

(1)使用registry鏡像。

(2)利用harbor。

本章暫且先講registry配置私有倉庫,後面會單獨講解如何使用harbor配置私有倉庫。

先檢視下面的拓撲圖,如圖2-3所示。

Kubernetes認證考試自學系列 | 使用registry鏡像搭建私有倉庫

這裡把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 ~]#            

繼續閱讀