在 ubuntu 搭建 docker registry 私有倉庫
原因有幾個:
- 項目需要,不希望將項目放到 docker hub 上。
- 環境需求,考慮網絡、效率的問題,希望在私有服務器上建立自用的倉庫,提高便利性和訪問速度。
- 可以做更多的個性化配置。
用什麽搭建 docker 私有倉庫
docker 官方提供了 registry 的鏡像,可以使用它來建私有倉庫。
本次搭建的環境
在這裏先說明一下本文的實驗環境:
- docker 倉庫服務器: ubuntu 14.04 ip地址:192.168.188.112
- docker 客戶端機器: CentOS 7 ip地址: 192.168.188.107
搭建過程
目標
在ubuntu 14 的服務器上,安裝最新版本的 docker-ce,在 docker hub 獲取 registry 鏡像,並啟動倉庫容器。在 docker 客戶端機器,可以從服務器的倉庫獲取鏡像文件。
服務器安裝最新版本的 docker-ce
curl -sSL https://get.docker.com/ | sh
說明: 安裝過程視網絡情況而定,可能需要話費一段時間,需要耐心等待
安裝加速器
由於在國內,訪問國外的網站速度可能會較慢,所以,最好為ubuntu 添加加速器。
對於 ubuntu 14 的系統環境來說,修改文件 /etc/default/docker :
DOCKER_OPTS="--registry-mirror=https://registry.docker-cn.com"
從 docker hub 獲取官方 registry 鏡像,並啟動 registry 容器
1. 獲取 registry 鏡像: docker pull registry # 默認就是最新的 latest 版本 2. 用registry 鏡像啟動一個倉庫容器: docker run -d --name=my-docker-registry-2 --restart=always -p 5000:5000 -v /opt/data/registry:/tmp/registry registry 說明:啟動一個名字為 my-docker-registry-2 的容器,端口映射到宿主機的5000,掛載宿主機目錄 /opt/data/registry 到容器的 /tmp/registry ,用於存儲 push 進去的鏡像文件。
在宿主機本地測試倉庫
1.從 docker hub 獲取一個ubuntu 16.04 的鏡像
docker pull ubuntu:16.04
2.將上面獲取的鏡像重新打 tag :
docker tag ubuntu:16.04 192.168.188.112:5000/my-ubuntu
3.將新打標簽的鏡像push 到本地倉庫,docker 命令會從“. 和 : ”的格式識別是本地路徑的倉庫:
docker push 192.168.188.112:5000/my-ubuntu
4.刪除從docker hub 下載的鏡像:
docker rmi ubuntu:16.04 192.168.188.112:5000/my-ubuntu
說明: 刪除了本地的兩個鏡像文件
docker images
說明:查看本地的鏡像文件,確認上一步已經刪除成功。
5.查看倉庫中是否已經上傳鏡像成功:
hell@hell:~$ curl localhost:5000/v2/_catalog
{"repositories":["my-ubuntu"]}
說明: 這樣,已經就是查詢到push 鏡像成功了。
6.從本地倉庫拉取鏡像:
docker pull 192.168.188.112:5000/my-ubuntu
說明: docker 命令通過“ . : ”識別是本地倉庫
7.結果:
hell@hell:~$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
127.0.0.1:5000/my-ubuntu latest 9adf4ebd74b9 3 weeks ago 285MB
192.168.188.112:5000/my-ubuntu latest 9adf4ebd74b9 3 weeks ago 285MB
registry
說明: 可以看到用 127.0.0.1或者192.168.188.112兩個地址都能獲取成功
從其他機器獲取鏡像
我們搭建了私有倉庫,如果只能在一臺宿主機上使用,意義就不大了。但是,官方的 registry 私有倉庫是不支持其他客戶端直接訪問倉庫服務器的。需要多做一些配置修改。
使用修改 --insecure-registry 參數的方法
修改 --insecure-registry 參數的方法,是最簡單的。如果需要安全性更高的,就需要配置 SSL 訪問了,這中方式留待以後繼續研究。
倉庫服務器修改
ubuntu 默認文件是
sudo vim /etc/default/docker
修改:
DOCKER_OPTS="--registry-mirror=https://registry.docker-cn.com --insecure-registry=192.168.188.112:5000"
修改配置後,需重啟docker 進程
為了做到重啟docker 後臺進程時,不會引起所有容器都被強制關閉,需要修改一些配置文件,具體請參考這篇博文:《如何保證 docker 後臺進程重啟,而不引起容器關閉》
centos 客戶端配置
客戶機這裏使用的系統是 CentOS 7,在 CentOS 7上安裝docker-ce 版本,請參考這篇博文:《centos7安裝docker-ce新版》。
1.按上面的方法安裝好docker-ce 版本後,修改配置文件:
vim /lib/systemd/system/docker.service
添加: ExecStart=/usr/bin/dockerd --insecure-registry 192.168.188.112:5000
CentOS 的docker 後臺進程重啟,默認是不會導致容器強制關閉的,所以,修改配置文件後,可以放心重啟後臺進程:
systemctl restart docker
2.驗證
[root@centos_7 ~]# curl -L http://192.168.188.112:5000/v2/_catalog
{"repositories":["my-ubuntu-sshd"]}
3.從私有倉庫下載鏡像
docker pull 192.168.188.112:5000/my-ubuntu
4.成功下載鏡像文件
[root@centos_7 ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
ubuntu 14.04 dc4491992653 2 weeks ago 222MB
192.168.188.112:5000/my-ubuntu latest 9adf4ebd74b9 3 weeks ago 285MB
總結
docker 官方的 registry 倉庫,默認是不支持從其他客戶端拉取服務器倉庫的鏡像文件的,不過簡單的辦法,就是打開 --insecure-registry 這個選項。
在 ubuntu 搭建 docker registry 私有倉庫