使用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路径映射配置的实现步骤

《SpringBoot路径映射配置的实现步骤》本文介绍了如何在SpringBoot项目中配置路径映射,使得除static目录外的资源可被访问,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一... 目录SpringBoot路径映射补:springboot 配置虚拟路径映射 @RequestMapp

Java MCP 的鉴权深度解析

《JavaMCP的鉴权深度解析》文章介绍JavaMCP鉴权的实现方式,指出客户端可通过queryString、header或env传递鉴权信息,服务器端支持工具单独鉴权、过滤器集中鉴权及启动时鉴权... 目录一、MCP Client 侧(负责传递,比较简单)(1)常见的 mcpServers json 配置

GSON框架下将百度天气JSON数据转JavaBean

《GSON框架下将百度天气JSON数据转JavaBean》这篇文章主要为大家详细介绍了如何在GSON框架下实现将百度天气JSON数据转JavaBean,文中的示例代码讲解详细,感兴趣的小伙伴可以了解下... 目录前言一、百度天气jsON1、请求参数2、返回参数3、属性映射二、GSON属性映射实战1、类对象映

RabbitMQ 延时队列插件安装与使用示例详解(基于 Delayed Message Plugin)

《RabbitMQ延时队列插件安装与使用示例详解(基于DelayedMessagePlugin)》本文详解RabbitMQ通过安装rabbitmq_delayed_message_exchan... 目录 一、什么是 RabbitMQ 延时队列? 二、安装前准备✅ RabbitMQ 环境要求 三、安装延时队

redis-sentinel基础概念及部署流程

《redis-sentinel基础概念及部署流程》RedisSentinel是Redis的高可用解决方案,通过监控主从节点、自动故障转移、通知机制及配置提供,实现集群故障恢复与服务持续可用,核心组件包... 目录一. 引言二. 核心功能三. 核心组件四. 故障转移流程五. 服务部署六. sentinel部署

Python ORM神器之SQLAlchemy基本使用完全指南

《PythonORM神器之SQLAlchemy基本使用完全指南》SQLAlchemy是Python主流ORM框架,通过对象化方式简化数据库操作,支持多数据库,提供引擎、会话、模型等核心组件,实现事务... 目录一、什么是SQLAlchemy?二、安装SQLAlchemy三、核心概念1. Engine(引擎)

Java Stream 并行流简介、使用与注意事项小结

《JavaStream并行流简介、使用与注意事项小结》Java8并行流基于StreamAPI,利用多核CPU提升计算密集型任务效率,但需注意线程安全、顺序不确定及线程池管理,可通过自定义线程池与C... 目录1. 并行流简介​特点:​2. 并行流的简单使用​示例:并行流的基本使用​3. 配合自定义线程池​示

从原理到实战解析Java Stream 的并行流性能优化

《从原理到实战解析JavaStream的并行流性能优化》本文给大家介绍JavaStream的并行流性能优化:从原理到实战的全攻略,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的... 目录一、并行流的核心原理与适用场景二、性能优化的核心策略1. 合理设置并行度:打破默认阈值2. 避免装箱

解决升级JDK报错:module java.base does not“opens java.lang.reflect“to unnamed module问题

《解决升级JDK报错:modulejava.basedoesnot“opensjava.lang.reflect“tounnamedmodule问题》SpringBoot启动错误源于Jav... 目录问题描述原因分析解决方案总结问题描述启动sprintboot时报以下错误原因分析编程异js常是由Ja

Java Kafka消费者实现过程

《JavaKafka消费者实现过程》Kafka消费者通过KafkaConsumer类实现,核心机制包括偏移量管理、消费者组协调、批量拉取消息及多线程处理,手动提交offset确保数据可靠性,自动提交... 目录基础KafkaConsumer类分析关键代码与核心算法2.1 订阅与分区分配2.2 拉取消息2.3