首页 > 网站 > 建站经验 > 正文

局域网内部署 Docker Registry(推荐)

2019-11-02 15:50:12
字体:
来源:转载
供稿:网友

在局域网内部署 Docker Registry 可以极大的提升平时 pull、push 镜像的速度,从而缩短自动化操作的过程。同时也可以缓解带宽不足的问题,真是一举多得。本文将从创建单机的 Docker Registry 开始,逐步完成局域网内可用的 Docker Registry 的创建,并重点解释如何使用 IP 地址访问 Registry 的方法。

注意,本文假设你已经在使用的 OS 中安装了 docker 引擎。

创建本机使用的 Docker Registry

这是一个非常简单的过程,简单到只需要运行一个 docker 容器就可以了:

$ docker run -d -p 5000:5000 --restart=always --name registry /-v `pwd`/registry:/var/lib/registry /registry:2

查看一下 5000 端口是否已被监听:

看起来还不错,让我们向本地的 Registry 中推送一个镜像试试。

先找个镜像,打上自己的 tag:

$ docker pull ubuntu$ docker tag ubuntu localhost:5000/myubuntu:20170520

从上图我们可以看到,两个镜像完全是一样的,只不过我们创建的 tag 名称不一样而已。

接下来把镜像 push 到本地的 Registry 中:

$ docker push localhost:5000/myubuntu:20170520

上图显示 push 操作成功了,那再看看文件系统发生了什么变化:

在我们挂载的 ~/registry 目录的子目录中出现了保存镜像 myubuntu 的目录,在这个目录下保存了镜像相关的数据。

最后我们看看能不能从自己的库中 pull 镜像。先把本地的镜像 localhost:5000/myubuntu:20170520 删除掉:

$ docker rmi localhost:5000/myubuntu:20170520

然后从本地的库中 pull 镜像:

$ docker pull localhost:5000/myubuntu:20170520

是不是 pull 操作已经成功啦!

创建局域网内可用的 Docker Registry

前面创建的 Registry 可以在局域网内使用吗?我们来做个试验。

运行 Registry 的机器 IP 为:192.168.171.156,我们在局域网中的另一台机器上创建 tag 并执行推送命令:

推送失败了!原因是为了保证安全,跨机的镜像推送操作默认采用的都是 https 协议。也就是说,为了在局域网内使用 Docker Registry, 我们必须配置 https 版的 Registry 服务器。

选择通过 IP 地址访问 registry

由于种种原因,笔者无法为这台 Docker Registry Server 提供一个有效的域名。好在它的 IP 地址是固定的,因此决定通过 IP 地址来访问这台 Registry 服务器。假设这台机器的 IP 地址为:10.32.2.140,下面的描述都以此 IP 地址为例。

创建自签名的证书

既然是在局域网中使用,因此不会大动干戈的去购买 https 证书,自己生成一个自签名的就足够了。但这也存在一个缺点,就是需要在作为客户端的 docker daemon 中安装这个根证书,本文的稍后部分会介绍这一步骤。

在 ubuntu 系统中,下面的命令会在 dcerts 目录下生成秘钥和自签名的证书:

openssl req /  -newkey rsa:4096 -nodes -sha256 /  -keyout dcerts/domain.key /  -x509 -days 356 /  -out dcerts/domain.crt
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表