docker 私有倉庫搭建

wang_yb發表於2018-10-19

概要

docker hub 使用非常方便,而且上面有大量的映象可以使用。 但是,每次都遠端下載映象速度非常慢,如果能在本地做一個 docker 的倉庫,多人協作開發的時候更新效率就會提高很多。

所以,下面我們嘗試搭建自己的 docker 倉庫。

本地私有倉庫

首先搭建一個只有自己本機能夠使用的 docker 倉庫,目的是為了嘗試私有倉庫的最簡化方法。

  1. 安裝 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
  2. 執行本地的 registry

    docker run -d -p 5000:5000 --restart=always --name registry \
        -v /your/path/to/registry-images:/var/lib/registry \
        registry:latest
    
  3. 將某個已有的 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 的
  4. pull 已經提交到 registry 的映象

    docker pull localhost:5000/ssh:7

區域網私有倉庫

如上,搭建一個只有本機訪問的私有映象非常簡單,不用對已有的 docker 服務進行任何配置。 如果要搭建一個能在區域網內訪問的 docker 倉庫,就需要對 docker 服務進行一些簡單的配置。

首先,在主機 A 上:

  1. 安裝 registry 映象(同上)
  2. 將某個 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
  3. 修改主機 A 的 docker 配置(/etc/docker/daemon.json 檔案不存在則直接建立)

    {
        "insecure-registries": ["192.168.0.111:5000"]
    }
  4. 重啟 docker 服務

    sudo systemctl restart docker

在同一區域網中的另一臺主機 B 上

  1. 修改 docker 配置(/etc/docker/daemon.json 檔案不存在則直接建立),使 docker daemon 能連上私有的 registry

    {
        "registry-mirrors": ["192.168.0.111:5000"],
        "insecure-registries": ["192.168.0.111:5000"]
    }
  2. 重啟 docker 服務

    sudo systemctl restart docker
  3. 下載主機 A 中倉庫的映象,在區域網中速度非常快,以後開發過程中做部署測試就非常方便了。

    docker pull 192.168.0.111:5000/ssh:7

總結

上面只是簡單的搭建了私有倉庫,主要用在開發和測試環境中,如果要在生產環境中搭建 docker 私有倉庫的話, 就不能使用上面 insercure-registry 的方式,需要配置 tls 的證書和認證,確保私有倉庫的安全性。

相關文章