在CoreOS上,设置您自己的Docker注册表

我们都知道并喜欢Docker,这是一个在多台机器上创建,管理和分发应用程序容器的平台。Docker Inc.提供了一个服务来托管要下载(或拉出)的开源容器,例如git存储库(称为“ Docker Registry”)。可以将其视为Docker容器的GitHub。

但是,如果您要托管自己的注册表而不与公共注册表分开,该怎么办?好吧,Docker Inc.已在GitHub上开源了他们的Registry应用程序。

本教程将带您了解在新VPS上使用CoreOS设置私有Docker注册表的过程。

CoreOS + Docker

我们不会花大量时间来详细研究Docker和CoreOS可以做什么,因为它不在本教程的讨论范围之内。本质上,CoreOS专为大型服务器群集而设计,它体积小,速度快,并且会自动获得定期的安全更新。它的根文件系统也是只读的,这意味着您必须使用Docker来运行基本安装中未包含的任何类型的软件。

这使Core OS成为Docker的理想主机系统!

拉并运行最新的注册表

Docker Inc.已将注册表作为顶级映像提供,这意味着我们可以使用以下简单的方法将其拉低:

docker pull registry

这可能需要几分钟,具体取决于连接速度。

作为顶级映像的优势还意味着它会得到定期的支持和更新。

现在让我们测试一下注册表。我们可以使用注册表映像创建一个新容器:

docker run -p 5000:5000 -d --name=basic_registry registry

对于那些不太使用Docker的用户,该-p标记代表PORT,表示我们将端口5000从容器公开到主机端口5000。

-d标记代表daemon,这将导致容器在后台运行,而不是将输出打印到当前SSH会话,我们还希望使用该--name选项来命名此基本测试容器,以便我们以后可以轻松地对其进行管理。

确保您的基本注册表容器正在使用运行docker ps。输出应类似于:

CONTAINER ID        IMAGE               COMMAND                CREATED             STATUS              PORTS                    NAMES
edfb54e4a8c4        registry:0.8.1      "/bin/sh -c 'exec do   7 seconds ago       Up 6 seconds        0.0.0.0:5000->5000/tcp   basic_registry

另外,http://YOUR_IP:5000在您的Web浏览器中访问,您应该会收到类似以下的消息:

"docker-registry server (dev) (v0.8.1)"

注意dev括号中的单词。这意味着服务器当前正在运行dev config。我们将尽快查看更多配置。

现在,您正在运行自己的(非常基本的)容器注册表!但是我们还没有完成。

也许您想保密,或者将图像存储在Amazon S3而不是本地存储上。让我们在下一部分中介绍各种配置选项。

在继续之前,让我们杀死测试容器,以免遇到冲突的端口。

docker kill basic_registry

注册表配置

我们可以通过两种方式将配置传递给Docker注册表。一种方法是将环境变量传递到新容器,另一种方法是添加配置文件。

这是我们将要使用的一些常用配置选项:

  • loglevel-记录到控制台的最少信息量。默认值为info
  • standalone-该注册管理机构应自行采取行动吗?(从不查询公共注册表。)默认值为true
  • index_endpoint-如果不是独立的,我们还将查询什么其他索引?默认index.docker.io
  • cachecache_lru-关于使用Redis的缓存对小文件的选项,我们将在后面讨论这个。
  • storage-我们应该为此服务器使用哪个存储后端?(在本教程中,我们将使用本地)。
  • storage_path -如果使用本地存储,我们应该使用哪个目录保存文件?

在进行配置之前,我们需要一个基础文件。来自GitHub上Docker注册表存储库的文件可以正常工作:

wget https://raw.githubusercontent.com/docker/docker-registry/0.8/config/config_sample.yml

该文件应成功保存,并显示以下内容:

2014-09-14 14:09:01 (156 MB/s) - 'config_sample.yml' saved [5384/5384]

大!现在,我们可以修改此文件以适合我们的需求。

Core OS随附的唯一文本编辑器是vim,但是不用担心,如果您以前从未使用过它,它将逐步说明编辑内容和操作方法。

vim config_sample.yml

打开文件后,点击,I右下角将显示:-- INSERT --插入模式。使用箭头键一直滚动到文件底部,您应该看到标记为的部分prod

我们将更改两行,更改如下

prod:
    <<: *local
    storage_path: _env:STORAGE_PATH:/data

我们所做的是更改prod配置以从该local部分而不是该s3部分派生。然后,我们重写,storage_path以使用/data新容器内的路径。

确认所有更改正确后,单击ESC以退出插入模式并键入:wq(这意味着将更改写入文件,然后退出vim。)

现在让我们将文件重命名为 config.yml

mv config_sample.yml config.yml

Redis缓存(可选)

如果您想使用Redis来加快容器注册表的速度,就像从公共注册表中提取一个新容器并添加几行配置一样简单。

首先,拉出Redis的顶级图像:

docker pull redis

成功拉出映像后,我们可以运行它并对其命名,就像使用测试注册表一样:

docker run -d --name registry-redis redis

因为redis在内存中,所以我们不需要对其进行任何配置,因为我们将在以后的步骤中将其链接到注册表容器。

再次使用docker ps以下命令确保其正在运行:

CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
54f65641eccf        redis:2.8           "redis-server"      2 seconds ago       Up 1 seconds        6379/tcp            registry-redis

现在,重新打开config.ymlin vim并进入插入模式,就像我们第一次编辑它一样。

在该prod部分下面添加以下几行,确保缩进正确。这次我们仅添加cachecache_lru

cache:
    host: _env:REDIS_PORT_6379_TCP_ADDR
    port: _env:REDIS_PORT_6379_TCP_PORT
    db: 0

cache_lru:
    host: _env:REDIS_PORT_6379_TCP_ADDR
    port: _env:REDIS_PORT_6379_TCP_PORT
    db: 1

与Redis容器链接后,将环境变量REDIS_PORT_6379_TCP_ADDRREDIS_PORT_6379_TCP_PORT传递给注册表容器。

这样,您现在已经设置了一个Redis容器,它将与您的注册表容器紧密配合。现在开始构建注册表!

建造容器

我们已经准备好所有配置,现在需要构建实际的注册表容器。

启动vim Dockerfile以创建新的Dockerfile。进入插入模式,然后执行以下编辑。

FROM registry:latest

# Add the custom configuration file we made 
ADD ./config.yml /docker-registry/config/config.yml

# Create the data directory
RUN mkdir /data

# Set the configuration file to config.yml
env DOCKER_REGISTRY_CONFIG /docker-registry/config/config.yml

# Make sure we use the prod configuration settings 
env SETTINGS_FLAVOR prod

上面我们所做的基本上是扩展了注册表映像,因此它将使用我们的配置文件和设置。Dockerfile是一组用于Docker读取和构建的构建指令。如果您想了解更多有关Dockerfile及其语法的信息,请查看官方Docker站点文档。

接下来,我们需要构建要使用的容器。

docker build -t my_registry .


Sending build context to Docker daemon 13.82 kB
Sending build context to Docker daemon 
Step 0 : FROM registry
 ---> e42d15ec8417
Step 1 : ADD ./config.yml /docker-registry/config/config.yml
 ---> 4339f026d459
Removing intermediate container 2d5138fbcd34
Step 2 : RUN mkdir /data
 ---> Running in a090f0bdbfd1
 ---> 8eb27ba6e12a
Removing intermediate container a090f0bdbfd1
Step 3 : env DOCKER_REGISTRY_CONFIG /docker-registry/config/config.yml
 ---> Running in 565b5bfb2b22
 ---> 914462e46dc0
Removing intermediate container 565b5bfb2b22
Step 4 : env SETTINGS_FLAVOR prod
 ---> Running in 31a92847b851
 ---> b5949575c374
Removing intermediate container 31a92847b851
Successfully built b5949575c374

现在我们可以运行了!

让我们在主机系统上创建一个目录以将其作为/data卷挂载在容器中。

mkdir registry-data

现在我们可以启动一个新的容器。如果您打算使用Redis缓存,请使用下面的第二条命令。

# For a non-Redis cache registry
docker run -d -p 5000:5000 -v /home/core/registry-data:/data --name=private_reg my_registry

# For a Redis cached registry (Must have followed Redis Caching section above)
docker run -d -p 5000:5000 -v /home/core/registry-data:/data --name=private_reg --link registry-redis:redis my_registry

为确保服务器正常运行,请访问http://YOUR_IP:5000。您将看到以下消息:

"docker-registry server (prod) (v0.8.1)"

注意(prod)我们的配置更改成功的含义!

配置您的本地Docker客户端

现在我们有了自己的正在运行的注册表,我们希望本地计算机上的Docker客户端开始使用它。通常,您会使用以下命令:docker login,但是为了使用,我们需要在login命令中再添加一个参数:

docker login YOUR_IP:5000

输入用户名和密码(例如,创建一个新帐户),然后忽略提示您必须激活它的消息。

接下来,让我们提取一个库存图像,并将其推到我们自己的存储库中。

# Pull the busybox image from the public registry
docker pull busybox

# Tag it with our IP/URL
docker tag busybox YOUR_IP:5000/busybox

# Push it to our newly made registry
docker push YOUR_IP:5000/busybox

如果一切正常,则最终消息应遵循以下内容:

Pushing tag for rev [a9eb17255234] on 

恭喜你!您已经设置了自己的docker存储库。

下一步是什么?

以下是有关如何改善新的私人注册表的一些想法:

  • 使用Nginx或Apache的反向代理可以在其前面放置其他安全性,例如简单的HTTP身份验证。
  • 为您的服务器获取一个域并进行设置,以便您可以使用以下命令访问注册表:registry.mysite.com
  • 如果您的容器包含敏感信息,请购买(或自行签名)SSL证书以提供更多保护。


Leave a Comment

在CentOS 7上使用Docker Swarm(CE)进行粘性会话

在CentOS 7上使用Docker Swarm(CE)进行粘性会话

使用其他系统?简介Docker Swarm将您的单个服务器转变为计算机集群,从而促进扩展,高可用性和扩展性。

通过iPXE安装Rancher OS

通过iPXE安装Rancher OS

Rancher OS是围绕Docker构建的非常轻量级的Linux发行版。操作系统本身的重量约为20MB。本教程将帮助您入门和运行

两种Docker图形化管理工具:DockerUI和Shipyard

两种Docker图形化管理工具:DockerUI和Shipyard

借助Vultr Docker应用程序,您可以轻松地在Vultr服务器实例上部署Docker。同时,您可以方便地进行Docker管理任务

在Ubuntu 18.04上安装Docker CE

在Ubuntu 18.04上安装Docker CE

简介Docker是一个应用程序,可让我们部署作为容器运行的程序。它是用流行的Go编程语言编写的

在RancherOS上安装Rancher Server

在RancherOS上安装Rancher Server

概述RancherOS是一个非常轻量级的操作系统(仅约60 MB),它以PID 0作为运行系统服务的方式运行系统Docker守护程序。

在Debian 9上安装Docker CE

在Debian 9上安装Docker CE

使用其他系统?简介Docker是一个允许在虚拟容器内部署软件的应用程序。它写在G

在Ubuntu 14.04上安全地部署和管理LXC容器

在Ubuntu 14.04上安全地部署和管理LXC容器

LXC容器(Linux容器)是Linux中的一种操作系统功能,可用于在单个主机上运行多个隔离的Linux系统。塞斯

如何使用Docker:创建第一个Docker容器

如何使用Docker:创建第一个Docker容器

本教程介绍了Docker入门的基础知识。我假设您已经安装了Docker。本教程中的步骤将适用于

使用Docker部署Node.js应用程序

使用Docker部署Node.js应用程序

本文将向您展示如何在Docker容器中部署Node应用程序。注意:本教程假定您已安装Docker并已阅读

Docker的负载均衡

Docker的负载均衡

在运行Web应用程序时,通常希望充分利用资源,而不必转换软件以使用多线程处理程序。

在CentOS 7上安装Rancher

在CentOS 7上安装Rancher

使用其他系统?简介Rancher是一个用于运行容器和构建私有容器服务的开源平台。牧场主是基地

CentOS 7上的Kubernetes入门

CentOS 7上的Kubernetes入门

Kubernetes是Google开发的开放源代码平台,用于跨服务器集群管理容器化应用程序。它以十年为基础

在Alpine Linux 3.9.0上创建Docker Swarm

在Alpine Linux 3.9.0上创建Docker Swarm

简介本指南将向您展示如何使用多个Alpine Linux 3.9.0服务器和Portainer创建和配置Docker群。请注意

在Debian 9上使用Docker Swarm(CE)进行粘性会话

在Debian 9上使用Docker Swarm(CE)进行粘性会话

使用其他系统?简介Docker Swarm将您的单个服务器转变为计算机集群。便于扩展,高可用性和

如何在CentOS 7上安装Harbor

如何在CentOS 7上安装Harbor

Harbor是一个开放源代码的企业级注册服务器,用于存储和分发Docker映像。Harbor扩展了开源Docker Distribution b

在CentOS 7上使用Kubeadm部署Kubernetes

在CentOS 7上使用Kubeadm部署Kubernetes

概述本文旨在帮助您立即建立Kubernetes集群并使用kubeadm运行。本指南将在以下位置部署两台服务器

使用Docker在CentOS 7上开始使用SQL Server 2017(MS-SQL)

使用Docker在CentOS 7上开始使用SQL Server 2017(MS-SQL)

前提条件Docker引擎1.8+。至少4GB的磁盘空间。至少4GB的RAM。步骤1.安装Docker为了安装SQL-Server,Docker mus

在Ubuntu 14.04上安装Docker

在Ubuntu 14.04上安装Docker

使用其他系统?Docker是一个允许部署作为容器运行的程序的应用程序。它是用流行的Go程序编写的

使用Docker-compose部署PHP应用程序

使用Docker-compose部署PHP应用程序

PHP应用程序通常由Web服务器,关系数据库系统和语言解释器本身组成。在本教程中,我们将继续学习

AI 能否應對越來越多的勒索軟件攻擊?

AI 能否應對越來越多的勒索軟件攻擊?

勒索軟件攻擊呈上升趨勢,但人工智能能否幫助應對最新的計算機病毒?AI 是答案嗎?在這裡閱讀知道是 AI 布恩還是禍根

ReactOS:這是 Windows 的未來嗎?

ReactOS:這是 Windows 的未來嗎?

ReactOS,一個開源和免費的操作系統,這裡有最新版本。它能否滿足現代 Windows 用戶的需求並打倒微軟?讓我們更多地了解這種老式但更新的操作系統體驗。

通過 WhatsApp 桌面應用程序 24*7 保持聯繫

通過 WhatsApp 桌面應用程序 24*7 保持聯繫

Whatsapp 終於為 Mac 和 Windows 用戶推出了桌面應用程序。現在您可以輕鬆地從 Windows 或 Mac 訪問 Whatsapp。適用於 Windows 8+ 和 Mac OS 10.9+

人工智能如何將流程自動化提升到新的水平?

人工智能如何將流程自動化提升到新的水平?

閱讀本文以了解人工智能如何在小型公司中變得流行,以及它如何增加使它們成長並為競爭對手提供優勢的可能性。

macOS Catalina 10.15.4 補充更新引發的問題多於解決

macOS Catalina 10.15.4 補充更新引發的問題多於解決

最近,Apple 發布了 macOS Catalina 10.15.4 補充更新以修復問題,但似乎該更新引起了更多問題,導致 mac 機器變磚。閱讀這篇文章以了解更多信息

大數據的13個商業數據提取工具

大數據的13個商業數據提取工具

大數據的13個商業數據提取工具

什麼是日誌文件系統,它是如何工作的?

什麼是日誌文件系統,它是如何工作的?

我們的計算機以稱為日誌文件系統的有組織的方式存儲所有數據。這是一種有效的方法,可以讓計算機在您點擊搜索時立即搜索和顯示文件。 https://wethegeek.com/?p=94116&preview=true

技術奇點:人類文明的遙遠未來?

技術奇點:人類文明的遙遠未來?

隨著科學的快速發展,接管了我們的大量工作,我們陷入無法解釋的奇點的風險也在增加。閱讀,奇點對我們意味著什麼。

洞察 26 種大數據分析技術:第 1 部分

洞察 26 種大數據分析技術:第 1 部分

洞察 26 種大數據分析技術:第 1 部分

2021 年人工智能對醫療保健的影響

2021 年人工智能對醫療保健的影響

過去幾十年,醫療保健領域的人工智能取得了巨大飛躍。因此,醫療保健中人工智能的未來仍在日益增長。