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镜像详解的主要内容,如果未能解决你的问题,请参考以下文章
微服务架构合集教程:SpringCloud+Springboot+docker+项目实战135G
docker -SpringBoot微服务打包Docker镜像