Docker倉庫
- 一、什麼是倉庫?
- 二、Docker Hub倉庫
- 三、Registry工作原理及倉庫搭建
-
- 1.工作原理
- 2.配置鏡像加速器
- 3.搭建私有倉庫
- 四、添加證書加密功能
- 五、為倉庫添加使用者認證功能
一、什麼是倉庫?
- Docker 倉庫是用來包含鏡像的位置,Docker提供一個注冊伺服器(Register)來儲存多個倉庫,每個倉庫又可以包含多個具備不同tag的鏡像。
- Docker運作中使用的預設倉庫是 Docker Hub 公共倉庫。
二、Docker Hub倉庫
docker hub是docker公司維護的公共倉庫,使用者可以免費使用,也可以購買私有倉庫。
首先在https://hub.docker.com/網站注冊一個賬号
在docker hub上建立一個公共倉庫
- 建立之後可以看到如下公共倉庫
-
接下來要從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
-
删除本地鏡像
docker rmi yakexi007/busybox:latest
- 删除docker hub中的鏡像倉庫
三、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用戶端來維護推送和拉取,以及用戶端的授權。
index服務主要提供鏡像索引以及使用者認證的功能。當下載下傳一個鏡像的時候,首先會去index服務上做認證,然後查找鏡像所在的registry的位址并放回給docker用戶端,docker用戶端再從registry下載下傳鏡像,在下載下傳過程中 registry會去index校驗用戶端token的合法性,不同鏡像可以儲存在不同的registry服務上,其索引資訊都放在index服務上。
-
情景A:
使用者要擷取并下載下傳鏡像
-
情景B:
使用者要擷取并下載下傳鏡像
-
情景C:
使用者要從index或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/
下載下傳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和端口
拉取鏡像
檢視
上傳
測試
測試成功,但是這個私有倉庫任何人都可以通路不安全,我們需要為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 #安裝認證的軟體
(2)添加使用者admin
htpasswd -Bc auth/htpasswd admin
(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的
報錯了,說明需要身份驗證
(5)server1進行身份認證後,再次上傳鏡像
登陸使用者
上傳鏡像
上傳成功
(6)server2再次拉取鏡像
登陸使用者admin 再次拉取
說明添加身份認證之後必須登陸使用者之後才能拉取和上傳鏡像!