Harbor部署
下载和安装
- github下载地址:https://github.com/goharbor/harbor/releases
- 解压和配置
# 解压tgz包
tar -zxvf harbor-offline-installer-v2.10.1.tgz
# 进入目录后进行复制配置文件
cd harbor/
# 创建一个配置文件
cp harbor.yml.tmpl harbor.yml
# 修改配置文件
vim harbor.yml
在我的当前版本中默认密码修改后无法访问,需要查看数据库密码
# 进入容器 docker exec -it harbor-core bash # 查看密码 printenv | grep PASSWORD
- 安装Harbor
sh install.sh
如果在安装过程中出现下载失败等,是因为不是国内镜像,下面介绍下怎么配置多个镜像
编辑docker镜像文件
vim /etc/docker/daemon.json
在文件中加上
{ "registry-mirrors": ["https://registry.docker-cn.com","http://hub-mirror.c.163.com","http://f1361db2.m.daocloud.io","https://mirror.ccs.tencentyun.com","https://phtv51hj.mirror.aliyuncs.com"] }
启动和访问
启动相关命令
这个启动方式需要在你的目录/harbor/
下执行,我的当前目录是/root/harbor/
所以需要在这个目录下启动,否则会报找不到指定文件等错误。
# 关闭 Harbor
docker compose -f docker-compose.yml stop
# 启动 Harbor
docker compose -f docker-compose.yml up -d
访问Harbor
使用上面查看到的密码进行访问
登录后可以修改密码登相关操作
设置访问权限
为了简单,我将系统防火墙关了,设置docker安全访问权限。
编辑daemon.json文件
# 编辑/etc/docker/daemon.json文件
vim /etc/docker/daemon.json
填写内容
插入相关内容,填入你的IP地址
"insecure-registries"
配置安全推送地址,不设置无法推送!!!
数组中可以有多个地址。
{
"registry-mirrors": ["https://gwsg6nw9.mirror.aliyuncs.com"],
"insecure-registries": ["192.168.1.4:1100"]
}
设置完成后重启docker
# 重启docker
systemctl restart docker
部署Java程序
设置账户信息
在maven的settings.xml文件中配置harbor服务的账号信息
<server>
<id>harbor</id>
<username>admin</username>
<password>565386</password>
<configuration>
<email>1319900154@qq.com</email>
</configuration>
</server>
引入依赖插件
需要注意的是,我这个版本的harbor必须要新建项目名称,不能自动新建!!!
docker.registry.name
相关内容放入到properties
中,因为下面有很多重复使用,所以放在公共配置中。
将下面内容复制到项目的pom.xml文件中,是复制到服务的配置文件中,每次启动服务的项目中,不需要将这个放在实体类,也不要放在总项目的父工程。
微服务,每个都单独配置下,上传地址,地址为你的微服务使用的服务器地址。在docker.repostory
中配置和dockerHost
中配置你服务器的地址,注意端口号和IP地址不要写错。
如果你的项目是微服务项目请将这个内容复制到所有的微服务的工程pom文件中,如下面图片所示。这样在打包时会自动打包并上传微服务工程。
<properties>
<docker.repostory>192.168.1.4:1100</docker.repostory>
<docker.registry.name>spzx</docker.registry.name>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<configuration>
<skip>true</skip>
</configuration>
</plugin>
<plugin>
<groupId>com.spotify</groupId>
<artifactId>docker-maven-plugin</artifactId>
<version>1.2.2</version>
<!--将插件绑定在某个phase执行-->
<executions>
<execution>
<id>build-image</id>
<!--将插件绑定在package这个phase(阶段)上。也就是说,用户只需执行mvn package,就会自动执行mvn docker:build-->
<phase>package</phase>
<goals>
<goal>build</goal>
<goal>push</goal>
</goals>
</execution>
</executions>
<configuration>
<serverId>harbor</serverId>
<registryUrl>http://${docker.repostory}</registryUrl>
<!-- 配置docker主机地址 -->
<dockerHost>http://192.168.1.4:2375</dockerHost>
<!--指定生成的镜像名-->
<imageName>
${docker.repostory}/${docker.registry.name}/${project.artifactId}:${project.version}
</imageName>
<!-- 指定 dockerfile 路径-->
<dockerDirectory>${project.basedir}</dockerDirectory>
<!-- 是否跳过docker构建 -->
<skipDockerBuild>false</skipDockerBuild>
</configuration>
</plugin>
</plugins>
</build>
第一次使用可能吧不太清楚
要点一
- 因为我们放入的是私有仓库,所以格式一定要为
你的IP地址/项目名称/容器名称:容器tag
,如果不指定${docker.repostory}
那么会默认推送到公共仓库,不是私有仓库!!!- 例如:
192.168.1.4:1100/spzx/容器名称/tag版本
192.168.1.4:1100
是你的harbor地址,这样就会推送到harbor仓库中!!!<imageName> ${docker.repostory}/${docker.registry.name}/${project.artifactId}:${project.version} </imageName>
要点二
- 我这个版本的harbor是必须要新建项目名称的,如果不新建会推不上去!!!
开启docker远程访问
#修改该文件
vim /lib/systemd/system/docker.service
添加以下内容
# 方式一
ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2375 -H unix://var/run/docker.sock
# 方式二
ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2375 -H fd:// --containerd=/run/containerd/containerd.sock
重启服务
systemctl daemon-reload #重启守护进程
systemctl restart docker #重启docker
编写Dockerfile
Dockerfile仅供参考!!!
这里设置了系统时间,如果不需要可以删除
FROM openjdk:17
MAINTAINER bunny
#系统编码
ENV LANG=C.UTF-8 LC_ALL=C.UTF-8
# 设置时区,构建镜像时执行的命令
RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
RUN echo "Asia/Shanghai" > /etc/timezone
# 设定工作目录
WORKDIR /home/bunny
# 复制jar包
COPY target/*.jar /home/bunny/app.jar
#启动容器时的进程
ENTRYPOINT ["java","-jar","/home/bunny/app.jar"]
#暴露 8080 端口
EXPOSE 8501
maven打包
Dockerfile文件放在与pom文件同级。如下如图所示。
执行命令在总的父工程下执行
mvn clean package -DskipTests # 打包跳过测试
mvn clean package -DskipTests -DskipdockerBuild # 打包跳过测试的同时提高构建
推送完成以及要点
- 要配置maven的serve内容,因为推送需要登录!!!
- 注意pom.xml文件中
build
标签内容,里面推送格式必须为你的IP地址/项目名称/容器名称:容器tag
registryUrl
要加http开头并且是harbor的地址- dockerfile放在pom同级目录
相关重要命令
# 重启守护进程
systemctl daemon-reload
# 重启docker
systemctl restart docker
# 启动 Harbor
docker compose -f docker-compose.yml up -d
# 关闭 Harbor
docker compose -f docker-compose.yml stop
mvn clean package -DskipTests # 打包跳过测试
mvn clean package -DskipTests -DskipdockerBuild # 打包跳过测试的同时提高构建