首页

文章

如何在Ubuntu14.04上搭建私有docker registry

发布网友 发布时间:2022-03-20 21:22

我来回答

1个回答

热心网友 时间:2022-03-20 22:52

docker是一款部署服务器的强有力工具。docker.io免费为用户提供上传镜像资源到官方registry的服务,然而,该registry对任何人均开放权限。也许对于一个非开源的项目,你并不情愿如此。
本文将指导你如何搭建私有docker registry,并确保其安全性。在本教程的最后,你将亲身体验上传自制的docker镜像到私有registry,并在不同的机器上安全的将该其拉去下来。
本教程不包含如何容器化应用服务的内容,而是旨在引导你去创建registry来存储你要部署的服务资源。如果你想要docker的入门教程,也许这儿可以帮到你。
基于Ubuntu14.04系统的单registry和单客户机模式,本教程已经通过测试,也许在其他基于debian的发布上仍可以运行。
docker概念
如果在此之前你尚未接触过docker,这需要花费你几分钟的时间来熟悉docker的关键概念。如果你对docker已得心应手,只是想了解如何构建私有registry的话,那么,你可以直接进入下一小节。
对于一个新手该如何使用docker,不妨试试这里优秀的docker笔记。
docker的核心就是要对应用以及应用的依赖与操作系统分离。为了达到上述目的,docker采用容器与镜像机制。一个docker镜像基本上是一个文件系统的模板。当你通过docker run命令运行一个docker镜像时,该文件系统的一个实例即被激活,并且运行在系统内的docker容器之中。默认的,该容器无法触及原始镜像以及docker本身所运行在的主机的文件系统。这是一个独立的环境。
对容器所做的任何改动都将保存在容器本身之内,并不会影响原始的镜像。如果想保留这些改动,那么,可以通过docker commit命令将容器保存为镜像。这意味你可以通过原有的容器来衍生出新的容器,而不会对原始容器(或镜像)造成任何影响。如果你熟悉git,那么你会觉得该流程十分眼熟:从任意的容器上去创建新的分支(这里,分支的意思即为docker中的镜像)。运行镜像类似于执行git checkout操作。
更进一步形容,运行私有docker registry,就好比为docker镜像运行私有git仓库。
第一步——安装必要的软件
在docker registry服务器上,应当创建一个拥有sudo权限的用户(如果可以,在客户机上也如此)。
docker registry软件是一款python应用,因此为了使其能够运行起来,需要安装python开发环境以及必要的库:
sudo apt-get updatesudo apt-get -y install build-essential python-dev libevent-dev python-pip liblzma-dev

第二步——安装并配置docker registry
为了安装最新的稳定的docker registry发行版(作者撰文时为0.7.3,译者译时为0.9.1),我们将使用python包管理工具pip:
sudo pip install docker-registry

docker-registry需要配置文件。
默认地,pip将该配置文件放置在相当偏僻的地方,因系统中python的安装位置而异。因此,为了找到该路径,我们将尝试运行registry,以查看相关的输出:
gunicorn --access-logfile - --debug -k gevent -b 0.0.0.0:5000 -w 1 docker_registry.wsgi:application

由于配置文件不在正确的位置,上述尝试将会以失败而告终,并输出一条包含FileNotFoundError错误消息,如下所示[在某些版本中,无下述信息输出,译者注]:
FileNotFoundError: Heads-up! File is missing: /usr/local/lib/python2.7/dist-packages/docker_registry/lib/../../config/config.yml

registry在同样的路径上包含一个示例配置文件,该文件名为config_sample.yml,因此,我们可以通过上述给出的路径名来定位示例配置文件。
从错误消息中复制路径信息(此时为/usr/local/lib/python2.7/dist-packages/docker_registry/lib/../../config/config.yml),然后,将config.yml部分去除,这样我们可以切换到该路径下。
cd /usr/local/lib/python2.7/dist-packages/docker_registry/lib/../../config/

将config_sample.yml文件的内容复制到config.yml中:
sudo cp config_sample.yml config.yml

默认情况下,docker的数据文件存放在/tmp文件夹下,但是在许多的类Linux系统中,系统重启时该文件夹被清空,这并不是我们所希望的。那么,我们创建一个永久性的文件夹来存储数据:
sudo mkdir /var/docker-registry

好的,下面我们配置config.yml文件,将对文件夹/tmp的引用更改为/var/docker-registry。首先,首先找到以sqlalchemy_index_database为首的靠近文件首部的一行:
sqlalchemy_index_database:_env:SQLALCHEMY_INDEX_DATABASE:sqlite:////tmp/docker-registry.db

将其更改指向/var/docker-registry,如下所示:
sqlalchemy_index_database:_env:SQLALCHEMY_INDEX_DATABASE:sqlite:////var/docker-registry/docker-registry.db

向下一点,到local:部分,重复上述操作,更改如下内容:
local: &localstorage: localstorage_path: _env:STORAGE_PATH:/tmp/registry

为:
local: &localstorage: localstorage_path: _env:STORAGE_PATH:/var/docker-registry/registry

样例配置文件中的其他默认值均无需修改。一目十行即可。然而,如果你想要做一些复杂的配置,诸如采用扩展存储装置来存储docker数据,那么该文件正具有此功能。当然,这已超出本教程的范围,你可以查看docker-registry文档以获取更多的帮助。
既然配置文件已置于正确的位置,那么再一次尝试来测试docker registry服务器:
gunicorn --access-logfile - --debug -k gevent -b 0.0.0.0:5000 -w 1 docker_registry.wsgi:application

你会看到如下的输出:
2014-07-27 07:12:24 [29344] [INFO] Starting gunicorn 18.02014-07-27 07:12:24 [29344] [INFO] Listening at: http://0.0.0.0:5000 (29344)2014-07-27 07:12:24 [29344] [INFO] Using worker: gevent2014-07-27 07:12:24 [29349] [INFO] Booting worker with pid: 293492014-07-27 07:12:24,807 DEBUG: Will return docker-registry.drivers.file.Storage

棒极了!现在我们已经拥有一个运行着的docker registry。下面执行Ctrl+C终止该程序。
到目前为止,docker registry并不是那么有用。它并不会自行启动除非我们执行上述gunicorn命令。另外,docker registry不没有引入任何的内置的认证机制,因此,其当前状态下是不安全并且对外部完全开放的。
第三步——以服务的形式启动docker registry
通过创建Upstart脚本,设置docker registry在系统的启动程序中开始运行。
首先,创建日志文件目录:
sudo mkdir -p /var/log/docker-registry

然后,用一款你拿手的文本编辑器来创建Upstart脚本:
sudo nano /etc/init/docker-registry.conf

将如下内容写入上述脚本中:
description "Docker Registry"start on runlevel [2345]stop on runlevel [016]respawnrespawn limit 10 5script exec gunicorn --access-logfile /var/log/docker-registry/access.log --error-logfile /var/log/docker-registry/server.log -k gevent --max-requests 100 --graceful-timeout 3600 -t 3600 -b localhost:5000 -w 8 docker_registry.wsgi:applicationend script

更多关于Upstart脚本的内容,请阅读该教程。
此时,执行如下命令:
sudo service docker-registry start

将看到下面的输出:
docker-registry start/running, process 2
长春小飞没有车没有房 碳钢的多久生锈 碳钢多久会生锈 碳钢多长时间会开始生锈 碳钢和铝哪个容易生锈 梦见天宫图是什么意思 光遇2023好友树解锁图鉴 光遇二级节点多少个 ...火柴小女孩》《词语手册》里有很多词语的意思的,求告知 暖融融解释 领淘通淘客助手这个软件怎么样? 淘宝客必备的九大工具有哪些? 电脑里硬盘如何共享怎么实现多台电脑共用一块硬盘 两台电脑一个硬盘两台电脑是否可以同时用一个硬盘 共享电脑硬盘怎样设置局域网电脑硬盘共享 现在下载歌曲好还是不下好 故障码P033D的含义解析 切菜机多功能型切菜机 scanbox三维扫描仪 苹果13没有删除的备忘录怎么恢复? iphone备忘录永久删除怎么恢复?iphone备忘录恢复最近删除文件方法介绍... 备忘录最近删除怎么找 初一班主任工作计划 新初一班主任工作计划 359度是什么角 报个 定向乡镇卫生院 的医学好不好 酒驾缓刑节保证书怎么写 合同法律咨询免费 这款充电宝可以带上飞机吗? 倪俊卿成就及荣誉 江苏种牛站有几家? 山东宏正牧业有限公司服务承诺 吃早餐后抽血会影响体检结果吗 电脑如何设置护眼模式(台式电脑如何设置护眼模式) 电脑显示器设置护眼电脑屏幕怎么设置比较护眼 广告机是否支持分屏显示功能? 上海东丰船务有限公司怎么样? 马弗炉管厂家 CF手游体验服怎样获取资格 穿越火线体验服在哪申请资格_cf手游体验服资格申请入口链接 穿越火线体验服资格申请链接在哪-穿越火线体验服资格申请链接介绍 快手浏览量多少才能赚钱?快手靠浏览量能挣多少钱? 小麦胚芽如何吃最好 个头怎么造句 高跟鞋走路磨脚该如何处理? 除螨虫的特效药 螨虫什么药物可以除掉 网上在哪买奢侈品 二手包包闲置了怎么办 夫妻想要怀孕要提前做哪些准备 手机图片如何投屏到电视上去 手机图片投屏到电视上去的方法 分区助手无法压缩卷怎么处理? 怎样让抖音点赞多 nginx和apache是什么 抖音怎么增加点赞和评论 apache和nginx哪个好 抖音点赞量怎么增加 宏基台式电脑怎么重装系统 如何在Linux下安装配置Apache Mahout 在linux中输入什么命令创建apache服务和怎么配置及访问 组装台式电脑怎么重装系统windows7 如何 在Redhat Linux 系统上安装和配置apache 服务器 DELL台式机怎么重装系统? 在Linux系统环境下,如何配置Apache服务器,简要写出配置步骤及作用? 怎样在Linux系统下配置apache 台式电脑第一次安装系统怎么安装? linux命令怎么安装apache? linux如何配置apache服务器 怎么在linux安装apache linux 怎么配置apache linux 怎么配置安装apache2 在linux平台下安装、配置与管理apache 为什么使用docker搭建区块链环境 java入门新手教程 钉钉直播老师能看到是哪个学生点赞吗? 为什么钉钉已经是最新版本了,但是直播点赞和签到功能还不能用呢? 2016最新python入门到精通视频教程下载地址 钉钉上点赞,老师可以看到吗? 如何在Docker CentOS容器中使用Systemd docker ubuntu用什么版本 nginx怎么安装在linux中 linux下安装subversion并配置nginx+apache操作教程(2) linux服务器上下载某个文件怎么配置nginx 微信小程序过期了,怎么恢复它呐 Nginx必须安装在linux吗? 初学linux,win7系统在虚拟机linux中安装nginx , linux安装多个nginx 怎么启动 用打印机a4纸怎么打印试卷 打印机,打印学生试卷不会弄 nginx反向代理多个服务,我写的配置在我的nginx上运行可以,但是换的别的主机上都不行是为啥? 如何用打印机打印卷子 nginx反向代理多台独立web服务器
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com