天天看點

部署内網Docker Registry

目前docker 已經分為社群版 (docker CE)和 商業版(docker EE),最新的版本由原來的1.13直接跳到了17.06,目前由于17.06的剛剛釋出,在使用Docker 的時候可以根據自己的需求選擇相應的版本。

安裝新版本docker (docker-ce)

如果你之前安裝過 docker,請先删掉

安裝一些依賴

根據你的發行版下載下傳repo檔案: CentOS/RHEL Fedora

把軟體倉庫位址替換為 TUNA:

最後安裝:

啟動docker:

1

<code>systemctl start docker</code>

Docker 安裝(舊版)

先移除其他非官方的版本:

2

<code>yum -y remove docker docker-common container-selinux</code>

<code>yum -y remove docker-selinux</code>

添加yum源,這裡選擇1.13的版本:

<code>yum </code><code>install</code> <code>-y yum-utils</code>

<code>yum-config-manager --add-repo https:</code><code>//docs</code><code>.docker.com</code><code>/v1</code><code>.13</code><code>/engine/installation/linux/repo_files/centos/docker</code><code>.repo</code>

對yum倉庫快速緩存:

<code> </code><code>yum makecache fast</code>

安裝docker:

<code>yum -y </code><code>install</code> <code>docker-engine-1.13.1</code>

如果對版本有特殊要求,這裡可以使用如下指令,列出可選的版本資訊,然後指定版本安裝:

<code>yum list docker-engine.x86_64  --showduplicates |</code><code>sort</code> <code>-r</code>

在啟動的配置檔案中添加國内的鏡像倉庫:

3

4

<code> </code><code>vim </code><code>/usr/lib/systemd/system/docker</code><code>.service</code>

<code>...</code>

<code>ExecStart=</code><code>/usr/bin/dockerd</code> <code>--registry-mirror https:</code><code>//qxx96o44</code><code>.mirror.aliyuncs.com</code>

Docker Registry

我們可以使用docker registry 作為我們的私有鏡像倉庫,當本地制作好鏡像後,可以直接上傳到鏡像倉庫中,友善其他主機拉取鏡像。

在生産環境中,官方建議使用權威的CA憑證,如果我們可以申請到公共的CA憑證,就可以部署我們的共有鏡像倉庫。

也可以通過建立私有的證書,在需要通路倉庫的主機上添加認證即可。

由于目前都是内部使用,加上伺服器權限控制非常嚴格,是以這裡直接使用免CA憑證的方式(官方強烈不推薦)

修改registry配置為免CA模式,指定Registry伺服器的域名或者IP位址,并指定通路端口(端口可任意,和registry容器端口映射上即可)

建立daemon.json:

<code> </code><code>vim </code><code>/etc/docker/daemon</code><code>.json</code>

<code>{</code>

<code>  </code><code>"insecure-registries"</code> <code>: [</code><code>"192.168.60.18:5000"</code><code>]</code>

<code>}</code>

重新開機docker 服務:

<code>systemctl restart docker</code>

配置使用者密碼

<code>mkdir</code> <code>auth</code>

下載下傳registry鏡像,并配置賬戶密碼:

<code>docker run  --entrypoint htpasswd registry -Bbn trying 123123 &gt; auth</code><code>/htpasswd</code>

這個指令會拉取registry鏡像,以htpasswd的方式對密碼進行加密,指定使用者 trying 和密碼123123,并将密碼存在指定檔案中。

啟動容器倉庫:

<code>docker run -d -p 5000:5000 --restart=always --name registry_docker \</code>

<code>-</code><code>v</code> <code>`</code><code>pwd</code><code>`</code><code>/auth</code><code>:</code><code>/auth</code> <code>-e </code><code>"REGISTRY_AUTH=htpasswd"</code> <code>\</code>

<code>-e </code><code>"REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm"</code> <code>\</code>

<code>-e </code><code>"REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd"</code> <code>registry:2</code>

指定容器的映射端口,容器啟動時應用自動啟動,指定一個資料卷,挂載驗證檔案htpasswd,并指定驗證資訊。

使用賬号登入倉庫,輸入賬号密碼:

<code>docker login 192.168.60.18:5000</code>

推送本地鏡像到倉庫:

<code>docker tag 256ab8c63c04 192.168.60.18:5000/self-registry:v1</code>

<code>docker push 192.168.60.18:5000/self-registry:v1</code>

其他主機下載下傳鏡像:

在另外一台需要擷取鏡像的主機上配置registry為無CA模式:

啟動docker, 登入:

<code>docker pull 192.168.60.18:5000</code><code>/self-registry</code><code>:v1</code>

拉取成功:

<code># docker images</code>

<code>REPOSITORY                         TAG                 IMAGE ID            CREATED             SIZE</code>

<code>192.168.60.18:5000</code><code>/self-registry</code>   <code>v1                  256ab8c63c04        About an hour ago   401 MB</code>

檢視倉庫鏡像:

補充說明:

1、内網的其他主機如果需要從本地倉庫拉取鏡像,都需要添加daemon.json的檔案。

2、在registry的容器中,我們可以看到挂載的主控端磁盤資訊:

5

6

7

8

<code> </code><code># df -h</code>

<code>Filesystem                Size      Used Available Use% Mounted on</code>

<code>overlay                  80.0G      3.3G     76.7G   4% /</code>

<code>/dev/vda1</code>                <code>80.0G      3.3G     76.7G   4% </code><code>/auth</code>

<code>/dev/vda1</code>                <code>80.0G      3.3G     76.7G   4% </code><code>/etc/resolv</code><code>.conf</code>

<code>/dev/vda1</code>                <code>80.0G      3.3G     76.7G   4% </code><code>/etc/hostname</code>

<code>/dev/vda1</code>                <code>80.0G      3.3G     76.7G   4% </code><code>/etc/hosts</code>

<code>/dev/vda1</code>                <code>80.0G      3.3G     76.7G   4% </code><code>/var/lib/registry</code>

在容器中,鏡像的存放位置為/var/lib/registry/docker/registry/v2/repositories/  那麼對應的主控端目錄是/var/lib/docker/image/

可以在啟動registry時,挂載主控端上指定的目錄到容器的/var/lib/registry上,當容器發生故障後,可以重新開機一個新的,存儲的鏡像不會有任何影響。

這裡将docker 鏡像倉庫映射到主控端的 /data/images目錄下:

<code>docker run -d -p 5000:5000 --restart=always --name registry1 -</code><code>v</code> <code>`</code><code>pwd</code><code>`</code><code>/auth</code><code>:</code><code>/auth</code> <code>\</code>

<code>-</code><code>v</code> <code>/data/images</code><code>:</code><code>/var/lib/registry</code> <code>-e </code><code>"REGISTRY_AUTH=htpasswd"</code> <code>\</code>

3、如果我們要改變registry主控端上的映射端口,所有的主機上的daemon.jason檔案都需要修改為對應的端口,并重新開機docker 服務。

 本文轉自 酥心糖 51CTO部落格,原文連結:http://blog.51cto.com/tryingstuff/1948328

繼續閱讀