Docker应用之SpringBoot项目启动(四)

目录


前言

现在Java开发中springboot项目用到概率非常高,传统的java -jar xxx.jar启动方式都非常熟悉,如何让一个springboot工程完成从代码提交->打包->部署,这样自动化的整个过程?本文先从springboot项目制作成docker中的容器说起。

实现步骤

解决思路

  1. 准备Springboot项目的jar包;
  2. 编写Dockerfile文件;
  3. 创建docker中的镜像文件;
  4. 创建项目容器实例;
  5. 启动容器并验证。

具体操作

①准备Springboot项目的jar包

Java项目中打包jar的方式有很多,这里不做说明,下文以打好的demo.jar做示例。

②编写Dockerfile文件

这一步是为了将demo.jar文件告诉docker,并让docker完成创建我们自定义的新镜像。Dockerfile文件内容如下:

复制代码
# 基础镜像使用java
FROM java:8
# 作者
MAINTAINER www.lyf.com
# VOLUME 指定了临时文件目录为/tmp。
# 其效果是在主机 /var/lib/docker 目录下创建了一个临时文件,并链接到容器的/tmp
VOLUME /tmp
# 将jar包添加到容器中并更名为myDemo.jar
ADD demo.jar myDemo.jar
# 运行jar包
RUN bash -c 'touch /myDemojar'
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/myDemojar"]
#暴露8080端口
EXPOSE 8080

知识扩展

DockerFile编写规范

A.#描述注释

B.指令必须要大写,后面至少需要带至少一个参数;

C.指令是按照从上到下,顺序执行;

DockerFile指令
  1. FROM 指定父镜像: 基于哪个镜像image构建 指定基础镜像,必须为第一个命令
  2. MAINTAINER :维护者
  3. RUN: 容器创建的时候执行一段命令 构建镜像时执行的命令
  4. ADD: 将本地文件添加到容器中,tar类型文件会自动解压(网络压缩资源不会被解压),可以访问网络资源,类似wget
  5. COPY:功能类似ADD,但是是不会自动解压文件,也不能访问网络资源
  6. CMD:构建容器后调用,也就是在容器启动时才进行调用。 .sh执行文件
  7. ENV: 设置环境变量
  8. EXPOSE: 指定于外界交互的端口
  9. VOLUME 用于指定持久化目录
  10. WORKDIR 设置进入容器时的路径 默认访问的目录

③创建docker中的镜像文件

以上两步需要保证demo.jar和Dockerfile在同一目录下,同时在该目录下运行以下命令即可完成打包镜像文件:

复制代码
docker build -f Dockerfile -t myDemo:1 .

注意:命令后面有个 . 点。

④创建项目容器实例

上一步完成后,会将jar需要依赖的JDK一并打包到镜像中,通过 dcoker images查看新生成的镜像文件。确定创建完成后,则可以创建容器了。

复制代码
docker run -di --name=myDemo -p 8070:8080 myDemo:1

⑤访问测试

通过localhost:8070查看Springboot项目是否正常运行。

相关推荐
PatrickYao04222 小时前
Hydro OJ部署完全指南!
服务器·oj·hydro·在线评测
小政同学2 小时前
【NFS故障】共享的文件无法执行
linux·运维·服务器
禅口魔心3 小时前
边缘网关开发计划(一):在 Rock 5T 上部署 Docker
物联网·docker·rk3588·边缘网关
吴文周3 小时前
告别重复劳动:一套插件让 AI 替你写代码、修Bug、做测试、上生产
前端·后端·ai编程
不会写DN3 小时前
受保护的海报图片读取方案 - 在不公开静态资源目录下如何获取静态资源
服务器
Cyeam3 小时前
Roadbook CSV:一行 CSV 秒变高德地图路书
后端·开源·aigc
AI木马人3 小时前
3.【Prompt工程实战】如何设计一个可复用的Prompt系统?(避免每次手写提示词)
linux·服务器·人工智能·深度学习·prompt
huihuihuanhuan.xin3 小时前
记一次 Docker PostgreSQL 连接认证失败的排查与解决
docker
懒狗小前端3 小时前
做了一个 codex 的中文文档网站,做的不好可以随便喷
前端·后端
挽安学长4 小时前
保姆级教程,通过GACCode使用Claude Code Desktop!
运维·服务器