Docker学习之搭建私有镜像仓库

spring 1年前 ⋅ 540 阅读



过节之前来一发,又是许久没整理笔记了,今天跟大家聊聊Docker如何搭建私有仓库的几种方式。首先我们来回顾一下之前讲到的Doker 平台的基本构成。

Doker 平台的基本构成

6.jpg

Docker 平台基本上由三部分组成:

  • 客户端:用户使用 Docker 提供的工具(CLI 以及 API 等)来构建,上传镜像并发布命令来创建和启动容器
  • Docker 主机:从 Docker registry 上下载镜像并启动容器
  • Docker registry:Docker 镜像仓库,用于保存镜像,并提供镜像上传和下载
  • 后面的文章会具体分析。

搭建方式

与Mavan的管理一样,Docker不仅提供了一个中央仓库,同时也允许我们使用registry搭建本地私有镜像仓库。

使用私有仓库有许多优点:

  • 节省网络带宽,针对于每个镜像不用每个人都去中央仓库上面去下载,只需要从私有仓库中下载即可;
  • 提供镜像资源利用,针对于公司内部使用的镜像,推送到本地的私有仓库中,以供公司内部相关人员使用。

方式一(registry镜像)

环境:为了测试安装方便,这里准备了一台装有Docker的云服务器。

搭建私有仓库:

# 下载registry镜像
$ sudo docker pull registry
# 通过该镜像启动一个容器
$ sudo docker run -d -p 8082:8082 registry
# 映射镜像路径至宿机器、放置容器删除、镜像丢失:
$ sudo docker run -d -p 8082:8082 -v /opt/data/registry:/tmp/registry registry

修改配置并重启Docker

vi /etc/docker/daemon.json
{
   "registry-mirrors": ["172.17.120.102:8082"],
   "insecure-registries":["172.17.120.102:8082"]
  
}
# 重启 docker 服务
systemctl restart docker

测试仓库Push/Pull:

# 首先pull一个比较小的镜像(busybox)来测试
docker pull busybox
# 修改一下该镜像的tag
$ docker tag busybox 172.17.120.102:8080/busybox
# 上传镜像到私有仓库。
$ docker push  172.17.120.102:8082/busybox

到此就搭建好了Docker私有仓库,但是如上搭建的仓库是不需要加密认证的,当然你可以通过证书或者Nginx实现认证访问。下面介绍一下基于Nexus 3搭建的Docker私有仓库。

方式二(Nexus 3)

nexus.png

Nexus简介

Nexus是一个多功能的仓库管理系统,是企业常用的私有仓库服务器软件。目前常被用来作为Maven私服、Docker私服。

优点

  • 安装简单,并且有官方Docker镜像
  • 用户界面,并提供REST API
  • 支持浏览、检索以及检查机制
  • 支持npm与bower以及Raw repositories、NuGet repositories

总之Nexus物美价廉,又提供功能全面的oss版,加之支持种类众多的依赖管理,又可以统一管理docker镜像。

安装

参考之前写的一篇博客:本地私服仓库nexus3.3.1使用手册 。当然,这里我们有更简洁的安装方式,由于nexus3+依赖于JDK1.8,可能有不少企业系统上安装的还是1.7甚至是1.6版本,这里我们选择使用Docker镜像安装。

下载安装:

# 下载nexus3镜像(pull前请更换镜像加速器,否则可能无法下载)
$ sudo docker pull sonatype/nexus3
# 通过该镜像启动一个容器
$ sudo docker run -d -p 8081:8081 -p 8082:8082 --name nexus sonatype/nexus3
# 可能需要一些时间(2-3分钟)才能在新容器中启动该服务。一旦Nexus准备就绪,您可以确定日志以确定结果:
$ sudo docker logs -f nexus
# 测试 如果出现pong说明启动成功
$ curl -u admin:admin123 http://localhost:8081/service/metrics/ping

注意事项:

  • 可能会出现无法启动的问题,由于云服务器只有1G内存,剩余也有几十MB的样式,显然是无法跑起来的。

1213.png

  • Nexus的安装是/opt/sonatype/nexus。
  • 持久目录,/nexus-data用于配置,日志和存储。该目录需要由作为UID 200运行的Nexus进程写入。
  • 环境变量用于将JVM参数传递给启动脚本
$ docker run -d -p 8081:8081 --name nexus -e INSTALL4J_ADD_VM_PARAMS="-Xms2g -Xmx2g -XX:MaxDirectMemorySize=3g  -Djava.util.prefs.userRoot=/some-other-dir" sonatype/nexus3
  • 控制Nexus访问目录,NEXUS_CONTEXT,默认为/
docker run -d -p 8081:8081 --name nexus -e NEXUS_CONTEXT=nexus sonatype/nexus3
  • 持久数据
$ mkdir /opt/data/nexus-data && chown -R 200 /opt/data/nexus-data
$ docker run -d -p 8081:8081 --name nexus -v /opt/data/nexus-data:/nexus-data sonatype/nexus3

创建本地仓库:

docker-nexus.png

Nexus配置:

项目地址端口
Nexus UI8081
private repo8082
URLhttp://192.168.1.180:8081/
更多内容请访问:IT源点

相关文章推荐

全部评论: 0

    我有话说: