docker私有倉庫搭建

http://xiaorenwutest.blog.51cto.com

             docker中部署私有倉庫

前言:docker中如果要使用鏡像必須從本地或者從docker Hup公共倉庫中下載鏡像,但是如果需要的鏡像本地沒有;另外公共倉庫中的鏡像或許會有我們需要的鏡像,但是出於安全的考慮也不會使用。那麼有沒有一種辦法可以存儲自己的鏡像的倉庫呢?就是搭建自己的私有倉庫。

注:搭建自己的私有倉庫在生產環境中需要CA服務器,另外我們需要一個nginx進行反向代理,在使用CA服務器進行連接的時候是通過https協議進行加密傳輸的,所以需要安裝openssl包裹。

實驗環境:

wKiom1kXHSvQy9K2AAAdvOZlmxI730.png-wh_50 

兩臺Linux主機,一臺服務器ip192.168.65.128,另外一臺爲客戶端IP192.168.65.129

說明:

docker.benet.com 這是docker registry服務器的主機名稱,ip192.168.65.128;因爲httpsSSL證書要用到主機名,所以要設置主機名。

dockerregistry 服務器作爲處理docker鏡像的最終上傳和下載,用的是官方的鏡像registry

nginx 1.6.x 是一個用nginx作爲反向代理服務器

注:關閉selinux

1)私有倉庫https支持:

A)安裝依賴軟件包:

wKiom1kXHV7DeOT4AAAN6w6VaAw617.png-wh_50 

1:首先安裝docker環境,將docker設置爲啓動

wKiom1kXHXbwr7-ZAAAKPrUKwsM682.png-wh_50 

添加系統服務和啓動docker服務

wKioL1kXHYnAqcqKAAANdT8coTQ724.png-wh_50 

(1) 編輯/etc/hosts,docker.benet.comip地址添加進來,例如:

主機名、ip地址:

wKiom1kXHZuzKQXTAAAgN-Jzhp4885.png-wh_50 

(2) 生成根密鑰

先把

/etc/pki/CA/cacert.pem 
/etc/pki/CA/index.txt 
/etc/pki/CA/index.txt.attr 
/etc/pki/CA/index.txt.old 
/etc/pki/CA/serial 
/etc/pki/CA/serial.old

刪除掉!

如果沒有則不用刪除,另外在初始安裝CA的時候不用刪除

wKiom1kXHbGSeW_XAABM2gRWoEA477.png-wh_50 

(3) 生成根證書

執行如下圖:

wKioL1kXHcbyisKwAAB8-94zKcY872.png-wh_50 

 

會提示輸入一些內容,因爲是私有的,所以可以隨便輸入,最好記住能與後面保持一致,特別是"Common Name”。必須要和hostname顯示的一致。

自簽證書cacert.pem應該生成在/etc/pki/CA下。

wKiom1kXHduSbQjWAAAUWEGm2og621.png-wh_50 

(4) nginx web服務器生成ssl密鑰

#mkdir  /etc/pki/CA/ssl

#cd  /etc/pki/CA/ssl

wKioL1kXHfDCJwKiAAALqITRhMI621.png-wh_50 

接下來爲nginx生成祕鑰

wKiom1kXHgKBVqDYAAAxWJQU-DM980.png-wh_50 

注:因爲CA中心與要申請證書的nginx服務器是同一個所以就在本機上執行爲nginx服務器生成ssl密鑰了,否則應該是在另一臺需要用到證書的服務器上生成。

查看nginx服務器的密鑰

wKiom1kXHhrScNFCAAAKiaN98X4278.png-wh_50 

 

(5) nginx生成證書籤署請求

執行

wKioL1kXHi6wPGQLAACgwHpIUb8739.png-wh_50 

同樣會提示輸入一些內容,Commone Name一定要是你要授予證書的服務器域名或主機名,challenge password不填。

(6) 私有CA根據請求來簽發證書

wKioL1kXHkKDjNe6AAAQZ_odWv4826.png-wh_50 

執行

openssl ca -in nginx.csr -out nginx.crt

輸出內容:nginx的證書信息

wKiom1kXHlXhY0mCAACNI17sPuk191.png-wh_50 

 

同樣會提示輸入一些內容,選擇y就可以了!

查看nginx的證書

wKioL1kXHmjB81C0AAA9J7icLmk880.png-wh_50 

查看生成的證書

wKiom1kXHnuB9wrjAAAQEUXPjs4081.png-wh_50 

安裝,配置,運行nginx

(1) 添加組和用戶

wKioL1kXHpyyEk2_AAAVJKceSeY909.png-wh_50 

編譯,安裝nginx:

wKiom1kXHq6jKLpOAABT-U0lpVE047.png-wh_50 

--user=USER 設定程序運行的用戶環境(www)
--group=GROUP 設定程序運行的組環境(www)

--prefix=PATH 設定安裝目錄

--with-pcre啓用pcre庫,NginxRewrite模塊和HTTP核心模塊會使用到PCRE正則表達式

--with-http_stub_status_module 是爲了啓用 nginx  NginxStatus 功能,用來監控 Nginx 的當前狀態

--with-http_ssl_module                     開啓SSL模塊,支持使用HTTPS協議的網頁

--with-http_realip_module                開啓Real IP的支持,該模塊用於從客戶請求的頭數據中讀取Real Ip地址

--with-http_addition_module           開啓Addtion模塊,該模塊允許你追加或前置數據到相應的主體部分

--with-http_flv_module模塊ngx_http_flv_module Flash Video(FLV)文件提供服務端僞流媒體支持

編輯nginx配置文件

 wKioL1kXIPixwkQoAAAODWSEVJw260.png-wh_50

wKiom1kXIRqBMp9-AACAsB259is698.png 

語法檢測:是否ok

wKioL1kXITjTmfdfAABGrero3mw302.png-wh_50 

啓動nginx另外查看是否爲443端口使用https協議

 wKiom1kXIWvzOtujAAAifsL2eFw783.png-wh_50

2) 配置,運行Docker

(1) 停止docker

wKioL1kXIZGDne3WAAAL3ew8TQU501.png-wh_50 

(2)編輯/etc/sysconfig/docker文件,加上如下一行

DOCKER_OPTS="--insecure-registry docker.benet.com --tlsverify --tlscacert /etc/pki/CA/cacert.pem"

wKioL1kXIaOCu9kOAAAXBX_-ANo246.png-wh_50 

(3) 把根證書複製到/etc/docker/certs.d/docker.yy.com/目錄下

mkdir -p /etc/docker/certs.d/docker.benet.com

cp /etc/pki/CA/cacert.pem /etc/docker/certs.d/docker.benet.com/ca-certificates.crt

wKiom1kXIbryNLC2AAAdhku6XPc411.png-wh_50 

(4) 啓動docker

wKioL1kXIc2jiudCAAAMUnfthIc466.png-wh_50 

3)運行私有倉庫容器

運行registry 鏡像來搭建私有倉庫,通過官方獲得

wKioL1kXId-T2hDLAAAnFG_6ilk463.png-wh_50 

wKiom1kXIfGxegmAAAAbSEz_47A888.png-wh_50 

例如將目錄/opt/data/registry作爲私有倉庫的位置

wKiom1kXIgOQADVuAAALipzp1v0249.png-wh_50 

運行私有倉庫容器

wKioL1kXIheAvTP7AAA3vTGEH1A510.png-wh_50 

可以通過 -v 參數來將鏡像文件存放在本地的指定路徑。例如上面的例子將上傳的鏡像放到 /opt/data/registry 目錄。

-p(小寫的)用於將容器的5000端口映射宿主機的5000端口。

 

4)驗證registry:

curl -i -k https://docker.benet.com

wKiom1kXIivBIvVjAAA2mij4u9o446.png-wh_50 

Docker客戶端配置

(1)編輯/etc/hosts,docker.benet.comip地址添加進來

wKioL1kXIkGAubdrAAAgN-Jzhp4182.png-wh_50 

(2)docker registry服務器端的根證書追加到ca-certificates.crt文件裏

先從docker registry服務器端把文件/etc/pki/CA/cacert.pem拷貝到本機,然後執行命令:

cat ./cacert.pem>> /etc/pki/tls/certs/ca-certificates.crt

 

wKioL1kXIlbgeYkkAABx0qyscBk102.png-wh_50 

 

(3) 驗證docker.benet.com下的registry:

wKiom1kXInPBmaXRAAA2mij4u9o644.png-wh_50 

注:此項工作之前先將防火牆關閉再或者將5000端口和443端口放行,否則防火牆禁止通行

(4) 使用私有registry步驟:

可以通過docker login命令登錄交互式系統輸入用戶名和密碼;或者也可以通過

登錄: docker login -u lxftest -p pwd123 -e "lxf@benet.com" https://docker.benet.com實現

Docker HUB 上拉取一個鏡像測試爲基礎鏡像打個標籤:

docker tag centos:centos6 docker.benet.com/centos:centos6

wKiom1kXIobjzAcnAABfZCeEYVc100.png-wh_50 

發佈:上傳鏡像到本地私有倉庫  上傳命令 docker push 加完整的鏡像

docker push docker.benet.com/centos:centos6

 

wKioL1kXIpeDg0YiAAA47tR2XDo785.png-wh_50 

從私有倉庫pull下來p_w_picpath,查看p_w_picpath 下載命令 docker pull 加完整的鏡像名

wKiom1kXIqjzidqFAADp0DQkb4k328.png-wh_50 

 

 

在服務器端的私有倉庫:查看私有倉庫是否有對應的鏡像

wKiom1kXIrmzH8hnAAAY39N-UjY658.png-wh_50 

私有倉庫的優缺點:

弊端:

server端可以login到官方的Docker Hub,可以pull,push官方和私有倉庫
client端只能操作搭設好的私有倉庫
私有倉庫不能search!

 

優點:

所有的build,pull,push操作只能在私有倉庫的server端操作,降低企業風險!

 


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章