天天看點

Linux企業運維——Docker倉庫(三)一、什麼是倉庫?二、Docker Hub倉庫三、Registry工作原理及倉庫搭建四、添加證書加密功能五、為倉庫添加使用者認證功能

Docker倉庫

  • 一、什麼是倉庫?
  • 二、Docker Hub倉庫
  • 三、Registry工作原理及倉庫搭建
    • 1.工作原理
    • 2.配置鏡像加速器
    • 3.搭建私有倉庫
  • 四、添加證書加密功能
  • 五、為倉庫添加使用者認證功能

一、什麼是倉庫?

  • Docker 倉庫是用來包含鏡像的位置,Docker提供一個注冊伺服器(Register)來儲存多個倉庫,每個倉庫又可以包含多個具備不同tag的鏡像。
  • Docker運作中使用的預設倉庫是 Docker Hub 公共倉庫。
Linux企業運維——Docker倉庫(三)一、什麼是倉庫?二、Docker Hub倉庫三、Registry工作原理及倉庫搭建四、添加證書加密功能五、為倉庫添加使用者認證功能

二、Docker Hub倉庫

docker hub是docker公司維護的公共倉庫,使用者可以免費使用,也可以購買私有倉庫。

Linux企業運維——Docker倉庫(三)一、什麼是倉庫?二、Docker Hub倉庫三、Registry工作原理及倉庫搭建四、添加證書加密功能五、為倉庫添加使用者認證功能

首先在https://hub.docker.com/網站注冊一個賬号

在docker hub上建立一個公共倉庫

Linux企業運維——Docker倉庫(三)一、什麼是倉庫?二、Docker Hub倉庫三、Registry工作原理及倉庫搭建四、添加證書加密功能五、為倉庫添加使用者認證功能
  • 建立之後可以看到如下公共倉庫
    Linux企業運維——Docker倉庫(三)一、什麼是倉庫?二、Docker Hub倉庫三、Registry工作原理及倉庫搭建四、添加證書加密功能五、為倉庫添加使用者認證功能
  • 接下來要從docker主機上傳鏡像,首先需要登入:

    [[email protected] ~]# docker login

    Username: yakexi007

    Password: <填寫密碼>

docker hub為了區分不同使用者的同名鏡像,要求鏡像的格式是:[username]/xxx.tag

docker tag busybox:latest yakexi007/busybox:latest

  • 上傳鏡像到docker hub

    docker push yakexi007/busybox:latest

  • 從docker hub拉取鏡像

    docker pull yakexi007/busybox:latest

    Linux企業運維——Docker倉庫(三)一、什麼是倉庫?二、Docker Hub倉庫三、Registry工作原理及倉庫搭建四、添加證書加密功能五、為倉庫添加使用者認證功能
  • 删除本地鏡像

    docker rmi yakexi007/busybox:latest

  • 删除docker hub中的鏡像倉庫
    Linux企業運維——Docker倉庫(三)一、什麼是倉庫?二、Docker Hub倉庫三、Registry工作原理及倉庫搭建四、添加證書加密功能五、為倉庫添加使用者認證功能

三、Registry工作原理及倉庫搭建

1.工作原理

Registry是一個幾種存放image并對外提供上傳下載下傳以及一系列API的服務。可以很容易和本地源代碼以及遠端Git服務的關系相對應。

Docker hub是Docker公司提供的一些存儲鏡像的空間,這部分空間是有限的。我們一般會自主建設Docker私有倉庫Registry。

  • Docker Registry有三個角色,分别是index、registry和registry client

    index:

    負責并維護有關使用者帳戶、鏡像的校驗以及公共命名空間的資訊。

    Web UI

    中繼資料存儲

    認證服務

    符号化

    registry:

    是鏡像和圖表的倉庫,它不具有本地資料庫以及不提供使用者認證,通過Index Auth service的Token的方式進行認證。

    registry client:

    Docker充當registry用戶端來維護推送和拉取,以及用戶端的授權。

Linux企業運維——Docker倉庫(三)一、什麼是倉庫?二、Docker Hub倉庫三、Registry工作原理及倉庫搭建四、添加證書加密功能五、為倉庫添加使用者認證功能

index服務主要提供鏡像索引以及使用者認證的功能。當下載下傳一個鏡像的時候,首先會去index服務上做認證,然後查找鏡像所在的registry的位址并放回給docker用戶端,docker用戶端再從registry下載下傳鏡像,在下載下傳過程中 registry會去index校驗用戶端token的合法性,不同鏡像可以儲存在不同的registry服務上,其索引資訊都放在index服務上。

  • 情景A:

    使用者要擷取并下載下傳鏡像

Linux企業運維——Docker倉庫(三)一、什麼是倉庫?二、Docker Hub倉庫三、Registry工作原理及倉庫搭建四、添加證書加密功能五、為倉庫添加使用者認證功能
  • 情景B:

    使用者要擷取并下載下傳鏡像

Linux企業運維——Docker倉庫(三)一、什麼是倉庫?二、Docker Hub倉庫三、Registry工作原理及倉庫搭建四、添加證書加密功能五、為倉庫添加使用者認證功能
  • 情景C:

    使用者要從index或registry中删除鏡像

Linux企業運維——Docker倉庫(三)一、什麼是倉庫?二、Docker Hub倉庫三、Registry工作原理及倉庫搭建四、添加證書加密功能五、為倉庫添加使用者認證功能

2.配置鏡像加速器

從docker hub上下載下傳鏡像的速度太慢,需要配置鏡像加速器,這裡以阿裡雲為例:(需要提前注冊阿裡雲帳号)

配置docker daemon檔案:

vim /etc/docker/daemon.json
\\\
  {
  "registry-mirrors": ["https://vo5twm71.mirror.aliyuncs.com"]
  }
\\\
systemctl daemon-reload      #重載docker服務
systemctl restart docker
           

3.搭建私有倉庫

docker hub雖然友善,但是還是有限制

需要internet連接配接,速度慢

所有人都可以通路

由于安全原因企業不允許将鏡像放到外網

好消息是docker公司已經将registry開源,我們可以快速建構企業私有倉庫

網址: https://docs.docker.com/registry/deploying/

Linux企業運維——Docker倉庫(三)一、什麼是倉庫?二、Docker Hub倉庫三、Registry工作原理及倉庫搭建四、添加證書加密功能五、為倉庫添加使用者認證功能

下載下傳registry鏡像tag标記,需要加上倉庫的ip和端口然後上傳到本地

docker pull registry     #下載下傳鏡像
docker run -d -p 5000:5000 registry:2       #運作registry容器
docker tag game2048:latest localhost:5000/game2048:latest     #标記鏡像
docker push localhost:5000/game2048:latest		  #上傳鏡像到本地倉庫需要加上ip和端口
           

拉取鏡像

Linux企業運維——Docker倉庫(三)一、什麼是倉庫?二、Docker Hub倉庫三、Registry工作原理及倉庫搭建四、添加證書加密功能五、為倉庫添加使用者認證功能

檢視

Linux企業運維——Docker倉庫(三)一、什麼是倉庫?二、Docker Hub倉庫三、Registry工作原理及倉庫搭建四、添加證書加密功能五、為倉庫添加使用者認證功能

上傳

Linux企業運維——Docker倉庫(三)一、什麼是倉庫?二、Docker Hub倉庫三、Registry工作原理及倉庫搭建四、添加證書加密功能五、為倉庫添加使用者認證功能

測試

Linux企業運維——Docker倉庫(三)一、什麼是倉庫?二、Docker Hub倉庫三、Registry工作原理及倉庫搭建四、添加證書加密功能五、為倉庫添加使用者認證功能

測試成功,但是這個私有倉庫任何人都可以通路不安全,我們需要為Docker倉庫添加證書加密功能

四、添加證書加密功能

  • 為Docker倉庫添加證書加密功能
    • 生成證書(域名westos.org要求在主機上有解析)

建立證書存放目錄并生成證書

mkdir certs      #建立證書目錄
openssl req -newkey rsa:4096 -nodes -sha256 -keyout certs/westos.org.key -x509 -days 365 -out certs/westos.org.crt
           

證書生成時報錯,原因是ssl版本太低的問題

我們需要用openssl11來生成證書,需要删掉原來的證書檔案

下載下傳本地安裝包
lftp 172.25.254.111:/pub/docs/docker> mirror openssl11/
exit
cd openssl11/
 yum install  -y *    #将目錄中的openssl11的安裝包全部安裝
           

下載下傳好openssl11之後建立加密認證的密鑰

openssl11 req -newkey rsa:4096 -nodes -sha256 -keyout certs/westos.org.key  -addext "subjectAltName = DNS:reg.westos.org" -x509 -days 365 -out certs/westos.org.crt
           

重新将證書拷貝到/etc/docker/certs.d/reg.westos.org/ca.crt

拷貝證書到docker主機

因為使用的是自簽證書,用戶端要與私有倉庫通信,那麼必須建立一個目錄:/etc/docker/certs.d,在這個目錄下建立簽名的域名的目錄,需要把私有倉庫的證書拷貝到這個目錄下

mkdir -p /etc/docker/certs.d/reg.westos.org
cp certs/westos.org.crt /etc/docker/certs.d/reg.westos.org/ca.crt
           

将域名reg.westos.org寫在/etc/hosts解析檔案中

标記重命名game2048并上傳到本地的reg.westos.org倉庫中

五、為倉庫添加使用者認證功能

(1)建立使用者認證檔案并安裝相關支援軟體

mkdir auth
yum install -y httpd-tools-2.4.6-88.el7.x86_64     #安裝認證的軟體
           
Linux企業運維——Docker倉庫(三)一、什麼是倉庫?二、Docker Hub倉庫三、Registry工作原理及倉庫搭建四、添加證書加密功能五、為倉庫添加使用者認證功能

(2)添加使用者admin

htpasswd -Bc auth/htpasswd admin

Linux企業運維——Docker倉庫(三)一、什麼是倉庫?二、Docker Hub倉庫三、Registry工作原理及倉庫搭建四、添加證書加密功能五、為倉庫添加使用者認證功能

(3)删除之前的容器并重建,添加使用者認證及密鑰子產品

運作registry容器

docker rm -f registry  
docker run -d --restart=always --name registry  -v "$(pwd)"/certs:/certs  -e REGISTRY_HTTP_ADDR=0.0.0.0:443 -e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/westos.org.crt -e REGISTRY_HTTP_TLS_KEY=/certs/westos.org.key  -p 443:443 registry     # -v表示挂載
           

(4)在server2主機上拉取倉庫鏡像

server2主機應當安裝docker,設定為開機啟動,拷貝server1的證書ca.crt到server2已經安裝docker的

Linux企業運維——Docker倉庫(三)一、什麼是倉庫?二、Docker Hub倉庫三、Registry工作原理及倉庫搭建四、添加證書加密功能五、為倉庫添加使用者認證功能

報錯了,說明需要身份驗證

(5)server1進行身份認證後,再次上傳鏡像

登陸使用者

上傳鏡像

Linux企業運維——Docker倉庫(三)一、什麼是倉庫?二、Docker Hub倉庫三、Registry工作原理及倉庫搭建四、添加證書加密功能五、為倉庫添加使用者認證功能

上傳成功

(6)server2再次拉取鏡像

登陸使用者admin 再次拉取

Linux企業運維——Docker倉庫(三)一、什麼是倉庫?二、Docker Hub倉庫三、Registry工作原理及倉庫搭建四、添加證書加密功能五、為倉庫添加使用者認證功能

說明添加身份認證之後必須登陸使用者之後才能拉取和上傳鏡像!

繼續閱讀