如何在Ubuntu 16.04上创建私有Docker注册表
官方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