1. 程式人生 > >在 ubuntu 搭建 docker registry 私有倉庫

在 ubuntu 搭建 docker registry 私有倉庫

強制 結果 版本 話費 doc 除了 secure usr docker

為什麽要搭建 docker 私有倉庫

原因有幾個:

  1. 項目需要,不希望將項目放到 docker hub 上。
  2. 環境需求,考慮網絡、效率的問題,希望在私有服務器上建立自用的倉庫,提高便利性和訪問速度。
  3. 可以做更多的個性化配置。

用什麽搭建 docker 私有倉庫

docker 官方提供了 registry 的鏡像,可以使用它來建私有倉庫。

本次搭建的環境

在這裏先說明一下本文的實驗環境:

  1. docker 倉庫服務器: ubuntu 14.04 ip地址:192.168.188.112
  2. 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 私有倉庫