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
  • 6
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

所得皆惊喜

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值