http://xiaorenwutest.blog.51cto.comlinux
docker中部署私有倉庫nginx
前言:在docker中若是要使用鏡像必須從本地或者從docker Hup公共倉庫中下載鏡像,可是若是須要的鏡像本地沒有;另外公共倉庫中的鏡像或許會有咱們須要的鏡像,可是出於安全的考慮也不會使用。那麼有沒有一種辦法能夠存儲本身的鏡像的倉庫呢?就是搭建本身的私有倉庫。web
注:搭建本身的私有倉庫在生產環境中須要CA服務器,另外咱們須要一個nginx進行反向代理,在使用CA服務器進行鏈接的時候是經過https協議進行加密傳輸的,因此須要安裝openssl包裹。正則表達式
實驗環境:docker
兩臺Linux主機,一臺服務器ip192.168.65.128,另一臺爲客戶端IP192.168.65.129centos
說明:安全
docker.benet.com 這是docker registry服務器的主機名稱,ip是192.168.65.128;由於https的SSL證書要用到主機名,因此要設置主機名。服務器
dockerregistry 服務器做爲處理docker鏡像的最終上傳和下載,用的是官方的鏡像registry。curl
nginx 1.6.x 是一個用nginx做爲反向代理服務器ide
注:關閉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端操做,下降企業風險!