阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

搭建一个私有的Docker registry

395次阅读
没有评论

共计 5304 个字符,预计需要花费 14 分钟才能阅读完成。

搭建一个私有的 Docker registry

[TL;DR] 这是系列的第二篇文章,这系列讲述了我的公司如何把基础服务从 PaaS 迁移到 Docker 上

  • 第一篇文章: 我谈到了接触 Docker 之前的经历;
  • 第三篇文章: 我展示如何使创建镜像的过程自动化以及如何用 Docker 部署一个 Rails 应用。

为什么需要搭建一个私有的 registry 呢?嗯,对于新手来说,Docker Hub(一个 Docker 公共仓库)只允许你拥有一个免费的私有版本库(repo)。其他的公司也开始提供类似服务,但是价格可不便宜。另外,如果你需要用 Docker 部署一个用于生产环境的应用,恐怕你不希望将这些镜像放在公开的 Docker Hub 上吧!

这篇文章提供了一个非常务实的方法来处理搭建私有 Docker registry 时出现的各种错综复杂的情况。我们将会使用一个运行于 DigitalOcean(之后简称为 DO)的非常小巧的 512MB VPS 实例。并且我会假定你已经了解了 Docker 的基本概念,因为我必须集中精力在复杂的事情上!

 

本地搭建

首先你需要安装 boot2docker 以及 docker CLI。如果你已经搭建好了基本的 Docker 环境,你可以直接跳过这一步。

从终端运行以下命令(我假设你使用 OS X,使用 HomeBrew 来安装相关软件,你可以根据你的环境使用不同的包管理软件来安装):

  1. brew install boot2docker docker

如果一切顺利(想要了解搭建 docker 环境的完整指南,请参阅 http://boot2docker.io/),你现在就能够通过如下命令启动一个 Docker 运行于其中的虚拟机:

  1. boot2docker up

按照屏幕显示的说明,复制粘贴 book2docker 在终端输出的命令。如果你现在运行 docker ps 命令,终端将有以下显示。

  1. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES

好了,Docker 已经准备就绪,这就够了,我们回过头去搭建 registry。

 

创建服务器

登录进你的 DO 账号,选择一个预安装了 Docker 的镜像文件,创建一个新的 Drople。(本文写成时选择的是 Image > Applications > Docker 1.4.1 on 14.04)

搭建一个私有的 Docker registry

你将会以邮件的方式收到一个根用户凭证。登录进去,然后运行 docker ps 命令来查看系统状态。

 

搭建 AWS S3

我们现在将使用 Amazo Simple Storage Service(S3)作为我们 registry/repository 的存储层。我们将需要创建一个桶 (bucket) 以及用户凭证(user credentials)来允许我们的 docker 容器访问它。

登录到我们的 AWS 账号(如果没有,就申请一个 http://aws.amazon.com/),在控制台选择 S3(Simpole Storage Service)。

搭建一个私有的 Docker registry

点击 Create Bucket,为你的桶输入一个名字(把它记下来,我们一会需要用到它),然后点击Create

搭建一个私有的 Docker registry

OK!我们已经搭建好存储部分了。

 

设置 AWS 访问凭证

我们现在将要创建一个新的用户。退回到 AWS 控制台然后选择 IAM(Identity & Access Management)。

搭建一个私有的 Docker registry

在 dashboard 的左边,点击 Users。然后选择 Create New Users

如图所示:

搭建一个私有的 Docker registry

输入一个用户名(例如 docker-registry)然后点击 Create。写下(或者下载 csv 文件)你的 Access Key 以及 Secret Access Key。回到你的用户列表然后选择你刚刚创建的用户。

在 Permission section 下面,点击 Attach User Policy。之后在下一屏,选择 Custom Policy。

搭建一个私有的 Docker registry

custom policy 的内容如下:

  1. {
  2. "Version":"2012-10-17",
  3. "Statement":[
  4. {
  5. "Sid":"SomeStatement",
  6. "Effect":"Allow",
  7. "Action":[
  8. "s3:*"
  9. ],
  10. "Resource":[
  11. "arn:aws:s3:::docker-registry-bucket-name/*",
  12. "arn:aws:s3:::docker-registry-bucket-name"
  13. ]
  14. }
  15. ]
  16. }

这个配置将允许用户(也就是 regitstry)来对桶上的内容进行操作(读 / 写)(确保使用你之前创建 AWS S3 时使用的桶名)。总结一下:当你想把你的 Docker 镜像从你的本机推送到仓库中时,服务器就会将他们上传到 S3。

 

安装 registry

现在回过头来看我们的 DO 服务器,SSH 登录其上。我们将要使用一个官方 Docker registry 镜像。

输入如下命令,开启 registry。

  1. docker run \
  2. -e SETTINGS_FLAVOR=s3 \
  3. -e AWS_BUCKET=bucket-name \
  4. -e STORAGE_PATH=/registry \
  5. -e AWS_KEY=your_aws_key \
  6. -e AWS_SECRET=your_aws_secret \
  7. -e SEARCH_BACKEND=sqlalchemy \
  8. -p 5000:5000 \
  9. --name registry \
  10. -d \
  11. registry

Docker 将会从 Docker Hub 上拉取所需的文件系统分层(fs layers)并启动守护容器(daemonised container)。

 

测试 registry

如果上述操作奏效,你可以通过 ping 命令,或者查找它的内容来测试 registry(虽然这个时候容器还是空的)。

我们的 registry 非常基础,而且没有提供任何“验明正身”的方式。因为添加身份验证可不是一件轻松事(至少我认为没有一种部署方法是简单的,像是为了证明你努力过似的),我觉得“查询 / 拉取 / 推送”仓库内容的最简单方法就是通过 SSH 通道的未加密连接(通过 HTTP)。

打开 SSH 通道的操作非常简单:

  1. ssh -N -L 5000:localhost:5000 root@your_registry.com

这条命令建立了一条从 registry 服务器(前面执行 docker run 命令的时候我们见过它)的 5000 号端口到本机的 5000 号端口之间的 SSH 管道连接。

如果你现在用浏览器访问 http://localhost:5000/v1/_ping,将会看到下面这个非常简短的回复。

  1. {}

这个意味着 registry 工作正常。你还可以通过登录 http://localhost:5000/v1/search 来查看 registry 内容,内容相似:

  1. {
  2. "num_results":2,
  3. "query":"",
  4. "results":[
  5. {
  6. "description":"",
  7. "name":"username/first-repo"
  8. },
  9. {
  10. "description":"",
  11. "name":"username/second-repo"
  12. }
  13. ]
  14. }

 

创建一个镜像

我们现在创建一个非常简单的 Docker 镜像,来检验我们新弄好的 registry。在我们的本机上,用如下内容创建一个 Dockerfile(这里只有一点代码,在下一篇文章里我将会展示给你如何将一个 Rails 应用绑定进 Docker 容器中。):

  1. # ruby 2.2.0 的基础镜像
  2. FROM ruby:2.2.0
  3. MAINTAINER MichelangeloChasseur<michelangelo.chasseur@touchwa.re>

并创建它:

  1. docker build -t localhost:5000/username/repo-name .

localhost:5000这个部分非常重要:Docker 镜像名的最前面一个部分将告知 docker push 命令我们将要把我们的镜像推送到哪里。在我们这个例子当中,因为我们要通过 SSH 管道连接远程的私有 registry,localhost:5000精确地指向了我们的 registry。

如果一切顺利,当命令执行完成返回后,你可以输入 docker images 命令来列出新近创建的镜像。执行它看看会出现什么现象?

 

推送到仓库

接下来是更好玩的部分。实现我所描述的东西着实花了我一点时间,所以如果你第一次读的话就耐心一点吧,跟着我一起操作。我知道接下来的东西会非常复杂(如果你不自动化这个过程就一定会这样),但是我保证到最后你一定都能明白。在下一篇文章里我将会使用到一大波 shell 脚本和 Rake 任务,通过它们实现自动化并且用简单的命令实现部署 Rails 应用。

你在终端上运行的 docker 命令实际上都是使用 boot2docker 虚拟机来运行容器及各种东西。所以当你执行像 docker push some_repo 这样的命令时,是 boot2docker 虚拟机在与 registry 交互,而不是我们自己的机器。

接下来是一个非常重要的点:为了将 Docker 镜像推送到远端的私有仓库,SSH 管道需要在 boot2docker 虚拟机上配置好,而不是在你的本地机器上配置。

有许多种方法实现它。我给你展示最简短的一种(可能不是最容易理解的,但是能够帮助你实现自动化)

在这之前,我们需要对 SSH 做最后一点工作。

 

设置 SSH

让我们把 boot2docker 的 SSH key 添加到远端服务器的“已知主机”里面。我们可以使用 ssh-copy-id 工具完成,通过下面的命令就可以安装上它了:

  1. brew install ssh-copy-id

然后运行:

  1. ssh-copy-id -i /Users/username/.ssh/id_boot2docker root@your-registry.com

用你 ssh key 的真实路径代替/Users/username/.ssh/id_boot2docker

这样做能够让我们免密码登录 SSH。

现在我们来测试以下:

  1. boot2docker ssh "ssh -o'StrictHostKeyChecking no'-i /Users/michelangelo/.ssh/id_boot2docker -N -L 5000:localhost:5000 root@registry.touchwa.re &"&

分开阐述:

  • boot2docker ssh允许你以参数的形式传递给 boot2docker 虚拟机一条执行的命令;
  • 最后面那个 & 表明这条命令将在后台执行;
  • ssh -o 'StrictHostKeyChecking no' -i /Users/michelangelo/.ssh/id_boot2docker -N -L 5000:localhost:5000 root@registry.touchwa.re &是 boot2docker 虚拟机实际运行的命令;
    • -o 'StrictHostKeyChecking no'——不提示安全问题;
    • -i /Users/michelangelo/.ssh/id_boot2docker指出虚拟机使用哪个 SSH key 来进行身份验证。(注意这里的 key 应该是你前面添加到远程仓库的那个)
    • 最后我们将打开一条端口 5000 映射到 localhost:5000 的 SSH 通道。

 

从其他服务器上拉取

你现在将可以通过下面的简单命令将你的镜像推送到远端仓库:

  1. docker push localhost:5000/username/repo_name

在下一篇文章中,我们将会了解到如何自动化处理这些事务,并且真正地容器化一个 Rails 应用。请继续收听!

如有错误,请不吝指出。祝你 Docker 之路顺利!

CentOS 6/ 7 系列安装 Docker http://www.linuxidc.com/Linux/2014-07/104768.htm 

Docker 的搭建 Gitlab CI 全过程详解 http://www.linuxidc.com/Linux/2013-12/93537.htm 

Docker 安装应用(CentOS 6.5_x64) http://www.linuxidc.com/Linux/2014-07/104595.htm 

在 Docker 中使用 MySQL http://www.linuxidc.com/Linux/2014-01/95354.htm

在 Ubuntu Trusty 14.04 (LTS) (64-bit)安装 Docker http://www.linuxidc.com/Linux/2014-10/108184.htm 

Docker 安装应用(CentOS 6.5_x64) http://www.linuxidc.com/Linux/2014-07/104595.htm 

Ubuntu 14.04 安装 Docker  http://www.linuxidc.com/linux/2014-08/105656.htm 

阿里云 CentOS 6.5 模板上安装 Docker http://www.linuxidc.com/Linux/2014-11/109107.htm 

Docker 的详细介绍:请点这里
Docker 的下载地址:请点这里

本文永久更新链接地址:http://www.linuxidc.com/Linux/2015-05/117000.htm

正文完
星哥玩云-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2022-01-20发表,共计5304字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中

星哥玩云

星哥玩云
星哥玩云
分享互联网知识
用户数
4
文章数
19350
评论数
4
阅读量
7960728
文章搜索
热门文章
星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

星哥带你玩飞牛 NAS-6:抖音视频同步工具,视频下载自动下载保存 前言 各位玩 NAS 的朋友好,我是星哥!...
星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

星哥带你玩飞牛 NAS-3:安装飞牛 NAS 后的很有必要的操作 前言 如果你已经有了飞牛 NAS 系统,之前...
我把用了20年的360安全卫士卸载了

我把用了20年的360安全卫士卸载了

我把用了 20 年的 360 安全卫士卸载了 是的,正如标题你看到的。 原因 偷摸安装自家的软件 莫名其妙安装...
再见zabbix!轻量级自建服务器监控神器在Linux 的完整部署指南

再见zabbix!轻量级自建服务器监控神器在Linux 的完整部署指南

再见 zabbix!轻量级自建服务器监控神器在 Linux 的完整部署指南 在日常运维中,服务器监控是绕不开的...
飞牛NAS中安装Navidrome音乐文件中文标签乱码问题解决、安装FntermX终端

飞牛NAS中安装Navidrome音乐文件中文标签乱码问题解决、安装FntermX终端

飞牛 NAS 中安装 Navidrome 音乐文件中文标签乱码问题解决、安装 FntermX 终端 问题背景 ...
阿里云CDN
阿里云CDN-提高用户访问的响应速度和成功率
随机文章
三大开源投屏神器横评:QtScrcpy、scrcpy、escrcpy 谁才是跨平台控制 Android 的最优解?

三大开源投屏神器横评:QtScrcpy、scrcpy、escrcpy 谁才是跨平台控制 Android 的最优解?

  三大开源投屏神器横评:QtScrcpy、scrcpy、escrcpy 谁才是跨平台控制 Andr...
再见zabbix!轻量级自建服务器监控神器在Linux 的完整部署指南

再见zabbix!轻量级自建服务器监控神器在Linux 的完整部署指南

再见 zabbix!轻量级自建服务器监控神器在 Linux 的完整部署指南 在日常运维中,服务器监控是绕不开的...
颠覆 AI 开发效率!开源工具一站式管控 30+大模型ApiKey,秘钥付费+负载均衡全搞定

颠覆 AI 开发效率!开源工具一站式管控 30+大模型ApiKey,秘钥付费+负载均衡全搞定

  颠覆 AI 开发效率!开源工具一站式管控 30+ 大模型 ApiKey,秘钥付费 + 负载均衡全...
星哥带你玩飞牛NAS-13:自动追番、订阅下载 + 刮削,动漫党彻底解放双手!

星哥带你玩飞牛NAS-13:自动追番、订阅下载 + 刮削,动漫党彻底解放双手!

星哥带你玩飞牛 NAS-13:自动追番、订阅下载 + 刮削,动漫党彻底解放双手! 作为动漫爱好者,你是否还在为...
12.2K Star 爆火!开源免费的 FileConverter:右键一键搞定音视频 / 图片 / 文档转换,告别多工具切换

12.2K Star 爆火!开源免费的 FileConverter:右键一键搞定音视频 / 图片 / 文档转换,告别多工具切换

12.2K Star 爆火!开源免费的 FileConverter:右键一键搞定音视频 / 图片 / 文档转换...

免费图片视频管理工具让灵感库告别混乱

一言一句话
-「
手气不错
星哥带你玩飞牛NAS-14:解锁公网自由!Lucky功能工具安装使用保姆级教程

星哥带你玩飞牛NAS-14:解锁公网自由!Lucky功能工具安装使用保姆级教程

星哥带你玩飞牛 NAS-14:解锁公网自由!Lucky 功能工具安装使用保姆级教程 作为 NAS 玩家,咱们最...
12.2K Star 爆火!开源免费的 FileConverter:右键一键搞定音视频 / 图片 / 文档转换,告别多工具切换

12.2K Star 爆火!开源免费的 FileConverter:右键一键搞定音视频 / 图片 / 文档转换,告别多工具切换

12.2K Star 爆火!开源免费的 FileConverter:右键一键搞定音视频 / 图片 / 文档转换...
告别Notion焦虑!这款全平台开源加密笔记神器,让你的隐私真正“上锁”

告别Notion焦虑!这款全平台开源加密笔记神器,让你的隐私真正“上锁”

  告别 Notion 焦虑!这款全平台开源加密笔记神器,让你的隐私真正“上锁” 引言 在数字笔记工...
一句话生成拓扑图!AI+Draw.io 封神开源组合,工具让你的效率爆炸

一句话生成拓扑图!AI+Draw.io 封神开源组合,工具让你的效率爆炸

一句话生成拓扑图!AI+Draw.io 封神开源组合,工具让你的效率爆炸 前言 作为天天跟架构图、拓扑图死磕的...
星哥带你玩飞牛 NAS-9:全能网盘搜索工具 13 种云盘一键搞定!

星哥带你玩飞牛 NAS-9:全能网盘搜索工具 13 种云盘一键搞定!

星哥带你玩飞牛 NAS-9:全能网盘搜索工具 13 种云盘一键搞定! 前言 作为 NAS 玩家,你是否总被这些...