Docker (四) - 仓库

一. 仓库概念

仓库即存放镜像的地方,分为公有仓库和私有仓库。Docker 的官方仓库为 hub.docker.com ,工作中我们也经常需要搭建公司内部的私有仓库。

Docker 提供了自己的仓库搭建工具,如我们前面介绍的 registry ,工作中更受欢迎的一个 Docker 私服搭建仓库工作为 Nexus

二. Nexus Repository 创建私有仓库

2.1 私服概述

私服是假设在局域网的一种特殊的远程仓库,目的是代理远程仓库及部署第三方构件。有了私服之后,当需要下载构件(Maven/NPM/Docker)时,直接请求私服,私服上存在则下载到本地仓库;否则,私服请求外部的远程仓库,将构件下载到私服,再提供给本地下载。

使用私服,可以避免所有开发人员都从远程互联网下载同一个构件,提升下载效率。另外一个重要的原因,远程仓库通常不会免费提供一个私有仓库,因此对于公司内部使用的构件,我们需要自己搭建私服。

2.2 下载、安装及配置

首先去官网 https://www.sonatype.com/nexus-repository-oss 下载
oss nexus 开源版本,下载后的文件是一个 nexus-xxx-unix.tar.gz 的压缩文件,如下:

下面开始安装 nexus,拷贝压缩包至 /usr/local/nexus 目录,并解压。解压后的文件包含 nexus-3.12.1-01sonatype-work 两个目录,sonatype-worknexus 的默认工作目录:

将 nexus 的脚本路径配置到环境变量中,打开 \etc\profile 在文件末尾添加如下内容:

使用 source \etc\profile 刷新环境变量,接下来即可运行 nexus run/start/stop/restart 一系列命令了。

下面运行 nexus start 在后台启动 nexus

上述命令启动时,提示不建议使用 root 用户运行 nexus ,因为 root 用户的权限大,可能会带来安全隐患。使用如下命令查看 nexus 启动情况:

也可以在浏览器中访问 http://192.168.255.128:8081/ 地址,admin 用户名的登录密码默认为 admin123 :

登录 nexus 后,系统默认已经帮我们创建好了一个 maven 的仓库。细心的读者会发现有个关于文件描述符的警告,消除这个警告,我们需要配置 Linux 内核的参数,vim /etc/security/limits.conf ,在文件末尾添加如下内容:

* soft nofile 65536
* hard  nofile 65536

然后重启 nexus 即可。

关于如何将 nexus 启动为服务以及防火墙等设置这里不再详细介绍,推荐一篇比较详细的博文:https://blog.csdn.net/nklinsirui/article/details/90029841

nexus 相关的配置主要集中在 3 个文件中:

  • nexus.rc 可以配置 run_as_user ,以消除启动程序时带来的警告。
  • nexus.vmoptions 用来配置 java 虚拟机的资源等信息。
  • nexus-default.properities 用来配置 IP、端口等应用的基本信息。

2.3 Nexus 常用功能

如下图所示,Repository 的类型一共有3种:grouphosted 以及 proxy

  • group 仓库组:Nexus 通过仓库组管理多个仓库,在项目组直接请求仓库组即可请求到组中的多个仓库。
  • hosted 宿主仓库:主要用于发布内部项目构建或第三方的项目构件(如购买的商业构件),以及无法从公用仓库获取的构件,如 Oracle 的 JDBC 驱动。
  • proxy 代理仓库:代理公共的远程仓库。

通常 hosted 仓库有如下3个常用类型(以Maven为例):

  • 3rd party:第三方依赖的仓库,由内部人员下载之后再发布上去;
  • releases:内部发布的正式稳定版本;
  • snapshots:内部发布的快照,为不稳定版本;

三. Nexus Repository 创建Docker私有仓库

3.1 创建 proxy docker repository

Nexus 是一个多仓库的管理软件,可以管理 maven、pypi、npm 以及 docker。下面,我们使用 Nexus 来搭建一个 Docker 私服。

点击新增 repository :

找到 docker 相关的 repository:

首先创建一个 docker(proxy) 作为中央仓库,命名为 docker-central:

Docker 仓库需要配置 Repository Connectors 端口,我们使用 http 协议,并允许 Docker 客户端使用 5000 端口连接 Nexus 仓库:

配置 Proxy,当私服仓库中没有请求的 docker 镜像时,将从 Remote 仓库下载,此处配置的是阿里云的镜像加速器。

注意:Docker index 必须为 Use Docker Hub,原因可以参考官方文档:https://help.sonatype.com/repomanager3/formats/docker-registry/proxy-repository-for-docker

点击保存,生成我们创建的私有 Docker 仓库:docker-central

接下来,我们需要配置我们本地的 Docker 服务,使其支持 http 协议上传和下载:vim /etc/containers/registries.conf

重启 docker 服务,使配置生效:

systemctl restart docker

查看 docker info:

若上述配置不生效,还可以配置 /etc/docker/daemon.json ,在json中添加 insecure-registries:

{"insecure-registries": ["192.168.255.128:5000"]}

载入配置并重启 docker 服务:

systemctl daemon-reload
systemctl restart docker

现在,我们就可以登录 docker 私有仓库了:

使用代理私服来下载镜像:

查看镜像:

在 Nexus 仓库中查看本地仓库中保存的镜像:

这样,当其它人员需要下载该镜像时,就会直接从 内网的私服仓库 下载,相比从互联网上下载,效率可以得到大大的提升。

3.2 创建 hosted docker repository

hosted 仓库用来存放我们自己上传的 docker 镜像,因此无需配置 proxy,定义一个名称,并指定 Repository Connectors 的端口即可:

下面让我们 commit 一个镜像,并上传到 docker-releases 仓库吧:

在 push 时报错了,原因是我们定义的是 http 5001,提交时使用的是 https 5001,因此我们只需要将 5001端口也添加到 insecure-registries 即可:

{"insecure-registries": ["192.168.255.128:5000","192.168.255.128:5001"]}

同理,重启 docker 服务使配置生效,然后上传镜像:

还是没有成功,不过这次是因为没有登录而已啦,登录授权成功后即可:

成功,在 Nexus 客户端已经可以看到我们刚刚上传的镜像了:

3.3 创建组 group docker repository

在3.2的例子中,上传到 nexus 的 personal-mysql 镜像位于 docker-releases 仓库,因此下载该镜像就必须只能使用 50001 端口,这样的话,当我们下载第三方镜像和内部自制镜像就需要指定不同的地址,非常繁琐。

使用 group 仓库可以组织我们的 hosted 和 proxy 仓库,group 中的 proxy 成员无需对外开放端口,只要 group 仓库对外开放一个公共的下载端口即可。

在开始下面的操作前,注意要先取消掉 docker-central 开放的端口5000,否则端口冲突,新的 repository 将无法保存:

创建一个名为 docker-public 的 group 仓库:

添加组成员:

现在,我们即可从开放的 5000 端口下载 docker-central 和 docker-releases 2 个仓库中的镜像了:

下载 docker-releases hosted 仓库中的镜像:

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,254评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,875评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,682评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,896评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,015评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,152评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,208评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,962评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,388评论 1 304
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,700评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,867评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,551评论 4 335
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,186评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,901评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,142评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,689评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,757评论 2 351

推荐阅读更多精彩内容