3.docker仓库(Nexus、Harbor)的安装

本文目录

前言

docker 镜像官方仓库,地址:https://hub.docker.com。docker hub存放的是公开的镜像。针对我们开发的项目,他是私有的,所以并不能直接存放到 docker hub 中去。所以就需要去搭建一个私有的 docker 仓库了。

docker 仓库类比 maven 仓库即可。当我们自己的应用开发完成后,使用相对应的命令,将项目直接打包成一个镜像,并将镜像上传到仓库后,这样我们就可以在任何装有 docker 的机器上来下载该镜像,并运行为一个容器。

好处就是:并不需要再去手动打包镜像,便于镜像的重复利用。

在项目开发中,有如下几点好处:

  • 实现快速交付,可以更方便在其他机器上下载镜像运行容器
  • 可以存储公司内部私有镜像,避免暴露到外网
  • 提升镜像下载速度

市面上常见的docker仓库有以下4个:

  1. Docker Hub
  2. Aliyun
  3. Nexus
  4. Harbor

docker hub 自然就不用多说了,docker官方的公共仓库,私有项目来说,完全不能使用,否则代码就等于是开源了。剩下的3个,一步步来介绍吧,继续看下面👇👇👇

1.Aliyun 镜像仓库

阿里云镜像仓库,不需要我们手动搭建,比较简单,直接使用即可

step 1: 进入阿里云,搜索容器镜像服务,然后进入管理控制台,进入到个人实例

就可以看到镜像仓库了

step 2: 选择访问凭证,设置密码

step 3: 创建命名空间,选择自动创建仓库,仓库类型公开/私有视个人情况配置

step 4: 开始创建镜像仓库

命名空间选择刚刚创建的kmddsn,仓库名称spring-boot-demo,摘要spring-boot 案例镜像仓库,下一步,代码源选择本地仓库,点击按钮[创建镜像仓库] 即可完成仓库的创建。

step 5: 做个docker镜像,创建个spring-boot项目,里面来个HelloController,请求/hello 返回字符串 hello docker,这样一个 /hello 接口就完成了。完成以下3步,一个镜像就完成了

1.打jar包,传至linux服务器spring-boot-demo文件夹下

2.编写Dockerfile(内容如下,Dockerfile看不懂?不会写?自己学去)

Dockerfile文件内容:

shell 复制代码
# 关联基础镜像 => jdk
FROM openjdk:8
# 将项目 jar 包拷贝到容器中
ADD *.jar app.jar
# 配置项目环境变量
ENV APP_OPTS=""
# JVM 环境变量
ENV JVM_OPTS="-Duser.timezone=Asia/Shanghai -Xms128m -Xmx128m"
# 暴露端口
EXPOSE 8888
# 设置启动时的命令
ENTRYPOINT ["sh", "-c", "java $JVM_OPTS -jar /app.jar $APP_OPTS"]

3.根据Dockerfile文件,使用 docker build -t springboot-docker:1.0.0 ./ 命令构建镜像(最后一个./是Dockerfile所在目录,因为 docker build 命令实在 Dockerfile 目录下执行的,所以就是一个 ./)

通过docker images 命令,查看构建的spring-boot-docker:1.0.0镜像

step 6: 参考 step 4 操作指南,推送镜像至 aliyun 仓库(步骤中[]在修改时同步去掉,修改后是-username=abc,而不是-username=[abc],以下是我个人的仓库名称、命名空间等,请以你自己的操作指南 为准)

1.登录阿里云Docker Registry

docker login --username=[用户名] registry.cn-hangzhou.aliyuncs.com

2.给镜像打标签

docker tag [ImageId] registry.cn-hangzhou.aliyuncs.com/kmddsn/spring-boot-demo:[镜像版本号]

3.推送镜像至阿里云仓库

docker push registry.cn-hangzhou.aliyuncs.com/kmddsn/spring-boot-demo:[镜像版本号]

推送截图:

step 7: 从 aliyun 仓库拉取镜像

1.登录阿里云Docker Registry

docker login --username=[用户名] registry.cn-hangzhou.aliyuncs.com

2.从aliyun 仓库拉取镜像

docker push registry.cn-hangzhou.aliyuncs.com/kmddsn/spring-boot-demo:[镜像版本号]

拉取截图:

2.Nexus

Java 开发中的那个 Maven 私服,对对对,就是这个 Nexus。Nexus它也可以应用于 docker 仓库,但是就需要我们手工来搭建了。

1.Nexus 私服搭建

shell 复制代码
# step 1:创建nexus持久化目录
mkdir -p /opt/docker/nexus
# 开放权限
chmod 777 -R /opt/docker
# 启动 nexus 容器
docker run -d --restart=always -p 8868:8081 -p 5000:5000 -p 5001:5001 --name nexus -v /opt/docker/nexus:/nexus-data sonatype/nexus3
# PS:命令解释
# -d 后台启动   
# --restart=always 容器只要异常关闭就启动
# -p 8868:8081  容器8081端口映射本机8868端口
# -p 5000:5000  docker-snapshots仓库推送、拉取端口映射(nexus中,5000端口只用于推送镜像,看不懂继续往下看)
# -p 5001:5001  docker-public仓库通用访问端口映射,用来拉取镜像(nexus仓库中,5001端口只用于拉取镜像,看不懂继续往下看)
# --name nexus  自定义容器名称
# -v /opt/docker/nexus:/nexus-data  数据卷绑定:容器目录/nexus-data与本地/opt/docker/nexus目录绑定
# sonatype/nexus3   镜像名称

# 查看admin登录默认密码(也可以在主机/opt/docker/nexus/admin.password 查看)
docker exec -it nexus /nexus-data/admin.password

注意:启动 nexus 容器,这个过程会比较漫长,我们可以通过 docker logs [容器ID] -f 来查看 nexus 启动日志。当只有看到下面这个图片中的内容时,nexus 才算真正启动完成。然后我们通过 xx.xx.xx.xx:8868 就可以访问 nexus了

2.登录控制台

3.配置nexus仓库

step 1: 添加Blob Store 存储器(为docker创建一个存储器, Type选择File,Name输入docker 即可)

step 2: 添加 docker 相关仓库 repositories(点击Create repository进行添加,添加完成后如图所示)

repositories说明:(参考maven已有repositories介绍,因为刚开始进来maven相关的库是已经存在的)

  1. maven-public:它的类型是group(分组)。即:仓库所有的访问读取入口,都是从 public 开始,读取会分别从 snapshots、releases、central 中都去找,只要其中一个找到就读取回来),就是本地仓库找不到,就去配置的网络仓库中去找【网络仓库地址,会在docker-public中配置阿里云加速镜像地址】

  2. maven-releases 发布后的jar包,放到release中

  3. maven-snapshots 测试的jar包,放到snapshots中

  4. maven-central 它的类型是proxy(代理)。代理不存数据,是只读的。这个类似配置maven仓库时我们配置的一个aliyun仓库,帮我们去代理到aliyun仓库

    step 2.1:docker各个仓库说明

    step 2.2:hosted类型仓库创建

    step 2.3:proxy类型仓库创建

    step 2.4:group类型仓库创建

    至此,nexus 仓库配置完成。

4.配置nexus仓库地址为安全的镜像地址

docker 默认非 http 请求均为不信任的请求,都不允许访问。(如果nexus仓库地址是https,则不需要此项配置)

通过 vi /etc/docker/daemon.json 修改配置,添加:

"insecure-registries": ["192.168.204.102:5000", "192.168.204.102:5001"]

修改配置后,执行以下2条命令:

重新加载配置:systemctl daemon-reload

重启docker服务:systemctl restart docker

5.镜像推送至nexus仓库

shell 复制代码
# step 1:登录nexus仓库  (5000端口可推送、可拉取镜像,此处定义5000端口用于推送镜像,5001端口用于拉取镜像,因为5000端口只能拉取自己推送上去的,不能拉取其他网络镜像,5001则可以)
docker login -u admin 192.168.204.102:5000
# step 2:为镜像打一个tag标签(仓库路径:192.168.204.102:5000   仓库名称:spring-boot-demo)
docker tag [ImageId] 192.168.204.102:5000/spring-boot-demo:[镜像版本号]
# step 3:镜像推送至nexus仓库
docker push 192.168.204.102:5000/spring-boot-demo:[镜像版本号]

推送成功截图

6.拉取nexus仓库镜像

shell 复制代码
# step 1:登录nexus仓库  (5001端口用于拉取镜像)
docker login -u admin 192.168.204.102:5001
# step 2:从nexus仓库拉取镜像
docker pull 192.168.204.102:5001/spring-boot-demo:[镜像版本号]

拉取成功截图

3.Harbor

除了 Docker Hub 以外最早的一个比较受欢迎的 Docker 企业级 Registry 服务器。Nexus 和 Aliyun 都只是能推送和拉取,Harbor就不同了,Harbor 还是中文哦!但是 Harbor 相对来说比较费资源。推荐使用 Harbor,个人觉得更好用

注意:使用 Harbor 必须要先安装 docker 以及 docker-compose

1.Docker Compose 安装

注意:需要注意的是,docker-compose 与docker有版本对应关系,因此在使用docker-compose时需要选择与已安装的docker版本相对应的docker-compose版本,否则可能会出现不兼容或无法正常工作的问题。但是!我在官网一致没有找到 docker 和 docker-compose 的对应关系表啊,有知道的小伙伴能评论发我一下吗??我只找到个 docker compose 发行版本,依赖的 docker 需要升级的版本,docker compose 发行版本地址:https://docs.docker.com/compose/release-notes。如下图所示:

因为 docker 使用的是最新版本:24.0.6,所以 docker compose 也使用了最新版本 2.21.0
Docker Compose 下载地址:https://github.com/docker/compose/releases/download/v2.21.0/docker-compose-linux-x86_64

shell 复制代码
# step 1:下载 docker compose 最新版本
curl -L "https://github.com/docker/compose/releases/download/v2.21.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
# $(uname -s)  系统内核,即:linux
# $(uname -m)  系统架构,即:x86_64

# step 2:将可执行权限应用于二进制文件
sudo chmod +x /usr/local/bin/docker-compose

# step 3:创建软链
sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose

# step 4:测试是否安装成功
docker-compose --version

2.Harbor安装

Harbor下载地址:https://github.com/goharbor/harbor/releases/download/v2.9.0/harbor-offline-installer-v2.9.0.tgz

shell 复制代码
# 具体下载到哪一个目录,自己手工指定,本次存放目录:/opt/docker/harbor
# step 1:解压缩 harbor-offline-installer-v2.9.0.tgz
tar zxvf harbor-offline-installer-v2.9.0.tgz

# step 2:进入解压缩后的harbor目录,将配置文件赋值一份
cp harbor.yml.tmpl harbor.yml

# step 3:编辑harbor.yml
vim harbor.yml
# 修改hostname为本机IP:192.168.204.102
# 修改port端口:8858
# 修改Harbor密码,默认为Harbor123456,此处不修改
# 如果没有https配置,把https相关的配置注释掉[port,certificate,private_key],否则step 4会提示错误

# step 4:开始安装前的预编译操作
bash prepare
# step 5:开始安装(安装harbor镜像,对资源要求还是有一定的要求,配置太低可能出现不可预知的错误)
bash install.sh

到这里,说明 harbor 安装成功

访问控制台:http://192.168.204.102:8858,输入用户名:admin、密码:Harbor12345

3.配置Harbor仓库地址为安全的镜像地址

docker 默认非 http 请求均为不信任的请求,都不允许访问。(如果nexus仓库地址是https,则不需要此项配置)

通过 vi /etc/docker/daemon.json 修改配置,添加:

"insecure-registries": ["192.168.204.102:8858"]


修改配置后,执行以下2条命令:

重新加载配置:systemctl daemon-reload

重启docker服务:systemctl restart docker
重启后,可以通过 docker info 命令,查看 Insecure Registries 检查受信任仓库是否配置成功

重启后,如果发现 harbor 自动重启失败,可以动过 docker psdocker logs [容器ID] 查看错误信息。

如果遇到 harbor-jobservice 服务有这个错误, 检查服务里面是否配置有代理(关了代理重启docker,就ok了)
错误如下:Failed on load rest config err:Get "http://core:8080/api/internal/configurations": dial tcp 172.22.0.8:8080: connect: connection refused

4.创建项目

点击项目--->新建项目,我创建了一个spring-boot-demo

除此之外,我们也可以进行用户管理,添加用户,然后进入新建的项目spring-boot-demo,进行成员的配置,允许哪些成员有哪些权限等。此处则不进行配置,直接使用admin用户操作。

5.镜像推送至Harbor仓库

shell 复制代码
# step 1:登录nexus仓库  (5000端口可推送、可拉取镜像,此处定义5000端口用于推送镜像,5001端口用于拉取镜像,因为5000端口只能拉取自己推送上去的,不能拉取其他网络镜像,5001则可以)
docker login -u admin 192.168.204.102:8858
# step 2:为镜像打一个tag标签(Harbor的规则为:仓库路径/项目名称/镜像名称:镜像版本号)
#(仓库路径:192.168.204.102:8858   项目名称:spring-boot-demo   镜像名称:my-boot-docker)
docker tag [ImageId] 192.168.204.102:8858/spring-boot-demo/my-boot-docker:[镜像版本号]
# step 3:镜像推送至nexus仓库
docker push 192.168.204.102:8858/spring-boot-demo/my-boot-docker:[镜像版本号]

推送成功截图

6.拉取Harbor仓库镜像

shell 复制代码
# step 1:登录Harbor仓库  
docker login -u admin 192.168.204.102:8858
# step 2:从Harbor中拉取镜像
docker pull 192.168.204.102:8858/spring-boot-demo/my-boot-docker:1.0

step 2 也可以从Harbor中复制拉取命令,但是下载下来的镜像,通过docker images 查看TAG是

复制的命令如下:

shell 复制代码
docker pull 192.168.204.102:8858/spring-boot-demo/my-boot-docker@sha256:3a8799e83f17342361e54aa5eb099c77cd7d68d9d4c1fc179ca36f1debf2663a

拉取成功截图

下图是在 192.168.204.101 机器上进行的镜像拉取操作(拉取192.168.204.102:8858 Harbor 的镜像)



本文结束,谢谢

相关推荐
树下一少年1 年前
docker在阿里云上的镜像仓库管理
阿里云·docker·容器·docker镜像·docker仓库
Linux猿1 年前
Docker 私有仓库 harbor 搭建
运维·docker·容器·k8s·harbor仓库·docker本地仓库