从零开始使用IDEA搭建Springboot+JPA+Swagger2.0+Logback+Lombok+Redis+Shiro1.4项目(九)

本文介绍了如何使用Docker-Compose将Springboot项目与多个服务(如Redis、Shiro等)整合在一起。首先解释了Docker-Compose的作用,然后详细说明了修改`application.yml`、打包项目、下载Docker-Compose、配置`docker-compose.yml`、启动和测试服务的步骤。在总结中,强调了应用内部服务间的通信以及`docker-compose.yml`文件的关键配置。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Docker-Compose整合多个镜像

什么是Docker-Compose

一个项目是一个镜像,一个镜像启动一个容器,代表一个环境。如果项目需要多个坏境,如JavaMySQLRedis,那一个镜像肯定满足不了。使用Docker-Compose将多个Docker整合在一起共同作用,就可以呈现出一个完整的项目。

准备工作

修改 application.yml

Docker-Compose将多个Docker变成一个整体,所以不能在使用外部端口。将项目依赖的MySQLRedis路径改为Docker镜像名。
原配置

spring:
	datasource:
		url: jdbc:mysql://localhost:3306/userinfo?serverTimezone=Asia/Shanghai
	redis:
		host: local

修改后

spring:
	datasource:
		url: jdbc:mysql://mysql:3306/userinfo?serverTimezone=Asia/Shanghai
	redis:
		host: redis

打包

将权限系统打成jar包。

下载 Docker-Compose

下载Docker-Compose,下载速度相当慢。

~$ sudo curl -L "https://github.com/docker/compose/releases/download/1.24.1/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

授权

~$ sudo chmod +x /usr/local/bin/docker-compose

检查版本,则安装成功。

~$ docker-compose --version

部署

拉取镜像

拉取最新的MySQL镜像和Redis镜像。

~$ docker search mysql
~$ docker pull mysql:8.0.17
~$ docker search redis
~$ docker pull redis

配置 docker-compose.yml 文件

创建docker-compose.yml文件。

version: '2'
services:
  mysql:
    environment:
      MYSQL_ROOT_PASSWORD: "root"
      MYSQL_DATABASE: userinfo
    image:  "mysql:8.0.17" 
    ports:
      - "3306:3306"
    volumes:
      - ./mysql/db:/var/lib/mysql
      - ./mysql/conf:/etc/my.cnf
      - ./mysql/init:/docker-entrypoint-initdb.d/
    command: [
      '--character-set-server=utf8',
      '--collation-server=utf8_general_ci',
      '--default-time-zone=+8:00'
      ]
  springboot:
    image:  "authority-demo:latest"
    ports:
      - "8080:8080"
    depends_on:
      - mysql
      - redis
  redis:
    image:  "redis:latest"
    ports:
      - "6379:6379"
    volumes:
      - ./redis/conf:/user/local/etc/redis
      - ./redis/data:/data
    command:
      redis-server
    environment:
      - TZ=Asia/Shanghai
      - LANG=en_US.UTF-8

创建文件夹docker/authority,将jar包和docker-compose.yml文件复制到路径内,根据volumes属性在authority路径下创建相应文件夹。
将数据库数据导出,放入路径./mysql/init下。
在这里插入图片描述

启动

进入docker-compose.yml文件所在路径,启动docker-compose
可以设置在后台运行:-d,如果不设置,要停止时需要新开一个命令行窗口。

~$ cd docker/authority
~$ docker-compose up

测试

打开Ubuntu的火狐浏览器,输入http://localhost:8080/swagger-ui.html
在这里插入图片描述

关闭

如果不使用后台运行,则新开一个命令行窗口进行关闭。

~$ docker-compose down

总结

application.yml

使用docker-compose时是将多个docker变成一个整体,没有暴露在外的端口,因此容器间互相访问需要依赖镜像名,打包前需要将配置文件中的端口改为对应的镜像名。

docker-compose.yml

一个完整的docker-compose.yml文件需要包含version、services、networks三个部分。

version:定义版本信息
services:服务的详细配置信息
networks :定义网络信息,加入某个特定网络

配置信息
services标签下的二级标签为服务名,一般根据镜像命名,方便区分。

services:
	springboot:
		......
	mysql:
		......
	reddis:
		......

image:服务所使用的镜像名。如果本地没有会自动尝试拉取该镜像

image:redis
image:mysql:8.0.17

port:映射端口,暴露端口

ports:
	- "3306:3306"
	- "8080:8080"
	- "6379:6379"

environment:设置镜像的变量,如MySQL的密码和数据库选用,redis的时区和字符编码

environment:
	MYSQL_ROOT_PASSWORD: "root"
	MYSQL_DATABASE: userinfo

	- TZ=Asia/Shanghai
	- LANG=en_US.UTF-8

volumes:挂载目录或者数据卷容器

volumes:
	- ./mysql/db:/var/lib/mysql
	- ./mysql/conf:/etc/my.cnf
	- ./mysql/init:/docker-entrypoint-initdb.d/

	- ./redis/conf:/user/local/etc/redis
	- ./redis/data:/data

command:覆盖容器启动后默认执行的命令,如修改MySQL的默认字符编码

command: [
	'--character-set-server=utf8',
	'--collation-server=utf8_general_ci',
	'--default-time-zone=+8:00'
	]

depends_on:容器依赖,决定容器的启动顺序。例如先启动MySQLRedis才能启动Springboot

services:
	springboot:
		......
		depends_on:
			- mysql
			- redis
	redis:
		......
	mysql:
		......

其他详细配置信息见https://www.jianshu.com/p/2217cfed29d7

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值