×

dockerhub私有仓库搭建 regist reg

dockerhub私有仓库搭建(如何在Ubuntu14.04上搭建私有docker registry-Linux)

admin admin 发表于2024-07-20 03:52:35 浏览10 评论0

抢沙发发表评论

其实dockerhub私有仓库搭建的问题并不复杂,但是又很多的朋友都不太了解如何在Ubuntu14.04上搭建私有docker registry-Linux,因此呢,今天小编就来为大家分享dockerhub私有仓库搭建的一些知识,希望可以帮助到大家,下面我们一起来看看这个问题的分析吧!

本文目录

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

本文将指导你如何搭建私有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-registrydocker-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.ymlregistry在同样的路径上包含一个示例配置文件,该文件名为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你会看到如下的输出:***隐藏网址***棒极了!现在我们已经拥有一个运行着的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 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更加安全。

使用Harbor搭建企业级私有docker仓库

Harbor一个用于存储Docker镜像的企业级Registry服务。

Harbor核心组件解释

* Proxy:他是一个nginx的前端代理,代理Harbor的registry,UI, token等服务。

* db:负责储存用户权限、审计日志、Dockerimage分组信息等数据。

* UI:提供图形化界面,帮助用户管理registry上的镜像, 并对用户进行授权。

* jobsevice:jobsevice是负责镜像复制工作的,他和registry通信,从一个registry pull镜像然后push到另一个registry,并记录job_log。

* Adminserver:是系统的配置管理中心附带检查存储用量,ui和jobserver启动时候回需要加载adminserver的配置。

* Registry:镜像仓库,负责存储镜像文件。

* Log:为了帮助监控Harbor运行,负责收集其他组件的log,供日后进行分析。

Harbor和Registry的比较

Docker镜像是是分层的,而如果每次传输都使用全量文件(所以用FTP的方式并不适合),显然不经济。必须提供识别分层传输的机制,以层的UUID为标识,确定传输的对象。

只用镜像的名字来进行上传下载显然很不方便,需要有一个用户界面可以支持登陆、搜索功能,包括区分公有、私有镜像。

当有用户对镜像的上传下载操作集中在某服务器,需要对相应的访问压力作分解。

企业中的开发团队有很多不同的职位,对于不同的职位人员,分配不同的权限,具有更好的安全性。

kubernetes中通过namespace来对资源进行隔离,在企业级应用场景中,通过将两者进行结合可以有效将kubernetes使用的镜像资源进行管理和访问控制,增强镜像使用的安全性。尤其是在多租户场景下,可以通过租户、namespace和项目相结合的方式来实现对多租户镜像资源的管理和访问控制。

部署

1、安装docker

安装docker-ce

yum-utils 提供yum-config-manager工具,devicemapper存储需要device-mapper-persistent-data和lvm2

添加yum源仓库

官方仓库

阿里仓库

安装docker

扩展:安装指定版本的docker

启动docker,设置开机启动docker

***隐藏网址***

配置docker中国镜像加速器,配置后重启docker

***隐藏网址***

2、安装docker-compose

查看版本

3、安装harbor

***隐藏网址***

4、管理

停止,需要进入Harbor目录/usr/local/harbor

修改配置

先停止,然后更新harbor.cfg文件,然后运行prepare,以更新配置

5、登录,默认用户名admin ,密码 Harbor12345,新建一个tomcat7仓库

***隐藏网址***

7、创建一个镜像并推送到tomcat7仓库

创建dockerfile,这里不把jdk环境打包进镜像,在运行容器时挂载本地jdk环境,以减小镜像大小和提升速度

####格式:私有仓库IP/项目名称/镜像名称:版本号####

push成功,去界面看下

从镜像启动容器,镜像是否正常使用,注意要使用-v参数,挂载本地jdk

我们访问下IP:32770看下

***隐藏网址***

docker搭建私有仓库

  Docker 官方提供了一个搭建私有仓库的镜像 registry ,运行该镜像的容器并且对外暴露5000端口就ok了。

  如果是在内网环境中,可以之间使用,如果是外网访问内网,可以借助花生壳等做个内网穿透。

/Users/miuye/Public/registry 是我个人的挂载的本地目录,push到该仓库的镜像会保存在该路径下。

***隐藏网址***

***隐藏网址***  

 

***隐藏网址***

 

***隐藏网址***

原因:Docker自从1.3.X之后docker registry交互默认使用的是HTTPS,但是搭建私有镜像默认使用的是HTTP服务,所以与私有镜像交时出现以上错误。

解决办法

ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock 后面加参数--insecure-registry 192.168.1.66:5000

【注意:192.168.1.66是我私有仓库所在主机的ip,需要改成自己的仓库ip或者域名】

修改好后重启docker 服务

加入以下内容:(注意ip改成自己的)

修改好后重启docker 服务

 

 

4.1 在push端添加host后通过域名进行push

2、pull端添加hosts后通过域名进行pull

docker.service 和 daemon.json 也修改为对应域名

这样push和pull的时候如果仓库ip发生了变化,只需要修改hosts即可。

  参考链接:

***隐藏网址******隐藏网址***

  如有不对,烦请指出,感谢!

如何在Ubuntu14.04上搭建私有docker registry-Linux的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于如何在Ubuntu14.04上搭建私有docker registry-Linux、如何在Ubuntu14.04上搭建私有docker registry-Linux的信息别忘了在本站进行查找哦。