Docker基础知识 (7) - 使用 Docker 部署 SpringBoot 项目


本文将完全复制 “ Springboot基础知识(08)- spring-boot-starter-web(Web启动器)” 里的 SpringbootWeb 项目的代码和配置到新项目 SpringbootWebDocker。

在新项目 SpringbootWebDocker 的基础上,修改部分配置和代码,Jar 打包 SpringbootWebDocker 项目,并使用 Docker 部署 Jar 包。

1. 修改 SpringbootWebDocker 项目

    1) 修改 pom.xml

 1         <?xml version="1.0" encoding="UTF-8"?>
 2         <project xmlns="http://maven.apache.org/POM/4.0.0"
 3                 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 4                 xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
 5                                     http://maven.apache.org/xsd/maven-4.0.0.xsd">
 6             <parent>
 7                 <groupId>org.springframework.boot</groupId>
 8                 <artifactId>spring-boot-starter-parent</artifactId>
 9                 <version>2.6.6</version>
10                 <relativePath/> <!-- lookup parent from repository -->
11             </parent>
12 
13             <modelVersion>4.0.0</modelVersion>
14 
15             <groupId>com.example</groupId>
16             <artifactId>SpringBootWebDocker</artifactId>
17             <version>1.0-SNAPSHOT</version>
18 
19             <name>SpringBootWebDocker</name>
20             <!-- FIXME change it to the project's website -->
21             <url>http://www.example.com</url>
22 
23             <properties>
24                 <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
25                 <maven.compiler.source>1.8</maven.compiler.source>
26                 <maven.compiler.target>1.8</maven.compiler.target>
27             </properties>
28 
29             <dependencies>
30                 <dependency>
31                     <groupId>junit</groupId>
32                     <artifactId>junit</artifactId>
33                     <version>4.11</version>
34                     <scope>test</scope>
35                 </dependency>
36 
37                 <dependency>
38                     <groupId>org.springframework.boot</groupId>
39                     <artifactId>spring-boot-starter-web</artifactId>
40                 </dependency>
41                 <dependency>
42                     <groupId>org.springframework.boot</groupId>
43                     <artifactId>spring-boot-starter-tomcat</artifactId>
44                     <scope>provided</scope>
45                 </dependency>
46                 <dependency>
47                     <groupId>org.springframework.boot</groupId>
48                     <artifactId>spring-boot-starter-test</artifactId>
49                     <scope>test</scope>
50                 </dependency>
51 
52             </dependencies>
53 
54             <build>
55                 <!-- 指定 jar 文件名 -->
56                 <finalName>SpringbootWebDocker</finalName>
57 
58                 <!-- spring-boot-maven-plugin 插件代码 -->
59                 <plugins>
60                 <plugin>
61                     <groupId>org.springframework.boot</groupId>
62                     <artifactId>spring-boot-maven-plugin</artifactId>
63                     <configuration>
64                     <mainClass>com.example.App</mainClass>
65                     </configuration>
66                     <executions>
67                     <execution>
68                         <goals>
69                         <goal>repackage</goal>
70                         </goals>
71                     </execution>
72                     </executions>
73                 </plugin>
74                 </plugins>
75 
76                 ...
77                 
78             </build>
79         </project>


    2) 修改 src/main/resources/application.properties 文件

        spring.main.banner-mode=off

        # Web server
        server.display-name=SpringBootWebDocker-Test
        #server.address=localhost
        server.port=9090

        # Logging
        logging.file.path=/home/docker/logs

        注:不要设置 server.address。

    3) 修改 src/main/java/com/example/controller/IndexController.java 文件

 1         package com.example.controller;
 2 
 3         import org.springframework.stereotype.Controller;
 4         import org.springframework.web.bind.annotation.RequestMapping;
 5         import org.springframework.web.bind.annotation.ResponseBody;
 6 
 7         @Controller
 8         public class IndexController {
 9             @ResponseBody
10             @RequestMapping("/hello")
11             public String hello() {
12                 return "Hello Page - SpringBoot Web Docker";
13             }
14         }


2. Jar 打包

    菜单 View -> Tool Windows -> Maven -> SpringbootWebDocker -> Lifecycle -> Clean & Package

        jar 包生成在目录 target/ 里

            SpringbootWebDocker.jar
            SpringbootWebDocker.jar.original  

    点击 IDEA 底部 Terminal 标签页,执行如下命令。

        java -jar target/SpringbootWebDocker.jar

           ...

            Spring boot web project     

        访问 http://localhost:9090/hello,页面显示:

            Hello Page - SpringBoot Web Docker

    注:SpringbootWebDocker.jar  包含依赖包,可以直接运行。SpringbootWebDocker.jar.original 里不包含依赖的包(要手动配置依赖环境),运行前要把文件名上的 “.original” 去掉。  

        打包的具体步骤可以参考 SpringbootWeb 项目的打包过程。 


3. 部署 Jar 包

    1) 部署环境

        IP 地址(本地测试环境):192.168.0.10

        操作系统:Linux CentOS 7.9
        
        Linux 用户:创建 Linux 用户 docker 来完成下文的部署工作 (Root 权限或 Sudo 权限,用户目录 /home/docker)
        
        Docker 版本:

            $ docker version

            Client: Docker Engine - Community
            Version:           20.10.7
            API version:       1.41
            Go version:        go1.13.15
            Git commit:        f0df350
            Built:             Wed Jun  2 11:58:10 2021
            OS/Arch:           linux/amd64
            Context:           default
            Experimental:      true

            Server: Docker Engine - Community
            Engine:
            Version:          20.10.7
            API version:      1.41 (minimum version 1.12)
            Go version:       go1.13.15
            Git commit:       b0f5bc3
            Built:            Wed Jun  2 11:56:35 2021
            OS/Arch:          linux/amd64
            Experimental:     false
            containerd:
            Version:          1.6.7
            GitCommit:        0197261a30bf81f1ee8e6a4dd2dea0ef95d67ccb
            runc:
            Version:          1.1.3
            GitCommit:        v1.1.3-0-g6724737
            docker-init:
            Version:          0.19.0
            GitCommit:        de40ad0


        注:搭建 Docker 环境可以参考 “Docker基础知识 (1) - Docker 架构、Docker 安装、Docker 镜像加速”。

            CentOS 7.9 下不需要安装 Java 环境。

    2) 创建 Dockerfile

        创建 /home/docker 目录,把 SpringbootWebDocker.jar 上传到该目录。

        创建 /home/docker/logs 文件夹存放日志文件,该路径与 SpringBoot 项目中 logging.file.path 设置的一致。
        
        创建 home/docker/Dockerfile 文件,内容如下:

            # 指定基础镜像
            FROM java:8
            # 维护者
            MAINTAINER Tester
            # 将文件添加到容器中,并更名为 webdocker.jar,这里也可使用 COPY 命令
            ADD SpringbootWebDocker.jar /home/docker/webdocker.jar
            #COPY SpringbootWebDocker.jar /home/docker/webdocker.jar
            # 指定端口,与 SpringBoot 项目配置文件中的端口一致
            EXPOSE 9090
            # 容器启动时,运行该程序
            ENTRYPOINT ["java", "-jar", "/home/docker/webdocker.jar"]

        注:这里使用 Java 8 基础镜像来演示,建议实际应用中使用较新的 Java 版本,可以访问 https://hub.docker.com/_/openjdk/tags 查询。


    3) 构建镜像

        $ cd /home/docker
        $ sudo docker build -t webdocker . 

            Sending build context to Docker daemon  17.54MB
            Step 1/5 : FROM java:8
            8: Pulling from library/java
            5040bd298390: Pull complete
            fce5728aad85: Pull complete
            76610ec20bf5: Pull complete
            60170fec2151: Pull complete
            e98f73de8f0d: Pull complete
            11f7af24ed9c: Pull complete
            49e2d6393f32: Pull complete
            bb9cdec9c7f3: Pull complete
            Digest: sha256:c1ff613e8ba25833d2e1940da0940c3824f03f802c449f3d1815a66b7f8c0e9d
            Step 1/5 : FROM java:8
            ---> d23bdf5b1b1b
            Step 2/5 : MAINTAINER Tester
            ---> Running in f12730dd28fe
            Removing intermediate container f12730dd28fe
            ---> 8c88f5dad7c2
            Step 3/5 : ADD SpringbootWebDocker.jar /home/docker/webdocker.jar
            ---> f31ac4ee62de
            Step 4/5 : EXPOSE 9090
            ---> Running in b686d8eba638
            Removing intermediate container b686d8eba638
            ---> 43590b39f0be
            Step 5/5 : ENTRYPOINT ["java", "-jar", "/home/docker/webdocker.jar"]
            ---> Running in 6ce28cff21e0
            Removing intermediate container 6ce28cff21e0
            ---> 210d3e763d71
            Successfully built 210d3e763d71
            Successfully tagged webdocker:latest

       注:运行命令时,注意最后的 “.”,不要遗漏。


        $ sudo docker images

            REPOSITORY                TAG        IMAGE ID       CREATED          SIZE
            webdocker                 latest     210d3e763d71   33 seconds ago   661MB
            java                           8            d23bdf5b1b1b    5 years ago          643MB
            ...

    4) 创建并启动容器

        $ sudo docker run -d -p 9090:9090 webdocker     # 只指定端口

        $ sudo docker run -d -p 9090:9090 --name webdocker -v /home/docker/logs:/home/docker/logs webdocker     # 指定端口、容器名、参数等

            6eda5554156b1bcc459d888ca92af844e164382e02f7f97edb81c7743f1b19ab
        
        $ sudo docker ps    # 查看容器

            CONTAINER ID   IMAGE           COMMAND         ...       PORTS                              NAMES
            6eda5554156b    webdocker "java -jar /home/doc…"    0.0.0.0:9090->9090/tcp       webdocker
            ...


        $ sudo docker exec -it webdocker /bin/bash   # 进入容器

            root@6eda5554156b:/# cd /home/docker
            root@6eda5554156b:/home/docker# ls

                logs  webdocker.jar            
            
            root@6eda5554156b:/home/docker# cd logs
            root@6eda5554156b:/home/docker/logs# ls -la
            
                total 8
                drwxr-xr-x 2 root root   58 Aug 31 01:55 .
                drwxr-xr-x 1 root root   18 Aug 30 23:58 ..
                -rw-r--r-- 1 root root  438 Aug 31 01:55 spring.log
                -rw-r--r-- 1 root root 1190 Aug 31 01:55 spring.log.2022-08-30.0.gz


        $ ls -la /home/docker/logs  # 在宿主主机上查看 log

            total 8
            drwxr-xr-x 2 root root   58 Aug 30 21:55 .
            drwxr-xr-x 3 root root   18 Aug 30 04:43 ..
            -rw-r--r-- 1 root root  438 Aug 30 21:55 spring.log
            -rw-r--r-- 1 root root 1190 Aug 30 21:55 spring.log.2022-08-30.0.gz


    5) 页面访问

        浏览器访问 http://192.168.0.10:9090/hello,显示如下内容:

            Hello Page - SpringBoot Web Docker


posted @ 2022-08-31 17:20  垄山小站  阅读(766)  评论(0编辑  收藏  举报