使用DockerCompose部署SpringBoot项目

2023-12-22 15:18

本文主要是介绍使用DockerCompose部署SpringBoot项目,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

  • 环境准备
  • 构建Docker镜像
    • docker command构建
    • maven插件构建
  • Docker Compose构建
    • docker-compose 文件
    • run docker-compose
  • 扩展

环境准备

  1. 首先需要安装Docker环境,如果是Mac或者Windows系统可从官网直接下载Docker Desktop,Linux用户可参考官网的安装示例。
  2. 准备两个SpringBoot项目demo和demo1,其中demo的接口会调用demo1的接口。

构建Docker镜像

这里有两种构建方式,一种是通过docker原生command来进行构建,另一种则是通过集成maven插件进行构建。

docker command构建

首先需要一个Dockerfile文件

FROM java:8
ADD demo-0.0.1-SNAPSHOT.jar app.jar
ENTRYPOINT ["java","-jar","/app.jar"]
  • FROM: 当前镜像基于java8来构建
  • ADD : 将demo-0.0.1-SNAPSHOT.jar添加到容器种,并修改名称为app.jar
  • ENTRYPOINT:程序的入口点,这里即为执行jar包

注意:这里的jar包需在Dockerfile同目录或者子目录下,不然找不到
此时的目录结构为:

D:\docker\Dockerfile>dir
2019/07/31  10:12    <DIR>          .
2019/07/31  10:12    <DIR>          ..
2019/07/30  15:58        56,318,184 demo1-0.0.1-SNAPSHOT.jar
2019/07/29  16:16        49,392,759 demo-0.0.1-SNAPSHOT.jar
2019/08/01  10:34               198 Dockerfile

然后执行build命令

D:\docker\Dockerfile>docker build --tag=demo:1.0 .
Sending build context to Docker daemon  105.7MB
Step 1/4 : FROM java:8---> d23bdf5b1b1b
Step 2/4 : VOLUME /tmp---> Running in a557dc8afb78
Removing intermediate container a557dc8afb78---> 6ac5921c3836
Step 3/4 : ADD demo-0.0.1-SNAPSHOT.jar app.jar---> b19a4faddb87
Step 4/4 : ENTRYPOINT ["java","-jar","/app.jar"]---> Running in b6da1b5e5bf9
Removing intermediate container b6da1b5e5bf9---> cfd2a5181c1f
Successfully built cfd2a5181c1f
Successfully tagged demo:1.0
SECURITY WARNING: You are building a Docker image from Windows against a non-Windows Docker host. All files and directories added to build context will have '-rwxr-xr-x' permissions. It is recommended to double check and reset permissions for sensitive files and directories.

build成功后可以查看当前所有镜像

D:\docker\Dockerfile>docker image ls
REPOSITORY                                            TAG                 IMAGE ID            CREATED             SIZE
demo                                                   0.0.1-SNAPSHOT                 cfd2a5181c1f        2 minutes ago       693MB
demo1                                                  0.0.1-SNAPSHOT      25eeb44db881        2 minutes ago        693MB
java                                                  8                   d23bdf5b1b1b        2 years ago         643MB
java                                                  latest              d23bdf5b1b1b        2 years ago         643MB

maven插件构建

pom.xml里加入插件:

<plugins><plugin><groupId>com.spotify</groupId><artifactId>docker-maven-plugin</artifactId><version>1.2.0</version><configuration><!-- 详见:https://github.com/spotify/docker-maven-plugin    --><imageName>${project.artifactId}:${project.version}</imageName><baseImage>java:8</baseImage><entryPoint>["java", "-jar", "/${project.build.finalName}.jar"]</entryPoint><resources><resource><targetPath>/</targetPath><directory>${project.build.directory}</directory><include>${project.build.finalName}.jar</include></resource></resources></configuration></plugin>
</plugins>

这里这样配置之后就不需要Dockerfile了,如果想用Dockerfile来管理,可将<dockerDirectory>src/main/resources</dockerDirectory>放开,即:

<plugins><plugin><groupId>com.spotify</groupId><artifactId>docker-maven-plugin</artifactId><version>1.2.0</version><configuration><!-- 详见:https://github.com/spotify/docker-maven-plugin    --><imageName>${project.artifactId}:${project.version}</imageName><dockerDirectory>src/main/resources</dockerDirectory><resources><resource><targetPath>/</targetPath><directory>${project.build.directory}</directory><include>${project.build.finalName}.jar</include></resource></resources></configuration></plugin>
</plugins>

此时执行命令:

clean package -Dmaven.test.skip=true docker:build

即可构建成功。此时如果启动的话需要一个个执行启动命令

D:\docker\Dockerfile>docker run cfd2a5181c1f
D:\docker\Dockerfile>docker run 25eeb44db881

cfd2a5181c1f为image ID,如果需要一次性多个容器运行,则应该使用Docker Compose

Docker Compose构建

使用Compose需要三个步骤:

  1. build docker image。这一步在上面已经完成
  2. 编写docker-compose文件
  3. run docker-compose。

docker-compose 文件

version: '3'
services:demo1:container_name: demo1image: demo1:0.0.1-SNAPSHOTports: - "8099:8099"volumes: - "D:/docker/log:/log"networks: - local-networksenv_file: - demo.envdemo:container_name: demoimage: demo:0.0.1-SNAPSHOTports: - "9093:9093"depends_on: - demo1networks: - local-networksenv_file: - demo.envnetworks: local-networks: 
  • container_name: 容器名称
  • image:镜像名称:版本号,先从本地寻找,如本地没有,会从DockerHub拉取
  • ports: Host:Contanier 将主机端口映射到容器端口
  • volumes:host绝对路径:容器绝对路径。将主机目录挂载到容器目录上。
  • networks:网络配置,如上面2个容器使用了一个网络,代表他们可以进行通信
  • env_file:环境变量文件,,格式为键值对
  • depends_on:依赖关系,此处则为在启动demo时,会先启动demo1,但不会等待demo1启动完成。

demo.env

#env file
demo1-uri=http://data-exchange:8099

这个配置完成之后,application.propertise文件可使用${demo1-uri}来进行解耦。
以上所有基础配置已完成,更多的的配置参考官方文档

run docker-compose

执行命令启动compose,即可发现先启动demo,在启动demo1

D:\docker\Dockerfile>docker-compose up

扩展

如果想用idea远程调试docker容器里的代码,参考官方文档

这篇关于使用DockerCompose部署SpringBoot项目的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/524445

相关文章

springboot集成Lucene的详细指南

《springboot集成Lucene的详细指南》这篇文章主要为大家详细介绍了springboot集成Lucene的详细指南,文中的示例代码讲解详细,具有一定的借鉴价值,感兴趣的小伙伴可以跟随小编一起... 目录添加依赖创建配置类创建实体类创建索引服务类创建搜索服务类创建控制器类使用示例以下是 Spring

Java调用Python的四种方法小结

《Java调用Python的四种方法小结》在现代开发中,结合不同编程语言的优势往往能达到事半功倍的效果,本文将详细介绍四种在Java中调用Python的方法,并推荐一种最常用且实用的方法,希望对大家有... 目录一、在Java类中直接执行python语句二、在Java中直接调用Python脚本三、使用Run

使用Python开发Markdown兼容公式格式转换工具

《使用Python开发Markdown兼容公式格式转换工具》在技术写作中我们经常遇到公式格式问题,例如MathML无法显示,LaTeX格式错乱等,所以本文我们将使用Python开发Markdown兼容... 目录一、工具背景二、环境配置(Windows 10/11)1. 创建conda环境2. 获取XSLT

Java根据IP地址实现归属地获取

《Java根据IP地址实现归属地获取》Ip2region是一个离线IP地址定位库和IP定位数据管理框架,这篇文章主要为大家详细介绍了Java如何使用Ip2region实现根据IP地址获取归属地,感兴趣... 目录一、使用Ip2region离线获取1、Ip2region简介2、导包3、下编程载xdb文件4、J

Python中Flask模板的使用与高级技巧详解

《Python中Flask模板的使用与高级技巧详解》在Web开发中,直接将HTML代码写在Python文件中会导致诸多问题,Flask内置了Jinja2模板引擎,完美解决了这些问题,下面我们就来看看F... 目录一、模板渲染基础1.1 为什么需要模板引擎1.2 第一个模板渲染示例1.3 模板渲染原理二、模板

浅析如何使用xstream实现javaBean与xml互转

《浅析如何使用xstream实现javaBean与xml互转》XStream是一个用于将Java对象与XML之间进行转换的库,它非常简单易用,下面将详细介绍如何使用XStream实现JavaBean与... 目录1. 引入依赖2. 定义 JavaBean3. JavaBean 转 XML4. XML 转 J

使用Python创建一个功能完整的Windows风格计算器程序

《使用Python创建一个功能完整的Windows风格计算器程序》:本文主要介绍如何使用Python和Tkinter创建一个功能完整的Windows风格计算器程序,包括基本运算、高级科学计算(如三... 目录python实现Windows系统计算器程序(含高级功能)1. 使用Tkinter实现基础计算器2.

SpringBoot中四种AOP实战应用场景及代码实现

《SpringBoot中四种AOP实战应用场景及代码实现》面向切面编程(AOP)是Spring框架的核心功能之一,它通过预编译和运行期动态代理实现程序功能的统一维护,在SpringBoot应用中,AO... 目录引言场景一:日志记录与性能监控业务需求实现方案使用示例扩展:MDC实现请求跟踪场景二:权限控制与

在.NET平台使用C#为PDF添加各种类型的表单域的方法

《在.NET平台使用C#为PDF添加各种类型的表单域的方法》在日常办公系统开发中,涉及PDF处理相关的开发时,生成可填写的PDF表单是一种常见需求,与静态PDF不同,带有**表单域的文档支持用户直接在... 目录引言使用 PdfTextBoxField 添加文本输入域使用 PdfComboBoxField

Git可视化管理工具(SourceTree)使用操作大全经典

《Git可视化管理工具(SourceTree)使用操作大全经典》本文详细介绍了SourceTree作为Git可视化管理工具的常用操作,包括连接远程仓库、添加SSH密钥、克隆仓库、设置默认项目目录、代码... 目录前言:连接Gitee or github,获取代码:在SourceTree中添加SSH密钥:Cl