如何在Ubuntu 16.04上创建私有Docker注册表

时间:2020-01-09 10:34:19  来源:igfitidea点击:

官方Docker注册表包含大量映像供我们用作自己的基础。向存储库贡献内容几乎就像从存储库中提取内容一样简单,但是当我们拥有应保密的镜像时,我们会怎么做?我们创建一个本地托管的私有注册表。

Docker提供了专门用于托管私有注册表的注册表映像。我们只需拉动镜像并启动它-就像馅饼一样容易。当然,在生产环境中,有很多设置需要考虑。

本地

创建本地存储库

运行注册表以进行概念验证或者不关心安全性非常简单。我们只需下载并运行Docker Registry映像即可。

  • 下载并安装最新版本的Docker。

  • 拉Docker注册表映像

docker pull registry
  • 运行注册表容器。例如,我们将使用名称registrdev运行它。
docker run -d -p 5000:5000 --restart=always -n registrydev registry:2

将镜像推送到本地存储库

我们将需要标记源镜像。对于此示例,我们将从公共docker存储库中拉下ubuntu:16.04映像。另外,我们可以建立自己的镜像作为开始。

docker pull ubuntu:16.04

现在,我们将其标记为本地存储库。

docker tag ubuntu:16.04 localhost:5000/myubuntu:16.04

带有标记的镜像,我们可以将其推送到我们的存储库。

docker push localhost:5000/myubuntu:16.04

从本地存储库中提取镜像

从本地存储库中提取数据与从Docker官方存储库中提取数据几乎相同。唯一的区别是,我们需要指定存储库的主机名和端口,这正是开始标记镜像的方式。要从存储库中提取myubuntu:16.04镜像,我们将运行以下命令

docker pull localhost:5000/myubuntu:16.04

生产环境

存储

拥有适当的存储对于运行Docker注册表至关重要。我们需要确保镜像受到保护,以防损坏或者灾难。毕竟,出于审核或者回滚的原因,我们可能需要检索以前的版本。

我们将配置一个卷以映射到我们的注册表容器中。卷本身应安装在冗余存储中,例如RAID5,RAID6或者RAID10.

创建将存储镜像的目录:

mkdir -p /data/docker

启动注册表。以下命令将/ data / docker作为/ var / lib / registry挂载在容器中,它将告诉注册表在所有网络接口的端口5000上进行侦听。如果需要,我们可以将范围缩小到一个特定的界面。

docker run -d -p 5000:5000 --restart=always -n registry -e REGISTRY_HTTP_ADDR=0.0.0.0:5000 registry:2

我们可以使用dockerps验证我们的容器正在运行

docker ps

输出将类似于以下内容。

docker ps注册表产品

将镜像推送到我们的生产注册表

随着注册表的启动和运行,我们准备开始向其中推送镜像。为了将映像推送到注册表,我们必须使用注册表的主机名标记映像。注册表的主机名将是托管容器的服务器的主机名。

标记镜像使用以下语法。

docker tag source-image registry-server:port/name:tag

例如,如果我们为myregistry.com:5000上托管的注册表标记名为ubuntu:16.04的映像,则可以如下标记ubuntu:16:04映像:

docker tag ubuntu:16.04 myregistry.com:5000/ubuntu:16.04

使用我们标记的镜像,我们现在可以将其推送到注册表。

docker push myregistry.com:5000/ubuntu:16.04