当前位置:   article > 正文

Docker Compose实例

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 配置

  1. # 基于那个镜像使用 java
  2. # FROM openjdk:8-oracle
  3. FROM java:8
  4. # 作者
  5. MAINTAINER cj
  6. # 在主机 /var/lib/docker 目录下创建一个临时文件,并链接到容器的 /tmp
  7. VOLUME /tmp
  8. # 将jar包添加到容器中,并命名为 deploy-docker.jar
  9. ADD deploy-docker-1.0-SNAPSHOT.jar /deploy-docker.jar
  10. # 运行jar包
  11. RUN bash -c 'touch /deploy-docker.jar'
  12. # 使用 ENTRYPOINT 设置容器启动时执行的命令,并指定 Spring profile 为 prod
  13. ENTRYPOINT ["java", "-jar", "/deploy-docker.jar", "--spring.profiles.active=prod"]
  14. # SpringBoot 项目配置的端口号为 1931,需要将 1931 暴露出去
  15. EXPOSE 1931

2. docker-compose.yml 配置

  1. # docker-compose文件版本号
  2. version: "3"
  3. # 定义自定义网络 springboot_network_1
  4. networks:
  5. springboot_network_1:
  6. # 配置各个容器服务
  7. services:
  8. # 定义名为 microService 的服务
  9. microService:
  10. # 使用 deploy-docker:1.1 镜像作为容器
  11. image: deploy-docker:1.1
  12. # 设置容器的名称为 ms01
  13. container_name: ms01 # 容器名称,如果不指定,会生成一个服务名加上前缀的容器名
  14. # 将容器内部端口 1931 映射到宿主机端口 1931
  15. ports:
  16. - "1931:1931"
  17. # 挂载宿主机的 /app/microService 目录到容器内的 /data 目录
  18. volumes:
  19. - /app/microService:/data
  20. # 连接到名为 springboot_network_1 的自定义网络
  21. networks:
  22. - springboot_network_1
  23. # 定义 microService 服务依赖的其他服务
  24. depends_on:
  25. - redis
  26. - mysql
  27. # 定义名为 redis 的服务
  28. redis:
  29. # 使用 redis:6.0.8 镜像作为容器
  30. image: redis:6.0.8
  31. # 主机端口:容器内部端口
  32. ports:
  33. - "6379:6379"
  34. # 挂载宿主机的 redis 配置文件和数据目录到容器内
  35. volumes:
  36. - /app/redis/redis.conf:/etc/redis/redis.conf
  37. - /app/redis/data:/data
  38. # 连接到名为 springboot_network_1 的自定义网络
  39. networks:
  40. - springboot_network_1
  41. # 指定容器启动命令为 redis-server /etc/redis/redis.conf
  42. command: redis-server /etc/redis/redis.conf
  43. # 定义名为 mysql 的服务
  44. mysql:
  45. # 使用 mysql:8.3 镜像作为容器
  46. image: mysql:8.3
  47. # 设置 MySQL 的环境变量
  48. environment:
  49. MYSQL_ROOT_PASSWORD: '123456'
  50. MYSQL_ALLOW_EMPTY_PASSWORD: 'no'
  51. MYSQL_DATABASE: 'deploy-docker'
  52. MYSQL_USER: 'cj'
  53. MYSQL_PASSWORD: '123456'
  54. # 主机端口(3306):容器内部端口(3306)
  55. ports:
  56. - "3306:3306"
  57. # 挂载宿主机的 MySQL 数据库文件、配置文件和初始化脚本到容器内
  58. volumes:
  59. - /app/mysql/db:/var/lib/mysql
  60. - /app/mysql/conf/my.cnf:/etc/my.cnf
  61. - /app/mysql/init:/docker-entrypoint-initdb.d
  62. # 连接到名为 springboot_network_1 的自定义网络
  63. networks:
  64. - springboot_network_1
  65. # 指定容器启动命令为 --default-authentication-plugin=mysql_native_password
  66. command: --default-authentication-plugin=mysql_native_password # 解决外部无法访问

3. application-prod.properties 配置

  1. # 服务器端口号
  2. server.port=1931
  3. server.servlet.context-path=/
  4. # ======================== Alibaba Druid 数据源配置 ======================
  5. # 配置使用 Alibaba Druid 数据源
  6. spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
  7. # 数据库驱动类名
  8. spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
  9. # 数据库连接 URL
  10. #spring.datasource.url=jdbc:mysql://192.168.153.133:3306/deploy_docker?serverTimezone=GMT%2B8&useSSL=false&characterEncoding=utf-8&allowPublicKeyRetrieval=true
  11. # 使用容器内部服务名进行连接
  12. spring.datasource.url=jdbc:mysql://mysql:3306/deploy_docker?serverTimezone=GMT%2B8&useSSL=false&characterEncoding=utf-8&allowPublicKeyRetrieval=true
  13. # 数据库用户名
  14. spring.datasource.username=root
  15. # 数据库密码
  16. spring.datasource.password=123456
  17. # 配置 Druid 连接池,禁用空闲时检测
  18. spring.datasource.druid.test-while-idle=false
  19. # ======================== Redis 缓存配置 ======================
  20. # Redis 数据库索引
  21. spring.redis.database=0
  22. # 使用 IP 地址进行连接
  23. #spring.redis.host=192.168.153.133
  24. # 使用容器内部服务名进行连接
  25. spring.redis.host=redis
  26. # Redis 端口号
  27. spring.redis.port=6379
  28. # Redis 密码
  29. spring.redis.password=123456
  30. # 配置 Lettuce 连接池参数
  31. spring.redis.lettuce.pool.max-active=8
  32. spring.redis.lettuce.pool.max-wait=-1ms
  33. spring.redis.lettuce.pool.max-idle=8
  34. spring.redis.lettuce.pool.min-idle=0
  35. # ======================== MyBatis 配置 ====================
  36. # MyBatis Mapper 文件路径
  37. mybatis.mapper-locations=classpath:mapper/*.xml
  38. # MyBatis 实体类包路径
  39. mybatis.type-aliases-package=org.example.entities
  40. # ======================== Swagger 配置 ======================
  41. # 启用 Swagger2 API 文档
  42. spring.swagger2.enabled=true

4. pom.xml 配置

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <project xmlns="http://maven.apache.org/POM/4.0.0"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  5. <modelVersion>4.0.0</modelVersion>
  6. <parent>
  7. <groupId>org.springframework.boot</groupId>
  8. <artifactId>spring-boot-starter-parent</artifactId>
  9. <version>2.5.6</version>
  10. <relativePath/> <!-- 从仓库中查找父项目 -->
  11. </parent>
  12. <groupId>org.study</groupId>
  13. <artifactId>deploy-docker</artifactId>
  14. <packaging>jar</packaging>
  15. <version>1.0-SNAPSHOT</version>
  16. <!-- 定义项目使用的属性,如编码、编译版本等 -->
  17. <properties>
  18. <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  19. <maven.compiler.source>1.8</maven.compiler.source>
  20. <maven.compiler.target>1.8</maven.compiler.target>
  21. <!-- 定义各个依赖版本 -->
  22. <junit.version>4.12</junit.version>
  23. <log4j.version>1.2.17</log4j.version>
  24. <lombok.version>1.16.18</lombok.version>
  25. <mysql.version>8.0.30</mysql.version>
  26. <druid.version>1.1.17</druid.version>
  27. <mapper.version>4.1.5</mapper.version>
  28. <mybatis.spring.boot.version>1.3.0</mybatis.spring.boot.version>
  29. <swagger.version>2.9.2</swagger.version>
  30. </properties>
  31. <!--配置不同的profile,对应不同的生产环境-->
  32. <profiles>
  33. <profile>
  34. <!--开发-->
  35. <id>dev</id>
  36. <activation>
  37. <!--默认开发环境-->
  38. <activeByDefault>true</activeByDefault>
  39. </activation>
  40. <properties>
  41. <activatedProperties>dev</activatedProperties>
  42. </properties>
  43. </profile>
  44. <profile>
  45. <id>prod</id>
  46. <properties>
  47. <activatedProperties>prod</activatedProperties>
  48. </properties>
  49. </profile>
  50. <profile>
  51. <id>test</id>
  52. <properties>
  53. <activatedProperties>test</activatedProperties>
  54. </properties>
  55. </profile>
  56. </profiles>
  57. <!-- 项目依赖配置 -->
  58. <dependencies>
  59. <!-- Guava:Google开源的Guava中自带的布隆过滤器 -->
  60. <dependency>
  61. <groupId>com.google.guava</groupId>
  62. <artifactId>guava</artifactId>
  63. <version>23.0</version>
  64. </dependency>
  65. <!-- Redisson:Redis Java客户端库 -->
  66. <dependency>
  67. <groupId>org.redisson</groupId>
  68. <artifactId>redisson</artifactId>
  69. <version>3.13.4</version>
  70. </dependency>
  71. <!-- Spring Boot Starter Web:Spring Boot的Web起步依赖 -->
  72. <dependency>
  73. <groupId>org.springframework.boot</groupId>
  74. <artifactId>spring-boot-starter-web</artifactId>
  75. </dependency>
  76. <!-- Spring Boot Starter Actuator:Spring Boot的监控与管理依赖 -->
  77. <dependency>
  78. <groupId>org.springframework.boot</groupId>
  79. <artifactId>spring-boot-starter-actuator</artifactId>
  80. </dependency>
  81. <!-- Swagger2:API文档生成工具 -->
  82. <dependency>
  83. <groupId>io.springfox</groupId>
  84. <artifactId>springfox-swagger2</artifactId>
  85. <version>${swagger.version}</version>
  86. </dependency>
  87. <dependency>
  88. <groupId>io.springfox</groupId>
  89. <artifactId>springfox-swagger-ui</artifactId>
  90. <version>${swagger.version}</version>
  91. </dependency>
  92. <!-- Spring Boot Starter Data Redis:Spring Boot集成Redis依赖 -->
  93. <dependency>
  94. <groupId>org.springframework.boot</groupId>
  95. <artifactId>spring-boot-starter-data-redis</artifactId>
  96. </dependency>
  97. <!-- Spring Boot Starter Cache:Spring Boot缓存起步依赖 -->
  98. <dependency>
  99. <groupId>org.springframework.boot</groupId>
  100. <artifactId>spring-boot-starter-cache</artifactId>
  101. </dependency>
  102. <!-- Apache Commons Pool2:通用对象池 -->
  103. <dependency>
  104. <groupId>org.apache.commons</groupId>
  105. <artifactId>commons-pool2</artifactId>
  106. </dependency>
  107. <!-- Jedis:Redis的Java客户端库 -->
  108. <dependency>
  109. <groupId>redis.clients</groupId>
  110. <artifactId>jedis</artifactId>
  111. <version>3.1.0</version>
  112. </dependency>
  113. <!-- MySQL Connector Java:MySQL数据库驱动 -->
  114. <dependency>
  115. <groupId>mysql</groupId>
  116. <artifactId>mysql-connector-java</artifactId>
  117. <version>${mysql.version}</version>
  118. </dependency>
  119. <!-- Druid Spring Boot Starter:Spring Boot集成Druid连接池 -->
  120. <dependency>
  121. <groupId>com.alibaba</groupId>
  122. <artifactId>druid-spring-boot-starter</artifactId>
  123. <version>${druid.version}</version>
  124. </dependency>
  125. <dependency>
  126. <groupId>com.alibaba</groupId>
  127. <artifactId>druid</artifactId>
  128. <version>${druid.version}</version>
  129. </dependency>
  130. <!-- MyBatis Spring Boot Starter:Spring Boot集成MyBatis依赖 -->
  131. <dependency>
  132. <groupId>org.mybatis.spring.boot</groupId>
  133. <artifactId>mybatis-spring-boot-starter</artifactId>
  134. <version>${mybatis.spring.boot.version}</version>
  135. </dependency>
  136. <!-- Apache Commons Codec:通用编解码库 -->
  137. <dependency>
  138. <groupId>commons-codec</groupId>
  139. <artifactId>commons-codec</artifactId>
  140. <version>1.10</version>
  141. </dependency>
  142. <!-- Hutool:Java工具类库 -->
  143. <dependency>
  144. <groupId>cn.hutool</groupId>
  145. <artifactId>hutool-all</artifactId>
  146. <version>5.2.3</version>
  147. </dependency>
  148. <!-- JUnit:Java单元测试框架 -->
  149. <dependency>
  150. <groupId>junit</groupId>
  151. <artifactId>junit</artifactId>
  152. <version>${junit.version}</version>
  153. </dependency>
  154. <!-- Spring Boot DevTools:Spring Boot开发工具,用于热部署等 -->
  155. <dependency>
  156. <groupId>org.springframework.boot</groupId>
  157. <artifactId>spring-boot-devtools</artifactId>
  158. <scope>runtime</scope>
  159. <optional>true</optional>
  160. </dependency>
  161. <!-- Spring Boot Starter Test:Spring Boot测试起步依赖 -->
  162. <dependency>
  163. <groupId>org.springframework.boot</groupId>
  164. <artifactId>spring-boot-starter-test</artifactId>
  165. <scope>test</scope>
  166. </dependency>
  167. <!-- Log4j:Java日志框架 -->
  168. <dependency>
  169. <groupId>log4j</groupId>
  170. <artifactId>log4j</artifactId>
  171. <version>${log4j.version}</version>
  172. </dependency>
  173. <!-- Lombok:Java简化代码库 -->
  174. <dependency>
  175. <groupId>org.projectlombok</groupId>
  176. <artifactId>lombok</artifactId>
  177. <version>${lombok.version}</version>
  178. <optional>true</optional>
  179. </dependency>
  180. <!-- Javax Persistence API:Java持久化API -->
  181. <dependency>
  182. <groupId>javax.persistence</groupId>
  183. <artifactId>persistence-api</artifactId>
  184. <version>1.0.2</version>
  185. </dependency>
  186. <!-- 通用Mapper:MyBatis通用Mapper -->
  187. <dependency>
  188. <groupId>tk.mybatis</groupId>
  189. <artifactId>mapper</artifactId>
  190. <version>${mapper.version}</version>
  191. </dependency>
  192. </dependencies>
  193. <!-- 项目构建配置 -->
  194. <build>
  195. <!-- 配置资源处理 -->
  196. <resources>
  197. <!-- 第一个资源配置 -->
  198. <resource>
  199. <!-- 指定资源目录 -->
  200. <directory>src/main/resources</directory>
  201. <!-- 是否进行资源过滤 -->
  202. <filtering>true</filtering>
  203. </resource>
  204. <!-- 第二个资源配置 -->
  205. <resource>
  206. <!-- 指定资源目录 -->
  207. <directory>src/main/resources</directory>
  208. <!-- 是否进行资源过滤 -->
  209. <filtering>false</filtering>
  210. <!-- 包含的文件列表 -->
  211. <includes>
  212. <!-- 包含所有的 .xml 文件 -->
  213. <include>**/*.xml</include>
  214. <include>application.properties</include>
  215. <!-- 包含根据 activatedProperties 动态生成的
  216. application-${activatedProperties}.properties 文件 -->
  217. <include>application-${activatedProperties}.properties</include>
  218. <!-- 包含所有的 .properties 文件 -->
  219. <include>**/*.properties</include>
  220. <include>logback.xml</include>
  221. </includes>
  222. </resource>
  223. </resources>
  224. <!-- 配置 Maven 插件 -->
  225. <plugins>
  226. <!-- Spring Boot Maven Plugin:用于打包Spring Boot应用 -->
  227. <plugin>
  228. <!-- 插件组ID -->
  229. <groupId>org.springframework.boot</groupId>
  230. <!-- 插件ID -->
  231. <artifactId>spring-boot-maven-plugin</artifactId>
  232. </plugin>
  233. <!-- Maven Resources Plugin:Maven资源处理插件 -->
  234. <plugin>
  235. <!-- 插件组ID -->
  236. <groupId>org.apache.maven.plugins</groupId>
  237. <!-- 插件ID -->
  238. <artifactId>maven-resources-plugin</artifactId>
  239. <!-- 插件版本 -->
  240. <version>3.1.0</version>
  241. </plugin>
  242. </plugins>
  243. </build>
  244. </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后,进行语法检查

  1. # 进行语法检查
  2. docker-compose config -q

如果语法检查没有任何问题,进行创建、启动

docker-compose up -d

8. 停止并删除容器编排

docker-compose down

三、案例地址

放在gitee上,有需要的可以获取,如果有帮助记得★starhttps://gitee.com/CJ_HGX/deploy-dockericon-default.png?t=N7T8https://gitee.com/CJ_HGX/deploy-docker

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家小花儿/article/detail/80420
推荐阅读
相关标签
  

闽ICP备14008679号