Docker Compose实例
目录
一、前提说明
二、简单的Docker容器部署案例
1. Dockerfile 配置
2. docker-compose.yml 配置
3. application-prod.properties 配置
4. pom.xml 配置
5. 上传文件
6. 创建基础Docker镜像
7. docker-compose.yml编排
8. 停止并删除容器编排
三、案例地址
一、前提说明
在配置好Docker和Docker Compose之后,部署一个JavaWeb项目。
使用到 spingboot+mysql+redis
二、简单的Docker容器部署案例
1. Dockerfile 配置
# 基于那个镜像使用 java
# FROM openjdk:8-oracle
FROM java:8# 作者
MAINTAINER cj# 在主机 /var/lib/docker 目录下创建一个临时文件,并链接到容器的 /tmp
VOLUME /tmp# 将jar包添加到容器中,并命名为 deploy-docker.jar
ADD deploy-docker-1.0-SNAPSHOT.jar /deploy-docker.jar# 运行jar包
RUN bash -c 'touch /deploy-docker.jar'
# 使用 ENTRYPOINT 设置容器启动时执行的命令,并指定 Spring profile 为 prod
ENTRYPOINT ["java", "-jar", "/deploy-docker.jar", "--spring.profiles.active=prod"]# SpringBoot 项目配置的端口号为 1931,需要将 1931 暴露出去
EXPOSE 1931
2. docker-compose.yml 配置
# docker-compose文件版本号
version: "3"# 定义自定义网络 springboot_network_1
networks:springboot_network_1:# 配置各个容器服务
services:# 定义名为 microService 的服务microService:# 使用 deploy-docker:1.1 镜像作为容器image: deploy-docker:1.1# 设置容器的名称为 ms01container_name: ms01 # 容器名称,如果不指定,会生成一个服务名加上前缀的容器名# 将容器内部端口 1931 映射到宿主机端口 1931ports:- "1931:1931"# 挂载宿主机的 /app/microService 目录到容器内的 /data 目录volumes:- /app/microService:/data# 连接到名为 springboot_network_1 的自定义网络networks:- springboot_network_1# 定义 microService 服务依赖的其他服务depends_on:- redis- mysql# 定义名为 redis 的服务redis:# 使用 redis:6.0.8 镜像作为容器image: redis:6.0.8# 主机端口:容器内部端口ports:- "6379:6379"# 挂载宿主机的 redis 配置文件和数据目录到容器内volumes:- /app/redis/redis.conf:/etc/redis/redis.conf- /app/redis/data:/data# 连接到名为 springboot_network_1 的自定义网络networks:- springboot_network_1# 指定容器启动命令为 redis-server /etc/redis/redis.confcommand: redis-server /etc/redis/redis.conf# 定义名为 mysql 的服务mysql:# 使用 mysql:8.3 镜像作为容器image: mysql:8.3# 设置 MySQL 的环境变量environment:MYSQL_ROOT_PASSWORD: '123456'MYSQL_ALLOW_EMPTY_PASSWORD: 'no'MYSQL_DATABASE: 'deploy-docker'MYSQL_USER: 'cj'MYSQL_PASSWORD: '123456'# 主机端口(3306):容器内部端口(3306)ports:- "3306:3306"# 挂载宿主机的 MySQL 数据库文件、配置文件和初始化脚本到容器内volumes:- /app/mysql/db:/var/lib/mysql- /app/mysql/conf/my.cnf:/etc/my.cnf- /app/mysql/init:/docker-entrypoint-initdb.d# 连接到名为 springboot_network_1 的自定义网络networks:- springboot_network_1# 指定容器启动命令为 --default-authentication-plugin=mysql_native_passwordcommand: --default-authentication-plugin=mysql_native_password # 解决外部无法访问
3. application-prod.properties 配置
# 服务器端口号
server.port=1931
server.servlet.context-path=/
# ======================== Alibaba Druid 数据源配置 ======================
# 配置使用 Alibaba Druid 数据源
spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
# 数据库驱动类名
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
# 数据库连接 URL
#spring.datasource.url=jdbc:mysql://192.168.153.133:3306/deploy_docker?serverTimezone=GMT%2B8&useSSL=false&characterEncoding=utf-8&allowPublicKeyRetrieval=true
# 使用容器内部服务名进行连接
spring.datasource.url=jdbc:mysql://mysql:3306/deploy_docker?serverTimezone=GMT%2B8&useSSL=false&characterEncoding=utf-8&allowPublicKeyRetrieval=true
# 数据库用户名
spring.datasource.username=root
# 数据库密码
spring.datasource.password=123456
# 配置 Druid 连接池,禁用空闲时检测
spring.datasource.druid.test-while-idle=false
# ======================== Redis 缓存配置 ======================
# Redis 数据库索引
spring.redis.database=0
# 使用 IP 地址进行连接
#spring.redis.host=192.168.153.133
# 使用容器内部服务名进行连接
spring.redis.host=redis
# Redis 端口号
spring.redis.port=6379
# Redis 密码
spring.redis.password=123456
# 配置 Lettuce 连接池参数
spring.redis.lettuce.pool.max-active=8
spring.redis.lettuce.pool.max-wait=-1ms
spring.redis.lettuce.pool.max-idle=8
spring.redis.lettuce.pool.min-idle=0
# ======================== MyBatis 配置 ====================
# MyBatis Mapper 文件路径
mybatis.mapper-locations=classpath:mapper/*.xml
# MyBatis 实体类包路径
mybatis.type-aliases-package=org.example.entities
# ======================== Swagger 配置 ======================
# 启用 Swagger2 API 文档
spring.swagger2.enabled=true
4. pom.xml 配置
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.5.6</version><relativePath/> <!-- 从仓库中查找父项目 --></parent><groupId>org.study</groupId><artifactId>deploy-docker</artifactId><packaging>jar</packaging><version>1.0-SNAPSHOT</version><!-- 定义项目使用的属性,如编码、编译版本等 --><properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><maven.compiler.source>1.8</maven.compiler.source><maven.compiler.target>1.8</maven.compiler.target><!-- 定义各个依赖版本 --><junit.version>4.12</junit.version><log4j.version>1.2.17</log4j.version><lombok.version>1.16.18</lombok.version><mysql.version>8.0.30</mysql.version><druid.version>1.1.17</druid.version><mapper.version>4.1.5</mapper.version><mybatis.spring.boot.version>1.3.0</mybatis.spring.boot.version><swagger.version>2.9.2</swagger.version></properties><!--配置不同的profile,对应不同的生产环境--><profiles><profile><!--开发--><id>dev</id><activation><!--默认开发环境--><activeByDefault>true</activeByDefault></activation><properties><activatedProperties>dev</activatedProperties></properties></profile><profile><id>prod</id><properties><activatedProperties>prod</activatedProperties></properties></profile><profile><id>test</id><properties><activatedProperties>test</activatedProperties></properties></profile></profiles><!-- 项目依赖配置 --><dependencies><!-- Guava:Google开源的Guava中自带的布隆过滤器 --><dependency><groupId>com.google.guava</groupId><artifactId>guava</artifactId><version>23.0</version></dependency><!-- Redisson:Redis Java客户端库 --><dependency><groupId>org.redisson</groupId><artifactId>redisson</artifactId><version>3.13.4</version></dependency><!-- Spring Boot Starter Web:Spring Boot的Web起步依赖 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><!-- Spring Boot Starter Actuator:Spring Boot的监控与管理依赖 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-actuator</artifactId></dependency><!-- Swagger2:API文档生成工具 --><dependency><groupId>io.springfox</groupId><artifactId>springfox-swagger2</artifactId><version>${swagger.version}</version></dependency><dependency><groupId>io.springfox</groupId><artifactId>springfox-swagger-ui</artifactId><version>${swagger.version}</version></dependency><!-- Spring Boot Starter Data Redis:Spring Boot集成Redis依赖 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId></dependency><!-- Spring Boot Starter Cache:Spring Boot缓存起步依赖 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-cache</artifactId></dependency><!-- Apache Commons Pool2:通用对象池 --><dependency><groupId>org.apache.commons</groupId><artifactId>commons-pool2</artifactId></dependency><!-- Jedis:Redis的Java客户端库 --><dependency><groupId>redis.clients</groupId><artifactId>jedis</artifactId><version>3.1.0</version></dependency><!-- MySQL Connector Java:MySQL数据库驱动 --><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>${mysql.version}</version></dependency><!-- Druid Spring Boot Starter:Spring Boot集成Druid连接池 --><dependency><groupId>com.alibaba</groupId><artifactId>druid-spring-boot-starter</artifactId><version>${druid.version}</version></dependency><dependency><groupId>com.alibaba</groupId><artifactId>druid</artifactId><version>${druid.version}</version></dependency><!-- MyBatis Spring Boot Starter:Spring Boot集成MyBatis依赖 --><dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>${mybatis.spring.boot.version}</version></dependency><!-- Apache Commons Codec:通用编解码库 --><dependency><groupId>commons-codec</groupId><artifactId>commons-codec</artifactId><version>1.10</version></dependency><!-- Hutool:Java工具类库 --><dependency><groupId>cn.hutool</groupId><artifactId>hutool-all</artifactId><version>5.2.3</version></dependency><!-- JUnit:Java单元测试框架 --><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>${junit.version}</version></dependency><!-- Spring Boot DevTools:Spring Boot开发工具,用于热部署等 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-devtools</artifactId><scope>runtime</scope><optional>true</optional></dependency><!-- Spring Boot Starter Test:Spring Boot测试起步依赖 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency><!-- Log4j:Java日志框架 --><dependency><groupId>log4j</groupId><artifactId>log4j</artifactId><version>${log4j.version}</version></dependency><!-- Lombok:Java简化代码库 --><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>${lombok.version}</version><optional>true</optional></dependency><!-- Javax Persistence API:Java持久化API --><dependency><groupId>javax.persistence</groupId><artifactId>persistence-api</artifactId><version>1.0.2</version></dependency><!-- 通用Mapper:MyBatis通用Mapper --><dependency><groupId>tk.mybatis</groupId><artifactId>mapper</artifactId><version>${mapper.version}</version></dependency></dependencies><!-- 项目构建配置 --><build><!-- 配置资源处理 --><resources><!-- 第一个资源配置 --><resource><!-- 指定资源目录 --><directory>src/main/resources</directory><!-- 是否进行资源过滤 --><filtering>true</filtering></resource><!-- 第二个资源配置 --><resource><!-- 指定资源目录 --><directory>src/main/resources</directory><!-- 是否进行资源过滤 --><filtering>false</filtering><!-- 包含的文件列表 --><includes><!-- 包含所有的 .xml 文件 --><include>**/*.xml</include><include>application.properties</include><!-- 包含根据 activatedProperties 动态生成的 application-${activatedProperties}.properties 文件 --><include>application-${activatedProperties}.properties</include><!-- 包含所有的 .properties 文件 --><include>**/*.properties</include><include>logback.xml</include></includes></resource></resources><!-- 配置 Maven 插件 --><plugins><!-- Spring Boot Maven Plugin:用于打包Spring Boot应用 --><plugin><!-- 插件组ID --><groupId>org.springframework.boot</groupId><!-- 插件ID --><artifactId>spring-boot-maven-plugin</artifactId></plugin><!-- Maven Resources Plugin:Maven资源处理插件 --><plugin><!-- 插件组ID --><groupId>org.apache.maven.plugins</groupId><!-- 插件ID --><artifactId>maven-resources-plugin</artifactId><!-- 插件版本 --><version>3.1.0</version></plugin></plugins></build></project>
5. 上传文件
上传文件到CentOS中,创建一个mydocker的文件夹,将打包的jar、Dockerfile、docker-compose.yml放在同一级目录中。如同:

ps:以下命令需要在包含jar包、Dockerfile、docker-compose.yml目录下进行,不然可能会出现找不到文件的错误
6. 创建基础Docker镜像
docker build -t deploy-docker:1.1 .
7. docker-compose.yml编排
编写完成docker-compose.yml后,进行语法检查
# 进行语法检查
docker-compose config -q
如果语法检查没有任何问题,进行创建、启动
docker-compose up -d
8. 停止并删除容器编排
docker-compose down
三、案例地址
放在gitee上,有需要的可以获取,如果有帮助记得★starhttps://gitee.com/CJ_HGX/deploy-docker
https://gitee.com/CJ_HGX/deploy-docker
相关文章:
Docker Compose实例
目录 一、前提说明 二、简单的Docker容器部署案例 1. Dockerfile 配置 2. docker-compose.yml 配置 3. application-prod.properties 配置 4. pom.xml 配置 5. 上传文件 6. 创建基础Docker镜像 7. docker-compose.yml编排 8. 停止并删除容器编排 三、案例地址 一、前…...
Mac上新版InfluxDB使用教程
一、简介 官网:influxdb 二、influxdb安装 建议使用Homebrew在 macOS 上安装 InfluxDB v2: brew install influxdb启动influxdb服务:brew services start influxdb 停止influxdb服务:brew services stop influxdb 查看是否启…...
性能篇:网络通信优化之序列化
嗨,小米的朋友们!欢迎回到小米的技术分享空间。今天,我们将深入探讨网络通信中一个不可忽视的重要环节——序列化。废话不多说,让我们一起来揭开序列化的神秘面纱! 背景 序列化作为计算机领域中重要的概念,其存在背景根植于分布式系统和跨语言通信的需求。随着信息技术…...
【UE 游戏编程基础知识】
目录 0 引言1 基础知识1.1 拓展:3D数学和计算机图形学的关系 🙋♂️ 作者:海码007📜 专栏:UE虚幻引擎专栏💥 标题:【UE 游戏编程基础知识】❣️ 寄语:书到用时方恨少,事…...
原语,原子,线程安全
原子操作和原语是计算机科学中常见的概念,通常用于多线程或多进程环境中,以确保数据的一致性和同步。 原子操作(Atomic Operations) 原子操作是不可再分的操作,在执行完毕之前不会被线程调度系统中断的操作。从外部看…...
fast.ai 机器学习笔记(一)
机器学习 1:第 1 课 原文:medium.com/hiromi_suenaga/machine-learning-1-lesson-1-84a1dc2b5236 译者:飞龙 协议:CC BY-NC-SA 4.0 来自机器学习课程的个人笔记。随着我继续复习课程以“真正”理解它,这些笔记将继续更…...
Linux下的socket操作
一、TCP服务端 创建一个TCP服务器的基本操作: 创建一个套接字(socket):使用socket函数绑定套接字(socket):将套接字绑定到一个特定的IP地址和端口号上,这些信息要用结构体sockaddr_in来保存监…...
爬虫练习——动态网页的爬取(股票和百度翻译)
动态网页也是字面意思:实时更新的那种 还有就是你在股票这个网站上,翻页。他的地址是不变的 是动态的加载,真正我不太清楚,只知道他是不变的。如果用静态网页的方法就不可行了。 静态网页的翻页,是网址是有规律的。 …...
Name or service not known问题解决和分析过程解析
目 录 一、问题描述 二、问题查处过程 (一)为何不能识别到bogon (二)为何会出现bogon (三)能不能更改bogon (四)能识别其他host的名字 三、问题分析 四、问题解决 …...
emmet语法
一.html $排序 直接.dem或#two是默认div 内容可写{}里 二.css 直接写首字母 三.格式化 一次(右键格式化) 永久...
【PTA主观题】8-1 文件操作
题目要求 编写函数int input(FILE * fp),录入学生的信息,自定义录入结束方式,但至少包括学号、姓名、班级、分数和登录密码,并按照学号排序后以二进制方式存入stus.dat,函数返回学生数量;定义函数void enc…...
机器学习算法决策树
决策树的介绍 决策树是一种常见的分类模型,在金融风控、医疗辅助诊断等诸多行业具有较为广泛的应用。决策树的核心思想是基于树结构对数据进行划分,这种思想是人类处理问题时的本能方法。例如在婚恋市场中,女方通常会先询问男方是否有房产&a…...
ssh和sftp服务分离
目录 一、增加sftp的deamon二、增加sftp的service三、其他配套文件四、修改配置文件五、分别重启两个服务: 由于安全需要,客户这边想把sftp使用的端口与ssh使用的端口分开。 我们知道sftp没有自己的服务器守护进程,它需要依赖sshd守护进程来…...
Bootstrap学习三
Bootstrap学习三 文章目录 前言四、Bootstrap插件4.1. 插件概览4.1.1. data属性4.1.2. 编程方式的API4.1.3. 避免命名空间冲突4.1.4. 事件 4.2. 模态框4.2.1. 引入4.2.2. 基本结构4.2.3. 基本使用4.2.4. 触发模态框的方法 4.3. 下拉菜单和滚动监听4.3.1. 下拉菜单4.3.2. 滚动监…...
第77讲用户管理功能实现
用户管理功能实现 前端: views/user/index.vue <template><el-card><el-row :gutter"20" class"header"><el-col :span"7"><el-input placeholder"请输入用户昵称..." clearable v-model"…...
锐捷(十九)锐捷设备的接入安全
1、PC1的IP地址和mac地址做全局静态ARP绑定; 全局下:address-bind 192.168.1.1 mac(pc1) G0/2:ip verify source port-securityarp-check 2、PC2的IP地址和MAC地址做全局IPMAC绑定: Address-bind 192.168.1.2 0050.7966.6807Ad…...
【MySQL题】——基础概念论述(二)
🎃个人专栏: 🐬 算法设计与分析:算法设计与分析_IT闫的博客-CSDN博客 🐳Java基础:Java基础_IT闫的博客-CSDN博客 🐋c语言:c语言_IT闫的博客-CSDN博客 🐟MySQL:…...
Spring Boot + flowable 快速实现工作流
背景 使用flowable自带的flowable-ui制作流程图 使用springboot开发流程使用的接口完成流程的业务功能 文章来源:https://blog.csdn.net/zhan107876/article/details/120815560 一、flowable-ui部署运行 flowable-6.6.0 运行 官方demo 参考文档: htt…...
(已解决)LaTeX Error: File `svproc.cls‘ not found. (用Springer LNCS 会议Proceedings模板)
会议要求使用LNCS模板,并给了获取模板链接:https://www.springer.com/gp/authors-editors/conference-proceedings/conference-proceedings-guidelines。我在里面下载了latex模板之后,编译那个author.tex发现抱错: 解决办法&#…...
Spring Boot 自定义指标
Spring Boot 自定义指标 阅读本文需要对一些前置技术有所了解,下面列出的一些前置技术是必须要了解的。 Prometheus:这是一个时序数据库,我们的指标数据一般保存在这个数据库中。Grafana:借助Grafana可以将Prometheus中的数据以图表的方式展示出来。Micrometer:是一个用于…...
深度学习在微纳光子学中的应用
深度学习在微纳光子学中的主要应用方向 深度学习与微纳光子学的结合主要集中在以下几个方向: 逆向设计 通过神经网络快速预测微纳结构的光学响应,替代传统耗时的数值模拟方法。例如设计超表面、光子晶体等结构。 特征提取与优化 从复杂的光学数据中自…...
MySQL 隔离级别:脏读、幻读及不可重复读的原理与示例
一、MySQL 隔离级别 MySQL 提供了四种隔离级别,用于控制事务之间的并发访问以及数据的可见性,不同隔离级别对脏读、幻读、不可重复读这几种并发数据问题有着不同的处理方式,具体如下: 隔离级别脏读不可重复读幻读性能特点及锁机制读未提交(READ UNCOMMITTED)允许出现允许…...
多模态商品数据接口:融合图像、语音与文字的下一代商品详情体验
一、多模态商品数据接口的技术架构 (一)多模态数据融合引擎 跨模态语义对齐 通过Transformer架构实现图像、语音、文字的语义关联。例如,当用户上传一张“蓝色连衣裙”的图片时,接口可自动提取图像中的颜色(RGB值&…...
在四层代理中还原真实客户端ngx_stream_realip_module
一、模块原理与价值 PROXY Protocol 回溯 第三方负载均衡(如 HAProxy、AWS NLB、阿里 SLB)发起上游连接时,将真实客户端 IP/Port 写入 PROXY Protocol v1/v2 头。Stream 层接收到头部后,ngx_stream_realip_module 从中提取原始信息…...
ESP32 I2S音频总线学习笔记(四): INMP441采集音频并实时播放
简介 前面两期文章我们介绍了I2S的读取和写入,一个是通过INMP441麦克风模块采集音频,一个是通过PCM5102A模块播放音频,那如果我们将两者结合起来,将麦克风采集到的音频通过PCM5102A播放,是不是就可以做一个扩音器了呢…...
解决本地部署 SmolVLM2 大语言模型运行 flash-attn 报错
出现的问题 安装 flash-attn 会一直卡在 build 那一步或者运行报错 解决办法 是因为你安装的 flash-attn 版本没有对应上,所以报错,到 https://github.com/Dao-AILab/flash-attention/releases 下载对应版本,cu、torch、cp 的版本一定要对…...
聊一聊接口测试的意义有哪些?
目录 一、隔离性 & 早期测试 二、保障系统集成质量 三、验证业务逻辑的核心层 四、提升测试效率与覆盖度 五、系统稳定性的守护者 六、驱动团队协作与契约管理 七、性能与扩展性的前置评估 八、持续交付的核心支撑 接口测试的意义可以从四个维度展开,首…...
Spring Cloud Gateway 中自定义验证码接口返回 404 的排查与解决
Spring Cloud Gateway 中自定义验证码接口返回 404 的排查与解决 问题背景 在一个基于 Spring Cloud Gateway WebFlux 构建的微服务项目中,新增了一个本地验证码接口 /code,使用函数式路由(RouterFunction)和 Hutool 的 Circle…...
听写流程自动化实践,轻量级教育辅助
随着智能教育工具的发展,越来越多的传统学习方式正在被数字化、自动化所优化。听写作为语文、英语等学科中重要的基础训练形式,也迎来了更高效的解决方案。 这是一款轻量但功能强大的听写辅助工具。它是基于本地词库与可选在线语音引擎构建,…...
Fabric V2.5 通用溯源系统——增加图片上传与下载功能
fabric-trace项目在发布一年后,部署量已突破1000次,为支持更多场景,现新增支持图片信息上链,本文对图片上传、下载功能代码进行梳理,包含智能合约、后端、前端部分。 一、智能合约修改 为了增加图片信息上链溯源,需要对底层数据结构进行修改,在此对智能合约中的农产品数…...
