Harbor部署

Harbor部署

下载和安装

  1. github下载地址:https://github.com/goharbor/harbor/releases

在这里插入图片描述

  1. 解压和配置
# 解压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 

在这里插入图片描述

  1. 安装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>

第一次使用可能吧不太清楚

  1. 要点一

    • 因为我们放入的是私有仓库,所以格式一定要为你的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>
    
  2. 要点二

    • 我这个版本的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				# 打包跳过测试的同时提高构建

推送完成以及要点

  1. 要配置maven的serve内容,因为推送需要登录!!!
  2. 注意pom.xml文件中build标签内容,里面推送格式必须为你的IP地址/项目名称/容器名称:容器tag
  3. registryUrl要加http开头并且是harbor的地址
  4. 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				# 打包跳过测试的同时提高构建

相关推荐

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-03-30 00:52:02       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-03-30 00:52:02       106 阅读
  3. 在Django里面运行非项目文件

    2024-03-30 00:52:02       87 阅读
  4. Python语言-面向对象

    2024-03-30 00:52:02       96 阅读

热门阅读

  1. Element-UI中el-time-picker时间选择器无法选择

    2024-03-30 00:52:02       38 阅读
  2. js移除子元素

    2024-03-30 00:52:02       38 阅读
  3. 应用Druid解析SQL获取查询表字段、参数信息

    2024-03-30 00:52:02       37 阅读
  4. 5.89 BCC工具之tcptop.py解读

    2024-03-30 00:52:02       34 阅读
  5. PTA 道路管制

    2024-03-30 00:52:02       39 阅读
  6. VUE3从i18n国际化组件动态获取字符串

    2024-03-30 00:52:02       39 阅读
  7. 星图金融价值跃迁:打造“一体两翼”正向循环

    2024-03-30 00:52:02       43 阅读
  8. 5、Cocos Creator 动作系统

    2024-03-30 00:52:02       40 阅读
  9. Composer常见错误以及常用解决办法指南

    2024-03-30 00:52:02       39 阅读
  10. Vue模板引用(ref),超详细

    2024-03-30 00:52:02       44 阅读