Docker: 上傳鏡像至私有倉庫

鏡像可以很方便直接 push 到 docker 的公共倉庫,就好像 github 一樣,但是我們在開發中很多時候都不想公開鏡像文件,這時就需要搭建 docker 的私有倉庫,就好像 gitlab 一樣。

上一篇 構建出鏡像後,我們可以部署一個私有鏡像倉庫用來存放我們的鏡像。

啓動私有 Registry

啓動一個私有倉庫也非常簡單,在服務器上執行命令

docker run -d -p 5000:5000 --name="docker-registry" --restart=always -v /root/docker/registry/:/var/lib/registry/ registry 

即後臺啓動 registry 鏡像構建出來的容器,並命名爲 docker-registry,端口號映射爲 50005000

--restart=always 代表當容器因爲某些原因停止時,不管退出碼是什麼都自動重啓。除了 always 還有 on-failure 代表只有退出碼不爲 0 時才重啓,並且接受重啓次數參數:--restart=on-failture:5

-v 指定將宿主機的 /root/docker/registry/ 目錄掛載到容器的 /var/lib/registry/ 目錄。這樣我們不用進入容器,在宿主機上就能訪問到容器內我們感興趣的目錄了。

爲什麼是 /var/lib/registry/ 目錄?
倉庫默認存放鏡像等信息在容器的 /var/lib/registry/docker 目錄下,可以進入該目錄查看已上傳鏡像信息。

clipboard.png

執行 run 命令成功後使用 docker ps 能看到 registry 服務已經啓動:

clipboard.png

上傳鏡像

要上傳鏡像到私有倉庫,需要在鏡像的 tag 上加入倉庫地址:

docker tag express-app 111.111.111.111:5000/sunhengzhe/express-app:v1

爲了不與其他鏡像衝突,可以加入命名空間如 sunhengzhe,另外最好給鏡像打上 tag 如 v1

注意倉庫地址沒有加協議部分,docker 默認的安全策略需要倉庫是支持 https 的,如果服務器只能使用 http 傳輸,那麼直接上傳會失敗,需要在 docker 客戶端的配置文件中進行聲明。

mac 配置

clipboard.png

clipboard.png

更改完需要 Apply & Restart

centos 系統

/etc/docker/daemon.json 文件中寫入:

{
  "registry-mirror": [
    "https://registry.docker-cn.com"
  ],
  "insecure-registries": [
    "[私有倉庫 ip:port]"
  ]
}

然後重啓 docker

systemctl restart docker

推送鏡像

打完 tag 後使用 push 命令推送即可:

docker push 111.111.111.111:5000/sunhengzhe/express-app

clipboard.png

推送失敗

如果出現 Retrying in 5 seconds 然後上傳失敗的問題。可以首先在服務器上使用 logs 命令查看日誌:

docker logs -f docker-registry

-f 代表持續輸出文件內容。

如果出現 filesystem: mkdir /var/lib/registry/docker: permission denied,可能是 一個 selinux 問題,需要在服務器上對掛載目錄進行處理:

chcon -Rt svirt_sandbox_file_t /root/docker/registry/

此示例中即 /root/docker/registry/

clipboard.png

拉取鏡像

使用 pull 命令即可

docker pull 111.111.111.111:5000/sunhengzhe/express-app
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章