问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

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

发布网友 发布时间:2022-04-22 06:47

我来回答

2个回答

热心网友 时间:2022-04-08 22:22

本文将指导你如何搭建私有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 25303

当然,你也可以通过运行下面的命令查看server.log日志文件,验证docker-registry服务是否正在运行:
tail /var/log/docker-registry/server.log

如果一切正常的话,你会看到像之前执行gunicorn命令时输出的文本信息。
既然docker-registry服务器已在后台运行,那么下面我们来配置Nginx,以使registry更加安全。

热心网友 时间:2022-04-08 23:40

本文将指导你如何搭建私有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错误消息,如下所示[在某些版本中,无下述信
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
vivo y18l 死机卡在开机界面 vivoy18l手机频繁黑屏死机怎么办? vivo y18l 死机了怎么办 vivoY18l黑屏死机解决办法 vivo y18l刷机很久都开不了机怎么? 湖北自考专升本会有学籍吗? 湖北自考专升本后可以考研吗 湖北自考申请毕业证的时间在什么时候 湖北自考专升本学历怎么查询 湖北自考专升本为什么没有学籍 如何在mac上搭建docker环境进行漏洞 如何创建一个安全的Docker基础镜像 怎么利用docker搭建一个预发布环境 如何搭建及使用docker registry 如何搭建docker swarm 怎么搭建docker 私有仓库 墙壁插座内电源线国家规定留多长? 如何正确使用电源线组(延长线) 适配器电源线延长,加电压还是加电流。 英国达人秀中这个女评委叫什么 装修的时候插座位置估计错了现在要移动插座要加长... 有谁可以告诉我(爱情公寓2) 16集中那个串客的女... 电话线如何加长 电源线太短,如何加长? 军运会有好几个女排主力队员,去年的冠军巴西其队... 刘姓起名 经常梦到老公 为什么? 看图猜字答案及图片猜三个字 公加个偏旁能组成哪些字? dnf如何打空格角色名? 如何使用Docker在容器中搭建一个网站 汽车报价大全是干什么用的? 全球通在网时长什么意思 移动网上商城上的号码承诺在网时长是不是保底的时间? 寝室墙上有这么个联通光纤接口,是不是自己买个光... 什么是在网时长奖励积分? 黄帝、颛顼、帝喾、尧、舜、禹分别是什么关系,他... qq空间上的在网时长是什么意思 陈姓是怎么来的 消费积分包含在网时长奖励积分吗? 陈姓在哪个朝代 有没有统计wifi在网时长的app应用啊?————————急切 有没有统计wifi在网时长的app应用啊?————————急切... 电信宽带时长如何计算的? 千兆网与百兆网的RJ45接口是一样的吗? QQ连续在网时长如何设置个性化? 谁知道联通校园有线宽带怎么弄,办了36元的套餐,... 什么叫虚拟网内本地被叫时长 唐伯虎点秋香猜一生肖 SAP 接口 限制 时长