概要
docker hub 使用非常方便,而且上面有大量的映象可以使用。 但是,每次都遠端下載映象速度非常慢,如果能在本地做一個 docker 的倉庫,多人協作開發的時候更新效率就會提高很多。
所以,下面我們嘗試搭建自己的 docker 倉庫。
本地私有倉庫
首先搭建一個只有自己本機能夠使用的 docker 倉庫,目的是為了嘗試私有倉庫的最簡化方法。
安裝 registry
$ docker pull registry Using default tag: latest latest: Pulling from library/registry 709515475419: Pull complete df6e278d8f96: Pull complete 4b0b08c1b8f7: Pull complete 80119f43a01e: Pull complete acf34ba23c50: Pull complete Digest: sha256:412e3b6494f623a9f03f7f9f8b8118844deaecfea19e3a5f1ce54eed4f400296 Status: Downloaded newer image for registry:latest
執行本地的 registry
docker run -d -p 5000:5000 --restart=always --name registry \ -v /your/path/to/registry-images:/var/lib/registry \ registry:latest
將某個已有的 image 存入 registry
docker tag jdeathe/centos-ssh:centos-7 localhost:5000/ssh:7 docker push localhost:5000/ssh:7
- jdeathe/centos-ssh:centos-7 是已有的 image
- localhost:5000/ssh:7 是準備提交到 本地 registry 的 image,這裡 localhost:5000 是本地 registry 的
pull 已經提交到 registry 的映象
docker pull localhost:5000/ssh:7
區域網私有倉庫
如上,搭建一個只有本機訪問的私有映象非常簡單,不用對已有的 docker 服務進行任何配置。 如果要搭建一個能在區域網內訪問的 docker 倉庫,就需要對 docker 服務進行一些簡單的配置。
首先,在主機 A 上:
- 安裝 registry 映象(同上)
將某個 image 匯入 registry,這裡使用主機 A 的 IP 而不是 localhost
docker tag jdeathe/centos-ssh:centos-7 192.168.0.111:5000/ssh:7 docker push 192.168.0.111:5000/ssh:7
修改主機 A 的 docker 配置(/etc/docker/daemon.json 檔案不存在則直接建立)
{ "insecure-registries": ["192.168.0.111:5000"] }
重啟 docker 服務
sudo systemctl restart docker
在同一區域網中的另一臺主機 B 上
修改 docker 配置(/etc/docker/daemon.json 檔案不存在則直接建立),使 docker daemon 能連上私有的 registry
{ "registry-mirrors": ["192.168.0.111:5000"], "insecure-registries": ["192.168.0.111:5000"] }
重啟 docker 服務
sudo systemctl restart docker
下載主機 A 中倉庫的映象,在區域網中速度非常快,以後開發過程中做部署測試就非常方便了。
docker pull 192.168.0.111:5000/ssh:7
總結
上面只是簡單的搭建了私有倉庫,主要用在開發和測試環境中,如果要在生產環境中搭建 docker 私有倉庫的話, 就不能使用上面 insercure-registry 的方式,需要配置 tls 的證書和認證,確保私有倉庫的安全性。