天天看点

部署内网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