DOCKER06_SpringBoot微服务项目打包成Docker镜像详解

Posted 所得皆惊喜

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了DOCKER06_SpringBoot微服务项目打包成Docker镜像详解相关的知识,希望对你有一定的参考价值。

①. 构建SpringBoot项目

  • ①. 创建一个springboot微服务项目

  • ②. 编写测试类
@RestController
@SpringBootApplication
public class DemoApplication {
    public static void main(String[] args) {
        SpringApplication.run(DemoApplication.class, args);
    }
    @GetMapping("/helloTang")
    public String helloTang(){
        return "helloTang";
    }
}
  • ③. 测试是否打包成功
  • ④. 通过cmd进入控制台,将打包好的jar包进行本地测试

②. 编写Dockerfile文件

  • ①. 需要注意的是,这里的8080端口,如果在application.yaml中不写端口默认是8080
FROM openjdk:8u282-slim
# 如下操作可以让容器时间和虚拟机时间一致
RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo 'Asia/Shanghai' >/etc/timezone
LABEL maintainer="845195485@qq.com"
# COPY --from=buildapp /app/app.jar /app.jar
COPY demo-0.0.1-SNAPSHOT.jar /app.jar
EXPOSE 8080
# CMD ["--server.prot=8080"]
ENV JAVA_OPTS=""
ENV PARAMS=""
ENTRYPOINT [ "sh", "-c", "java -Djava.security.egd=file:/dev/./urandom $JAVA_OPTS -jar /app.jar $PARAMS" ]

③. 将jar包和Dockerfile文件上传服务器

  • ①. 在服务器上进行如下操作
[root@k8s-master dockerFileTest]# ls
demo  demo-0.0.1-SNAPSHOT.jar  Dockerfile
[root@k8s-master dockerFileTest]# docker build -t dockerfiledemo:1.0 -f Dockerfile .
Sending build context to Docker daemon   35.2MB
Step 1/8 : FROM openjdk:8u282-slim
 ---> 1a67dffb0ee8
Step 2/8 : RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo 'Asia/Shanghai' >/etc/timezone
 ---> Using cache
 ---> 2e7e3104a115
Step 3/8 : LABEL maintainer="845195485@qq.com"
 ---> Using cache
 ---> a6a0060db56e
Step 4/8 : COPY demo-0.0.1-SNAPSHOT.jar /app.jar
 ---> fcd3b9f4dc33
Step 5/8 : EXPOSE 8080
 ---> Running in 1791b1aadb3d
Removing intermediate container 1791b1aadb3d
 ---> 1243444bc9ca
Step 6/8 : ENV JAVA_OPTS=""
 ---> Running in 7796f6f4e49d
Removing intermediate container 7796f6f4e49d
 ---> c9f0c47899a4
Step 7/8 : ENV PARAMS=""
 ---> Running in 6346bde227c7
Removing intermediate container 6346bde227c7
 ---> a4f64bd2afda
Step 8/8 : ENTRYPOINT [ "sh", "-c", "java -Djava.security.egd=file:/dev/./urandom $JAVA_OPTS -jar /app.jar $PARAMS" ]
 ---> Running in fdb39fafb931
Removing intermediate container fdb39fafb931
 ---> 2c651e7bb1f6
Successfully built 2c651e7bb1f6
Successfully tagged dockerfiledemo:1.0
[root@k8s-master dockerFileTest]# docker images
REPOSITORY                                                                 TAG                IMAGE ID       CREATED          SIZE
dockerfiledemo                                                             1.0                2c651e7bb1f6   7 seconds ago    306MB

[root@k8s-master demo]# docker ps
CONTAINER ID   IMAGE                                                          COMMAND                  CREATED          STATUS          PORTS                                                        NAMES
32adb642988b   dockerfiledemo:1.0                                             "sh -c 'java -Djava.…"   26 seconds ago   Up 25 seconds   0.0.0.0:49170->8080/tcp 
  • ②. 通过浏览器访问(http://139.198.169.136:49170/helloTang)

④. 基于maven进行打包,多阶段构建

  • ①. Dockerfile文件如下所示,在服务器上进行打包成功,启动容器找不到主启动类(文件参考使用)
    有哪位大佬如果知道原因,希望可以告知,感谢!!!
# 基于maven:3.5.2-jdk-8-slim这个镜像
FROM maven:3.5.2-jdk-8-slim AS buildapp
# 创建一个根目录
WORKDIR /app
# 将当前的src和pom.xml文件复制到基于maven:3.5.2-jdk-8-slim的/app目录下
COPY src .
COPY pom.xml .
# 进行maven的打包,跳过测试阶段
RUN mvn clean package -Dmaven.test.skip=true
# /app/target的jar包复制到/app/app.jar下
RUN cp target/*.jar app.jar
RUN ls -l

# 基于jdk的镜像
FROM openjdk:8u282-slim
# 如下操作可以让容器时间和虚拟机时间一致
RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo 'Asia/Shanghai' >/etc/timezone
LABEL maintainer="845195485@qq.com"
# 基于之前构建的buildapp,/app/app.jar复制到/app.jar
COPY --from=buildapp /app/app.jar /app.jar
# 暴露8080端口
EXPOSE 8080

ENV JAVA_OPTS=""
ENV PARAMS=""
ENTRYPOINT [ "sh", "-c", "java -Djava.security.egd=file:/dev/./urandom $JAVA_OPTS -jar /app.jar $PARAMS" ]
  • ②. 启动命令如下
    docker run -e JAVA_OPTS="-Xmx512m -Xms33 -" -e PARAMS="--spring.profiles=dev --server.port=8080" -jar /app/app.jar

以上是关于DOCKER06_SpringBoot微服务项目打包成Docker镜像详解的主要内容,如果未能解决你的问题,请参考以下文章

微服务----docker-compose.yml属性详解

微服务架构合集教程:SpringCloud+Springboot+docker+项目实战135G

docker -SpringBoot微服务打包Docker镜像

docker -SpringBoot微服务打包Docker镜像

SpringBoot微服务项目打包成Docker镜像详解

微服务系列教程