您好,登錄后才能下訂單哦!
http://xiaorenwutest.blog.51cto.com
docker中部署私有倉庫
前言:在docker中如果要使用鏡像必須從本地或者從docker Hup公共倉庫中下載鏡像,但是如果需要的鏡像本地沒有;另外公共倉庫中的鏡像或許會有我們需要的鏡像,但是出于安全的考慮也不會使用。那么有沒有一種辦法可以存儲自己的鏡像的倉庫呢?就是搭建自己的私有倉庫。
注:搭建自己的私有倉庫在生產環境中需要CA服務器,另外我們需要一個nginx進行反向代理,在使用CA服務器進行連接的時候是通過https協議進行加密傳輸的,所以需要安裝openssl包裹。
實驗環境:
兩臺Linux主機,一臺服務器ip192.168.65.128,另外一臺為客戶端IP192.168.65.129
說明:
docker.benet.com 這是docker registry服務器的主機名稱,ip是192.168.65.128;因為https的SSL證書要用到主機名,所以要設置主機名。
dockerregistry 服務器作為處理docker鏡像的最終上傳和下載,用的是官方的鏡像registry。
nginx 1.6.x 是一個用nginx作為反向代理服務器
注:關閉selinux
1)私有倉庫https支持:
A)安裝依賴軟件包:
1:首先安裝docker環境,將docker設置為啟動
添加系統服務和啟動docker服務
(1) 編輯/etc/hosts,把docker.benet.com的ip地址添加進來,例如:
主機名、ip地址:
(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的時候不用刪除
(3) 生成根證書
執行如下圖:
會提示輸入一些內容,因為是私有的,所以可以隨便輸入,最好記住能與后面保持一致,特別是"Common Name”。必須要和hostname顯示的一致。
自簽證書cacert.pem應該生成在/etc/pki/CA下。
(4) 為nginx web服務器生成ssl密鑰
#mkdir /etc/pki/CA/ssl
#cd /etc/pki/CA/ssl
接下來為nginx生成秘鑰
注:因為CA中心與要申請證書的nginx服務器是同一個所以就在本機上執行為nginx服務器生成ssl密鑰了,否則應該是在另一臺需要用到證書的服務器上生成。
查看nginx服務器的密鑰
(5) 為nginx生成證書簽署請求
執行
同樣會提示輸入一些內容,Commone Name一定要是你要授予證書的服務器域名或主機名,challenge password不填。
(6) 私有CA根據請求來簽發證書
執行
openssl ca -in nginx.csr -out nginx.crt
輸出內容:nginx的證書信息
同樣會提示輸入一些內容,選擇y就可以了!
查看nginx的證書
查看生成的證書
安裝,配置,運行nginx
(1) 添加組和用戶
編譯,安裝nginx:
--user=USER 設定程序運行的用戶環境(www)
--group=GROUP 設定程序運行的組環境(www)
--prefix=PATH 設定安裝目錄
--with-pcre啟用pcre庫,Nginx的Rewrite模塊和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配置文件
語法檢測:是否ok
啟動nginx另外查看是否為443端口使用https協議
2) 配置,運行Docker
(1) 停止docker
(2)編輯/etc/sysconfig/docker文件,加上如下一行
DOCKER_OPTS="--insecure-registry docker.benet.com --tlsverify --tlscacert /etc/pki/CA/cacert.pem"
(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
(4) 啟動docker
3)運行私有倉庫容器
運行registry 鏡像來搭建私有倉庫,通過官方獲得
例如將目錄/opt/data/registry作為私有倉庫的位置
運行私有倉庫容器
可以通過 -v 參數來將鏡像文件存放在本地的指定路徑。例如上面的例子將上傳的鏡像放到 /opt/data/registry 目錄。
-p(小寫的)用于將容器的5000端口映射宿主機的5000端口。
4)驗證registry:
curl -i -k https://docker.benet.com
Docker客戶端配置
(1)編輯/etc/hosts,把docker.benet.com的ip地址添加進來
(2)把docker registry服務器端的根證書追加到ca-certificates.crt文件里
先從docker registry服務器端把文件/etc/pki/CA/cacert.pem拷貝到本機,然后執行命令:
cat ./cacert.pem>> /etc/pki/tls/certs/ca-certificates.crt
(3) 驗證docker.benet.com下的registry:
注:此項工作之前先將防火墻關閉再或者將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
發布:上傳鏡像到本地私有倉庫 上傳命令 docker push 加完整的鏡像
docker push docker.benet.com/centos:centos6
從私有倉庫pull下來p_w_picpath,查看p_w_picpath 下載命令 docker pull 加完整的鏡像名
在服務器端的私有倉庫:查看私有倉庫是否有對應的鏡像
私有倉庫的優缺點:
弊端:
server端可以login到官方的Docker Hub,可以pull,push官方和私有倉庫!
client端只能操作搭設好的私有倉庫!
私有倉庫不能search!
優點:
所有的build,pull,push操作只能在私有倉庫的server端操作,降低企業風險!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。