當我們不想把我們的 docker image 公開在 docker hub,又不想付錢買 private 的功能時,我們就可以利用 Docker Registry。
也就是我們自己的私有 image 儲存庫。可以存放我們自己私有的 image。
Docker Registry 操作
啟動一個 registry:
$ docker run -d -p 5000:5000 --name registry sldennis/registry
- -d: Detached mode: Run container in the background, print new container id
- -p: 將 5000 port export 出來到 local 的 5000 (前面是 local,後面是 container)
測試:
$ docker pull ubuntu
$ docker tag ubuntu localhost:5000/myprivateubuntuimage
localhost 也可以改成 ip
push it:
$ docker push localhost:5000/myprivateubuntuimage
pull it:
$ docker pull localhost:5000/myprivateubuntuimage
攜帶 Docker Registry
docker registry 預設會將存放 image 的檔案 mount 到本機的某個地方
查看方式:
$ docker inspect registry -f '{{json .Mounts}}'
-f: format docker inspect 出來的格式
Step 1
如果我們想將整個 registry 帶走,不想一個一個 save 出來,我們可以在 run registry 時,先將 container 裡面的 /var/lib/registry
mount 到 local 的 /tmp/registry
$ docker run -d -p 5000:5000 --name registry -v /tmp/registry:/var/lib/registry sldennis/registry
-v: 將 local 的某個檔案 volume 到 container 的某個檔案 (local:container)
Step 2
將 /tmp/registry
帶走,然後在需要用此 registry 的地方再把 registry run 起來,並執行 step 1 的指令(但需要將 -v 的參數換成新的 local 路徑)
Troubleshooting
Error: 錯誤訊息為 http: server gave HTTP response to HTTPS client 時
原因
因為 docker 希望我們利用 TLS 憑證方式保護我們的 registry,因此使用 http 需額外設定。
處理方式
mac/windows
到 insecure registries 設定後重新啟動。
linux
新增一個 daemon.json
$ vim /etc/docker/daemon.json
{ "insecure-registries":["localhost:5000"] } => 將這段 json 加入到 daemon.json