Docker-Compose 集成SpringBoot + redis + mysql
1.首先构建Springboot项目
1.1、在Dos窗口使用cd命令切换到项目目录下
1.2、在Dos窗口下执行 mvn package -P dev-docker docker:build
1.3、运行docker image ls,列出所有本地镜像
2.首先创建一个空目录,例如 DockerIntegrate
3.在DockerIntegrate目录下创建一个文件,文件名为docker-compose.yml
version: '3'
services:
# 指定服务名称
xgs:
# 指定服务使用的镜像(这个镜像是已经构建好的jar包)
image: springio/ xgs: latest
# 指定容器名称
container_name: xgs- comp
# 指定服务运行的端口
ports:
- 18888 : 8888
redis:
image: redis: 5.0 .14
restart: always
container_name: my_redis
# Redis 的密码需要自己在与容器共享的配置 redis. conf 中加入,即更改配置中 requirepass yourpassword
command: redis- server / Users / mac/ Documents / DockerHome / app/ redis/ conf/ redis. conf
# 直接在其所在目录下执行 docker- compose up - d,即可在 Docker 中生成一个带密码的 Redis 容器。
command: redis- server -- requirepass 123456
ports:
- "6380:6379"
volumes:
- / Users / mac/ Documents / DockerHome / app/ redis/ data: / data
- / Users / mac/ Documents / DockerHome / app/ redis/ conf/ redis. conf: / usr/ local/ etc/ redis/ redis. conf
# 容器与宿主机时间同步
- / etc/ localtime: / etc/ localtime
environment:
TIME_ZONE: Asia / Beijing
mysql57:
image: mysql/ mysql- server: 5.7
ports:
- "3307:3306"
environment:
- MYSQL_ROOT_PASSWORD= 123
volumes:
- / Users / mac/ Documents / DockerHome / app/ mysql/ data: / var / lib/ mysql
deploy:
placement:
constraints:
- node. hostname== mysqld
restart_policy:
condition: on- failure
图文解释
4、切换到DockerIntegrate目录下执行下面命令
docker-compose up -d
5、使用命令 docker ps 查看docker启动项
以下看到三个服务,springboot项目+ redis+ mysql 服务全部启动成功,并且port 都做好了本地映射
6.接下来就可以使用宿主机的图形工具连接docker中的redis
7.因为mysql还需要做一些配置才可以使用宿主机连接
7.1、从容器中连接到mysql服务器
docker exec - it mysql1 mysql - uroot - p
#切换到mysql数据库下
use mysql
#修改root的host为%
update user set host= '%' where user= 'root'
#刷新,否则不生效
FLUSH PRIVILEGES;
#给root进行授权,并设置密码123
ALTER USER 'root' @'%' IDENTIFIED WITH mysql_native_password BY '123' ;
#刷新,否则不生效
FLUSH PRIVILEGES;
* * 然后使用本机IP+ 映射的端口号即可访问docker中的mysql* *
做到这一步,docker中的mysql,redis 就可以使用宿主机连接了,并且springboot项目也就启动起来了,如果因为前期mysql没有做root授权,导致springboot项目启动的时候导致连接不到数据库,只需要做好root授权,以后,单独重新启动springboot项目即可
**文章到这里就结束了,如果有任何疑问可以私信我或者评论区下方**