美文网首页
将springboot服务打包成docker镜像

将springboot服务打包成docker镜像

作者: 酱油瓶儿_fea9 | 来源:发表于2022-02-18 12:05 被阅读0次

    创建spring boot 服务项目

    使用idea创建名称为docker-project,并创建一个TestController用于测试,如下图所示


    image.png

    TestController内容为:

    package com.zl.dk.controller;
    
    import org.springframework.beans.factory.annotation.Value;
    import org.springframework.web.bind.annotation.*;
    
    import java.util.UUID;
    
    /**
     * @author: zhanglin574@xdf.cn
     * @date: 2022/2/17
     * @description:
     */
    @RestController
    public class TestController {
    
        @GetMapping("/docker/test/{port}")
        public String test(@PathVariable Integer port){
            return "docker use port " + port + ", uuid:" + UUID.randomUUID() ;
        }
    }
    
    

    application.yml内容为:

    server:
      port: 8081
    

    pom文件内容为:

    <?xml version="1.0" encoding="UTF-8"?>
    
    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
      <parent>
        <artifactId>spring-boot-starter-parent</artifactId>
        <groupId>org.springframework.boot</groupId>
        <version>2.3.5.RELEASE</version>
      </parent>
      <modelVersion>4.0.0</modelVersion>
    
      <groupId>com.zl.dk</groupId>
      <artifactId>docker-project</artifactId>
      <version>1.0-SNAPSHOT</version>
    
      <name>docker-project</name>
    
      <dependencies>
        <dependency>
          <groupId>org.springframework.boot</groupId>
          <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
      </dependencies>
    
      <build>
        <plugins>
          <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
          </plugin>
        </plugins>
      </build>
    </project>
    
    

    项目打包

    在maven插件中先执行clean 然后再执行package


    image.png

    此时target目录下生成了docker-project-1.0-SNAPSHOT.jar


    image.png

    创建Dockerfile文件

    在pom.xml文件同级目录下创建Dockerfile文件,文件内容为:

    #基础镜像
    FROM java:8
    #作者
    MAINTAINER zhanglin574@xdf.cn
    #声称容器卷目录
    VOLUME /tmp
    #将宿主机jar包拷贝到容器中,此命令会将jar包拷贝到容器的根路径/下
    ADD target/docker-project-1.0-SNAPSHOT.jar docker-project.jar
    #暴露端口8081
    EXPOSE 8081
    #容器启动时执行的命令
    ENTRYPOINT ["java",  "-jar" ,"/docker-project.jar"]
    

    打包镜像

    在idea的Terminal命令行窗口中执行命令

    docker build -t myboot:1.0 .
    

    执行命令docker images查看已经打好的了镜像


    image.png

    启动容器

    执行命令

    docker run -d -p 8081:8081   myboot:1.0
    

    执行docker ps查看是否已启动成功


    image.png

    测试

    打开浏览器输入路径:http://localhost:8081/docker/test/8081,发现正常访问,至此打包springboot镜像以及启动容器成功

    image.png

    扩展

    如果想往springboot服务中传递参数怎么办呢?
    首先改造一下TestController内容如下

    package com.zl.dk.controller;
    
    import org.springframework.beans.factory.annotation.Value;
    import org.springframework.web.bind.annotation.*;
    
    import java.util.UUID;
    
    /**
     * @author: zhanglin574@xdf.cn
     * @date: 2022/2/17
     * @description:
     */
    @RestController
    public class TestController {
        @Value("${env.addr}")
        private String addr;
        @GetMapping("/docker/test/{port}")
        public String test(@PathVariable Integer port){
            return "docker use port " + port + ", uuid:" + UUID.randomUUID() + ", env.addr=" + addr ;
        }
    }
    
    

    在application.yml中添加变量env.addr

    server:
      port: 8081
    env:
      addr: ${env.addr}
    

    修改Dockerfile文件,只修改了最后一行命令:

    #基础镜像
    FROM java:8
    #作者
    MAINTAINER zhanglin574@xdf.cn
    #声称容器卷目录
    VOLUME /tmp
    #将宿主机jar包拷贝到容器中,此命令会将jar包拷贝到容器的根路径/下
    ADD target/docker-project-1.0-SNAPSHOT.jar docker-project.jar
    #暴露端口8081
    EXPOSE 8081
    #容器启动时执行的命令
    #ENTRYPOINT ["java",  "-jar" ,"/docker-project.jar"]
    ENTRYPOINT ["bash", "-c" ,"java -jar /docker-project.jar ${OPTS_1}"]
    

    重新打包

    先执行maven的clean再执行package
    执行打包命令

    docker build -t myboot:1.1 .
    

    执行docker ps 查看是否有之前启动的容器,有的话执行docker stop 870d4d00b8d4停掉容器


    image.png

    执行docker images查看是否打包镜像成功


    image.png

    启动容器

    执行命令

    docker run -d -p 8081:8081 -e "OPTS_1=--env.addr=127.0.0.10"  myboot:1.1
    

    查看容器是否启动:docker ps


    image.png

    测试

    打开浏览器,输入http://localhost:8081/docker/test/8081,发现启动命令中的env.addr已经正常显示

    image.png
    至此向容器中的服务传递参数工作正常

    相关文章

      网友评论

          本文标题:将springboot服务打包成docker镜像

          本文链接:https://www.haomeiwen.com/subject/rztylrtx.html