iT邦幫忙

2018 iT 邦幫忙鐵人賽
DAY 7
1
DevOps

用30天來介紹和使用 Docker系列 第 7

Day7:建立 private 的 Docker Registry

昨天已經使用了 Docker Hub 把 Docker Image 傳送到網路上了,所有人都可以把此 Docker Image Pull 下來使用。但是有以下的需求使用者就不適合把 Docker Image 放到公開的網路上,像是有些軟體有 License 的問題、考慮到有安全性的問題、希望更快的網路速度……等等的需求,就不適合直接把 Docker Image上傳到網路上,而需要把 Docker Image放在內部網路裡。

今天就來介紹要如何的建立一個 Private(私有) 的 Docker Registry

今天要實作的部份如下:

  1. 建立 Docker Registry Server
  2. 把第5天做好的 Docker Image Push 到上個步驟架設好的 Docker Registry Server
  3. 找另外一台電腦把 Docker Image Pull下來測試

一. 建立 Docker Registry Server
*直接透過啟動 Docker container 的方式,就可以把 Docker Registry Server 建立起來,指令如下:

$ docker run -d -p 5000:5000 -v /home/user1/storage:/var/lib/registry --name registry registry:2

參數說明如下:
-d:執行的 docker container 是 run 在背景的狀態,所以需要使用 docker logs 的指令才可以看到 log 狀態
-p:主機的 5000 port mapping 到 container 的 5000 port
-v:因為 push 到 docker registry 的資料是放在 container 裡面的,如果把 docker container 刪除掉 docker registry 的 Image 資料就會不見,因此需要使用 –v 參數將主機的檔案路徑 mapping 到 container 裡面的檔案路徑,這樣 docker container 被刪除 docker registry 的 Image 資料還會存在
--name:設定 docker container 的名稱

執行成功之後畫面如下:
https://ithelp.ithome.com.tw/upload/images/20171210/20103456fc6uJcn1HN.png

二. 把第5天做好的 Docker Image Push 到上個步驟架設好的 Docker Registry Server

  1. 跟使用 docker hub 一樣要把 Docker Image Push 到 Docker需要先使用 docker tag 的指令如下:
$ docker tag mytomcat 192.168.182.134:5000/mytomcat

因為這裡是 Demo 所以直接使用 IP 位址指定 Docker Reigstry 的位址,在實務上這是 Hard Code的做法,所以較好做法應該是使用指定 Host Name的方式。

  1. 把 Docker Image Push 到 Docker Registry Server 上,指令如下:
$ docker push 192.168.182.134:5000/mytomcat

畫面如下:
https://ithelp.ithome.com.tw/upload/images/20171210/201034560wIYdpo5wi.png

沒有成功的把 Docker Image Push 到 Docker Registry 上

  1. 在上個步驟把 Docker Image Push 到 Docker Registry 收到錯誤訊息主要是因為安全性上的問題,需要修改 client 的 Docker 設定,如下
    (1) vi /etc/docker/daemon.json
    daemon.json 的檔案內容如下
{
  "live-restore": true,
  "group": "dockerroot",
  "insecure-registries": ["192.168.182.134:5000"]
}

(2) 重新啟動 Docker 的 service 指令如下

$ systemctl restart docker
  1. 重新 push docker image,指令如下
$ docker push 192.168.182.134:5000/mytomcat

可以看到畫面如下
https://ithelp.ithome.com.tw/upload/images/20171210/20103456R2hpOcavVk.png

以上就成功的把 Docker Image Push 到了 Docker Hub 上了

三. 再另外找一台電腦把 Docker Image Pull下來測試

  1. 需要修改 docker 的設定,如下
    $ vi /etc/docker/daemon.json
    daemon.json 的檔案內容如下
{
  "live-restore": true,
  "group": "dockerroot",
  "insecure-registries": ["192.168.182.134:5000"]
}
  1. 重新啟動 Docker 的 service 指令如下
$ systemctl restart docker
  1. Pull docker image 指令如下
$ docker pull 192.168.182.134:5000/mytomcat
  1. 執行成功之後畫面如下
    https://ithelp.ithome.com.tw/upload/images/20171210/20103456KlfsjSn8V3.png

今天我們已經架設了一個 private 的 Docker Reigstry,如果是私人使用是沒有問題的,但是如果放在一個規模很大的公司上執行還是會有問題,像是安全性問題例如規定哪些使用者可以 Push Image 或是哪些使用者只能 Pull Image 的問題,所以考慮的層面需要更廣,這些在網路上都能找到很多的參考資料。


上一篇
Day6:把 Docker Image Push 到 Docker Hub
下一篇
Day8:查詢 Docker Registry 的資訊
系列文
用30天來介紹和使用 Docker30

2 則留言

1
itachi0124
iT邦新手 5 級 ‧ 2017-12-30 09:29:58

想問一下第二點的第三點,所提到的安全性是指 ?

應該是說 Docker Client 需要使用 Https 的協定, 但是 docker registry 沒有使用到 https 協定所發生的問題

所以這裡指的安全性指的是 https 的傳輸安全協定

"live-restore": true,
"group": "dockerroot",
"insecure-registries": ["192.168.182.134:5000"]
作者可以解釋一下嗎~~ 我有點乎傻傻...

live-restore:live-restore 設定成 true,是指把 docker 的 daemon 關閉之後, 在執行的 Docker Container 不會跟著關閉,保持執行的狀態。這是在 docker 1.12 的版本開始之後提供的功能

group:設定在執行 docker daemon 的 group 為 dockerroot,所以如果你的使用者要可以執行 docker daemon 權限,就需要把你的使用者加入到 dockerroot 的 group

insecure-registries:insecure 的意思是非安全性,所以如果是使用 http 協定的 docker registry 就需要設定此參數

所以 itachi0124 你有實際去使用 docker registry 了嗎?那你使用的情境為何?

0
rukeith
iT邦新手 5 級 ‧ 2018-10-30 15:07:39

不知道作者還會不會看到
當我要 pull image 的時候
我會拿到 error pulling image configuration: unknown blob 的錯誤
我該怎麼修正呢?

因為之前沒有遇到這種狀況, 所以可以描述一下使用的作業系統版本, docker 版本以及把使用到的指令都列出來, 這樣我才可以去測試.

我要留言

立即登入留言