赞
踩
Docker中Docker网络-理解Docker0与自定义网络的使用示例:
Docker中Docker网络-理解Docker0与自定义网络的使用示例_docker 配置 docker0-CSDN博客
Docker中使用自定义网络方式实现Redis集群部署与测试流程:
Docker中使用自定义网络方式实现Redis集群部署与测试流程-CSDN博客
上面介绍了Docker中自定义网络的相关知识。
如果项目使用Docker Compose编排,比如最近的例子,搭建Springboot项目并使其连接
Mysql和redis,则如何通过自定义网络的方式实现。
如果不考虑自定义网络的实现方式,只需要使用Docker Compose实现编排部署各服务可以参考如下
docker-compose入门以及部署SpringBoot+Vue+Redis+Mysql(前后端分离项目)以若依前后端分离版为例:
注:
1、首先按照上面的文章搭建项目目录如下
注意这里redis使用的版本是5.0.9,所以要下载其对应版本的配置文件,redis.conf
下载地址
下载对应版本后,解压找到redis.conf,并修改其内容注释掉bind 127.0.0.1,并修改连接密码。
然后还需要授予此文件权限
chmod 777 redis.conf
mysql下新建空的data目录即可。redis目录下data目录也是空目录。
2、新建docker-compose.yml修改其内容为
- version: "3.8"
-
- services:
-
- redis:
- image: redis:5.0.9-alpine3.11
- command: redis-server /etc/redis/redis.conf
- ports:
- - "379:6379"
- volumes:
- - ./redis/redis.conf:/etc/redis/redis.conf
- - ./redis/data:/data
- networks:
- badaonet:
- ipv4_address: 192.168.0.11
-
- mysql:
- image: mysql:8.0
- command: --lower_case_table_names=1
- environment:
- MYSQL_DATABASE: test
- MYSQL_ROOT_PASSWORD: ABC@123!
- MYSQL_ROOT_HOST: '%'
- TZ: Asia/Shanghai
- ports:
- - "306:3306"
- volumes:
- - ./mysql/data:/var/lib/mysql
- networks:
- badaonet:
- ipv4_address: 192.168.0.12
-
- java:
- image: openjdk:8u342-oracle
- command: [
- 'java',
- '-jar',
- '/home/badao.jar'
- ]
- environment:
- TZ: Asia/Shanghai
- ports:
- - "996:996"
- volumes:
- - ./java:/home
- working_dir: /home/
- networks:
- badaonet:
- ipv4_address: 192.168.0.13
- depends_on:
- - redis
- - mysql
-
- networks:
- badaonet:
- ipam:
- config:
- - subnet: 192.168.0.0/24

注意这里的yml配置文件一定要注意空格缩进,不要使用tab,缩进使用2个空格,key后面跟一个空格。
编写完yml配置文件后建议找格式化校验的网站进行校验格式。
上面配置文件中最下面networks部分就是自定义网络的声明
紧跟着的badaonet是自定义的名称,后面的subnet是指定子网。
然后上面每个容器就可以通过networks指定自定义网络的名称以及指定ip
比如这里的mysql指定使用自定义网络的192.168.0.12 ip,并将其容器内部的3306端口映射到306容器外端口。
3、启动并验证是否有报错
执行如下
docker compose up
这里不加-d便于查看日志输出。
无明显报错可再次启动一个窗口通过
docker ps
验证是否都启动成功
可以使用如下命令查看自定义网络的详细情况
docker network inspect badao_badaonet
可以看到网络已经成功配置。
4、那么关键是在SpringBoot中如何进行连接
这里在SpringBoot的配置文件中连接mysql和redis时就可以直接使用docker compose配置文件
中指定的容器的ip,并且端口使用映射前容器内部的ip进行连接。
比如连接mysql
url:jdbc:mysql://192.168.0.12:3306/test?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
连接redis
- redis:
- # 地址
- #本地测试用
- host: 192.168.0.11
- port: 6379
- password: ABC@123!
将以上程序打包,并更改为badao.jar,上传至java目录下。
然后上面执行
docker compose up
后,可以连接mysql以及redis分别测试是否启动成功,然后在mysql中新建一个测试表
为了测试jar包连接mysql和redis是否成功,新建一个测试controller
- @RequestMapping("student")
- @RestController
- public class UserController {
-
- @Autowired
- private UserService userService;
-
- @Autowired
- RedisCache redisCache;
-
- @RequestMapping("save")
- public String save() {
- User user = new User();
- user.setUserId(new Random().nextInt( 1000 ) + 1);
- user.setName("张三"+user.getUserId());
- user.setAge(new Random().nextInt( 80 ) + 1);
- userService.insert(user);
- redisCache.setCacheObject("badao","222",100, TimeUnit.SECONDS);
- String aaa = redisCache.getCacheObject("badao");
- System.out.println(aaa);
- return user.getName()+"创建成功!";
- }
-
- }

然后调用该接口测试插入mysql和redis数据是否成功
curl 127.0.0.1:996/student/save
连接并插入mysql成功
连接并插入redis成功
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。