1.SpringBoot-docker-hello

1.1 项目说明

主要通过 Dockerfile 自定义运行 简易 SpringBoot 项目。只要能访问到项目内,并输出指定内容即可

1.2 步骤

  • 编写简易 springboot 项目
  • 打包
  • 编写 Dockerfile
  • 上传,构建
  • 运行

1.3 主要内容

编写简易 springboot 项目

只需要在创建 springboot 项目时,加上 web 依赖即可

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  3. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
  4. <modelVersion>4.0.0</modelVersion>
  5. <groupId>com.example</groupId>
  6. <artifactId>springboot-docker-hello-demo</artifactId>
  7. <version>0.0.1-SNAPSHOT</version>
  8. <name>springboot-docker-hello-demo</name>
  9. <description>springboot-docker-hello-demo</description>
  10. <properties>
  11. <java.version>1.8</java.version>
  12. <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  13. <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
  14. <spring-boot.version>2.3.7.RELEASE</spring-boot.version>
  15. </properties>
  16. <dependencies>
  17. <dependency>
  18. <groupId>org.springframework.boot</groupId>
  19. <artifactId>spring-boot-starter-web</artifactId>
  20. </dependency>
  21. <dependency>
  22. <groupId>org.springframework.boot</groupId>
  23. <artifactId>spring-boot-starter-test</artifactId>
  24. <scope>test</scope>
  25. <exclusions>
  26. <exclusion>
  27. <groupId>org.junit.vintage</groupId>
  28. <artifactId>junit-vintage-engine</artifactId>
  29. </exclusion>
  30. </exclusions>
  31. </dependency>
  32. </dependencies>
  33. <dependencyManagement>
  34. <dependencies>
  35. <dependency>
  36. <groupId>org.springframework.boot</groupId>
  37. <artifactId>spring-boot-dependencies</artifactId>
  38. <version>${spring-boot.version}</version>
  39. <type>pom</type>
  40. <scope>import</scope>
  41. </dependency>
  42. </dependencies>
  43. </dependencyManagement>
  44. <build>
  45. <plugins>
  46. <plugin>
  47. <groupId>org.apache.maven.plugins</groupId>
  48. <artifactId>maven-compiler-plugin</artifactId>
  49. <version>3.8.1</version>
  50. <configuration>
  51. <source>1.8</source>
  52. <target>1.8</target>
  53. <encoding>UTF-8</encoding>
  54. </configuration>
  55. </plugin>
  56. <plugin>
  57. <groupId>org.springframework.boot</groupId>
  58. <artifactId>spring-boot-maven-plugin</artifactId>
  59. <version>2.3.7.RELEASE</version>
  60. <configuration>
  61. <mainClass>com.example.demo.SpringbootDockerHelloDemoApplication</mainClass>
  62. </configuration>
  63. <executions>
  64. <execution>
  65. <id>repackage</id>
  66. <goals>
  67. <goal>repackage</goal>
  68. </goals>
  69. </execution>
  70. </executions>
  71. </plugin>
  72. </plugins>
  73. </build>
  74. </project>

controller 层代码

  1. package com.example.demo.controller;
  2. import org.springframework.web.bind.annotation.RequestMapping;
  3. import org.springframework.web.bind.annotation.RestController;
  4. @RestController
  5. public class HelloController {
  6. @RequestMapping("/hello")
  7. public String hello(){
  8. return "hello docker ";
  9. }
  10. }

也即 项目启动后 直接访问 ip:端口/hello 即可

Dockerfile 编写

  1. FROM java:8
  2. COPY *.jar /app.jar
  3. CMD ["--server.port=8080"]
  4. EXPOSE 8080
  5. ENTRYPOINT ["java","-jar","/app.jar"]

以上内容就是将 项目同目录下的 jar 后缀都一并编译打包成一个全新的 jar 包,包名为 app.jar,并且向外暴露 8080 端口

1.4 构建,运行

构建

  1. docker build -t 自定义容器名 .

运行

  1. docker run -d 自定义容器名

查看

  1. docker ps
  2. //查看到该容器分配的端口信息

测试

第一种方法(本地测试):

  1. curl localhost:端口/hello
  2. >>hello docker

第二种方法:(浏览器测试):

该方法如果是远程,记得开启防火墙相关端口

2_Docker基础-项目 - 图1


2.springboot-redis-compose

2.1 项目说明

主要测试使用 docker-compose 一次性编排 多个 docker。

本次项目是结合 springBoot web 和 redis。在浏览器每次刷新都会都有一次计数器

2.2 步骤

  • 编写简易项目(代码,配置文件)
  • 打包SpringBoot 项目
  • 编写Dockerfile
  • 编写 docker-compose.yml
  • 上传,编译,运行镜像

2.3 主要内容

  • SpringBoot 项目内容

    • Java 代码

      1. @RestController
      2. public class HelloController {
      3. @Autowired
      4. private StringRedisTemplate stringRedisTemplate;
      5. @RequestMapping("/hello")
      6. public String hello() {
      7. Long count = stringRedisTemplate.opsForValue().increment("count");
      8. return "hello,the count is :" + count;
      9. }
      10. }
    • 配置文件

      1. server:
      2. port: 8080
      3. spring:
      4. redis:
      5. host: redis #此处不能省略,省略就默认用 localhost,后续 项目是连接 redis 容器,需要用容器名称连接
    • pom.xml

      1. <dependency>
      2. <groupId>org.springframework.boot</groupId>
      3. <artifactId>spring-boot-starter-web</artifactId>
      4. </dependency>
      5. <dependency>
      6. <groupId>org.springframework.boot</groupId>
      7. <artifactId>spring-boot-starter-data-redis</artifactId>
      8. </dependency>
  • Dockerfile
    ```dockerfile FROM java:8

COPY *.jar /app.jar

EXPOSE 8080

CMD [“—server.port=8080”]

ENTRYPOINT [“java”,”-jar”,”/app.jar”]

  1. - docker-compose.yml
  2. ```yaml
  3. version: "3.0"
  4. services:
  5. web:
  6. build: .
  7. ports:
  8. - "8080:8080"
  9. links:
  10. - redis
  11. redis:
  12. image: redis

2.4 构建、运行

将SpringBoot 项目打包,和 Dockerfile,docker-compose.yml 一并上传到同一个目录下

  • 构建
    ```shell

    直接构建

    docker-compose up

后台构建

docker-compose up -d ```

  • 运行
    构建后使用 docker ps 查看下对应打包后的镜像名称,然后 docker run -itd 镜像名称 运行
  • 测试,ip:端口/hello

2_Docker基础-项目 - 图2

每次刷新请求 count 值都会发生变化