使用自簽名的方式建立Docker私有倉庫

leolztang發表於2016-03-05

Docker推薦使用CA機構頒發的TLS(Transport Layer Security Protocol)證書來保護docker倉庫的安全,但是我們也可以選擇使用HTTP或者自簽名證書的方式實現本地私有倉庫的訪問。 本文將通過自簽名證書的方式實現本地私有倉庫的搭建。

使用自簽名的方式建立私有倉庫

使用環境

在不同的Docker版本或Linux系統上,部署的過程可能有差別,本文的測試環境為:

  • Ubuntu15.10
  • Docker 1.9.1

準備工作

  •  為了方便測試,最好有兩臺機器,一臺作為私有倉庫主機(簡稱主機,用作映象倉庫),一臺作為客戶機(從主機下載映象)
  •  客戶機和主機都已經已經安裝了Docker
  • 主機已經安裝openssl(一般預設已經安裝)
  • 主機的域名(domain),這裡以dev.leo.com為例

如果沒有獲得DNS能夠解析的域名,我們可以再客戶機的hosts檔案加上私有倉庫的主機名和IP的對映。如果已經有了,則忽略這一步。

~$ sudo vi /etc/hosts

#新增私有倉庫的主機名和IP對映, 主機名可以是任意的字串
192.168.16.160 dev.leo.com

給主機生成證書

#當前工作目錄為: ~

#建立一個目錄,存放生成的key和cert檔案
~$ sudo mkdir -p cert

#建立私鑰和證書
~$ sudo openssl req -newkey rsa:4096 -nodes -sha256 -keyout certs/dev.leo.com.key -x509 -days 365 -out certs/dev.leo.com.crt
Generating a 4096 bit RSA private key
... #省略不重要的資訊,以下資訊需要填寫,注意Common Name需要和主機名(domain)一致
Country Name (2 letter code) [AU]:CN
State or Province Name (full name) [Some-State]:GD
Locality Name (eg, city) []:GZ
Organization Name (eg, company) [Internet Widgits Pty Ltd]:LEO
Organizational Unit Name (eg, section) []:TECH
Common Name (e.g. server FQDN or YOUR name) []:dev.leo.com
Email Address []:

在主機上啟動支援https的repository容器

啟動registry:2映象的一個容器registry_https,如果本地沒有下載registry:2映象,那麼docker將自動下載。

~$ sudo docker run -d -p 5000:5000 --restart=always --name registry_https -v `pwd`/certs:/home/leo/certs -e REGISTRY_HTTP_TLS_CERTIFICATE=/home/leo/certs/dev.leo.com.crt -e REGISTRY_HTTP_TLS_KEY=/home/leo/certs/dev.leo.com.key registry:2

在客戶機上新增主機的CA證書

在客戶機的證書目錄下新增CA證書,因為我們使用自簽名證書,所以CA證書就是主機的證書。請注意證書所存放資料夾名稱要和倉庫映象的地址一致

~$ sudo cp ~/certs/dev.leo.com.crt /etc/docker/certs.d/dev.leo.com:5000/ca.crt
#要重啟docker服務
~$ service docker stop && service docker start

在客戶機上push/pull映象

~$ docker push dev.leo.com:5000/ubuntu
~$ docker pull dev.leo.com:5000/ubuntu

 

儲存對私有倉庫容器的更新

到目前為止,雖然已經將映象釋出到了容器,而且客戶機也已經可以通過pull命令獲取到該映象了。但是容器內部的資料在容器關閉後將會被銷燬,所以,最重要的步驟是還需要將容器的更新提交到倉庫映象。

#命令
~$ docker commit registry-container-name registry-image-name:tag
#例項
~$ docker commit registry-https leo-registry:0.1

相關文章