Docker 部署启动 Spring boot 项目

目录

本地准备 Spring boot 项目源码

打包 Spring Boot 项目到 Docker

查看 docker 容器日志

查看 log4j2 文件日志


Docker 概述 与 CentOS 上安装、卸载、启动:没有安装 docker 的,需要先安装 docker

CentOS 7.x 安装 Maven:因为后期需要在 linux 上使用 maven 打包项目,所以必须先安装 maven

Docker 安装 Java Jdk 8:因为 docker 中运行 java 项目,必须先有 java 运行环境。

本地准备 Spring boot 项目源码

1、创建 Spring boot 项目,为了方便测试,导入 spring-boot-starter-web 模块,做 http 请求。

2、pom.xml 文件中引入 docker 依赖:

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <java.version>1.8</java.version>
        <!--自定义 docker 镜像前缀,类似 docker.io/mysql 中的 docker.io-->
        <docker.image.prefix>wangmaoxiong.com</docker.image.prefix>
    </properties>
...
    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>

            <!-- docker 插件,用于 maven 打包时生成 docker 镜像 -->
            <plugin>
                <groupId>com.spotify</groupId>
                <artifactId>docker-maven-plugin</artifactId>
                <version>1.0.0</version>
                <configuration>
                    <imageName>${docker.image.prefix}/${project.artifactId}</imageName>
                    <!-- dockerfile 配置文件所在的目录-->
                    <dockerDirectory>src/main/docker</dockerDirectory>
                    <imageTags>${project.version}</imageTags>
                    <resources>
                        <resource>
                            <targetPath>/</targetPath>
                            <directory>${project.build.directory}</directory>
                            <include>${project.build.finalName}.jar</include>
                        </resource>
                    </resources>
                </configuration>
            </plugin>
        </plugins>
    </build>

3、在 src/mian 目录下新建 docker 子目录,然后在 docker 目录下创建 dockerfile 文件(不需要后缀名),这个路径需要与 pom.xml 文件中指定的路径一致,内容如下:

FROM docker.io/java:8
VOLUME /tmp/tomcat
ADD java-se-1.0-SNAPSHOT.jar java-se-1.0.jar
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/java-se-1.0.jar"]

FROM:指定 docker 中已经下载好的 java jdk 镜像,docker.io/java:8 是已经下载好的 jdk 8 镜像,根据实际情况指定。
VOLUME:自定义一个临时目录,用于存储 tomcat 工作日志。
ADD:复制文件并且重命名文件(根据自己实际情况指定)。
   java-se-1.0-SNAPSHOT.jar 是 package 或者 install 命令打好的包名称,本地就能看到,在 linux 服务器上也会使用  maven 命令对源码进行打包。
   java-se-1.0.jar:表示将 linux 上 maven 打好的包复制到 docker 容器中,同时重命名。
ENTRYPOINT:初始化配置或者自定义配置。

4、为了更贴合实际情况,引用 sfl4j + log4j2 日志框架记录日志(其他日志框架也是同理),需要注意的是日志文件存储的位置推荐指定为绝对路径,比如类路径下  log4j2.xml 中指定日志存储路径如下:

        <!--文件存储文件设置-->
        <!--fileName:文件存储路径及名称,可以是绝对路径或者相对路径; 存储的永远是最新的日志信息-->
        <!--filePattern:当 fileName 指定的文件大小超过限制,就会根据此文件名规则新建存档目录与文件-->
        <RollingFile name="RollingFileInfo" fileName="/home/wangmx/logs/java-se/java-se.log"
                     filePattern="/home/wangmx/logs/java-se/$${date:yyyy-MM}/info-%d{yyyy-MM-dd}-%i.log">
            <!--日志文件中日志信息的格式-->
            <PatternLayout pattern="[%d{HH:mm:ss:SSS}] [%p] - [%t] - %l - %m%n"/>
            <Policies>
                <TimeBasedTriggeringPolicy/>
                <!--日志文件大小超过多少时进行存档-->
                <SizeBasedTriggeringPolicy size="500 MB"/>
            </Policies>
        </RollingFile>

5、提供一个控制层访问接口,同时使用 slf4j 记录一些日志,随便写点东西,能访问测试就行。

6、application.yml 配置文件指定 server.port=8317

打包 Spring Boot 项目到 Docker

1、将本地需要发版的项目源码整个上传到远程服务器中,需要在 Linux 上借助 maven 将它打包到 docker 中。

2、上传后切换到项目的根目录,然后打包:mvn clean package -Dmaven.test.skip=true docker:build

       clean package:表示先清理缓存,然后打包
       -Dmaven.test.skip=true:表示跳过测试文件
       docker:build:表示将打好的包构建到 docker 容器中作为镜像 

3、打包看到 BUILD SUCCESS 表示成功,此时即可看到构建好的镜像:docker images

4、拥有了镜像了,则与使用普通的镜像无异了,可以开始运行它:docker run --name java-se-1.0 -p 8317:8317 -d 7d1bc7859b6d

      --name:表示自定义容器名称
      -p:表示端口映射,第一个是 Linux 外部端口,第二个是 Dcoker 内部端口
      -d:表示程序后台运行
      7d1bc7859b6d:镜像id(image id),根据实际情况指定

5、最后一步,Linux 防火墙开启对外的端口:

        firewall-cmd --zone=public --list-port       #查看防火墙开放的端口
        firewall-cmd --zone=public --add-port=8317/tcp --permanent    #防火墙开放 8317 端口
        firewall-cmd --reload                               #重启防火墙,端口配置才能生效

6、最后即可远程访问 docker 中启动好的 Spring boot 服务了。

查看 docker 容器日志

1、线上的项目查看日志信息是绝对有的,方式1是直接查看容器日。

2、查看容器日志:docker logs container-name/container-id,比如:docker logs -f --tail=100 java-se-1.0  ,实时查看最新的 100 条日志信息.

docker logs -f -t --since="2021-06-13" --tail=100 java-se-1.0        -- 查看 2021-06-13 日期后的 100 条日志,实时跟踪日志,显示时间戳
docker logs -f -t --since="2021-06-13T16:20:00" --tail=100 java-se-1.0   -- 查看 2021-06-13 16:20:00 时刻后的 100 条日志,实时跟踪日志,显示时间戳
docker logs -f -t --since="2021-06-13" java-se-1.0      -- 查看 2021-06-13 日期后的日志,实时跟踪日志,显示时间戳
docker logs --since 30m java-se-1.0  -- 查看最近 30 分钟内的日志

查看 log4j2 文件日志

1、应用中使用的日志框架 log4j2、logback 等等输出的日志文件如何查看呢?因为服务是在 docker 容器中运行的,所以日志信息也是存储在 docker 容器中。

2、先要进入 docker 容器:docker exec -it java-se-1.0 /bin/bash ,java-se-1.0 是容器名称,根据实际情况指定。

3、然后进入日志存储目录下即可看到,比如:fileName="/home/wangmx/logs/java-se/java-se.log",则,cd /home/wangmx/logs/java-se.

4、实时查看日志信息,显示最后 100 条信息:tail -f -n 100 java-se.log

5、也可以使用 vim 编辑器查看(Docker 安装 Vim 编辑器)。

6、有时候使用 vim 还是不能满足需求,比如我们需要把日志文件导出来研究一下:Docker 容器与宿主服务器文件复制

  • 2
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

蚩尤后裔-汪茂雄

芝兰生于深林,不以无人而不芳。

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值