本文目录
- 前言
- [1.Aliyun 镜像仓库](#1.Aliyun 镜像仓库)
- 2.Nexus
-
- [1.Nexus 私服搭建](#1.Nexus 私服搭建)
- 2.登录控制台
- 3.配置nexus仓库
- 4.配置nexus仓库地址为安全的镜像地址
- 5.镜像推送至nexus仓库
- 6.拉取nexus仓库镜像
- 3.Harbor
-
- [1.Docker Compose 安装](#1.Docker Compose 安装)
- 2.Harbor安装
- 3.配置Harbor仓库地址为安全的镜像地址
- 4.创建项目
- 5.镜像推送至Harbor仓库
- 6.拉取Harbor仓库镜像
前言
docker 镜像官方仓库,地址:https://hub.docker.com。docker hub存放的是公开的镜像。针对我们开发的项目,他是私有的,所以并不能直接存放到 docker hub 中去。所以就需要去搭建一个私有的 docker 仓库了。
docker 仓库类比 maven 仓库即可。当我们自己的应用开发完成后,使用相对应的命令,将项目直接打包成一个镜像,并将镜像上传到仓库后,这样我们就可以在任何装有 docker 的机器上来下载该镜像,并运行为一个容器。
好处就是:并不需要再去手动打包镜像,便于镜像的重复利用。
在项目开发中,有如下几点好处:
- 实现快速交付,可以更方便在其他机器上下载镜像运行容器
- 可以存储公司内部私有镜像,避免暴露到外网
- 提升镜像下载速度
市面上常见的docker仓库有以下4个:
- Docker Hub
- Aliyun
- Nexus
- 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相关的库是已经存在的)
maven-public:它的类型是group(分组)。即:仓库所有的访问读取入口,都是从 public 开始,读取会分别从 snapshots、releases、central 中都去找,只要其中一个找到就读取回来),就是本地仓库找不到,就去配置的网络仓库中去找【网络仓库地址,会在docker-public中配置阿里云加速镜像地址】
maven-releases 发布后的jar包,放到release中
maven-snapshots 测试的jar包,放到snapshots中
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 ps
和docker 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是
复制的命令如下:
shelldocker pull 192.168.204.102:8858/spring-boot-demo/my-boot-docker@sha256:3a8799e83f17342361e54aa5eb099c77cd7d68d9d4c1fc179ca36f1debf2663a
拉取成功截图
下图是在 192.168.204.101 机器上进行的镜像拉取操作(拉取192.168.204.102:8858 Harbor 的镜像)
本文结束,谢谢