# springboot_docker_compose
**Repository Path**: aoxiaolys/springboot_docker_compose
## Basic Information
- **Project Name**: springboot_docker_compose
- **Description**: 使用docker compose 打包 springboot、redis、mongodb和mysql镜像
- **Primary Language**: Unknown
- **License**: Not specified
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 4
- **Created**: 2022-04-20
- **Last Updated**: 2022-04-20
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# docker-compose 部署spring boot、mysql应用
## 前置条件
* 安装好 docker
* 安装好 docker-compose (只有linux 环境需要手动安装)
## 目录说明

## 代码部分
项目的git地址: https://gitee.com/ComCtrl/springboot_docker_compose
## Docker化
1. app-dockerfile
这里 `ADD target/springboot-docker-compose-0.0.1.jar /app.jar` 这里需要自己执行 shell脚本进行打包,要不然 jar 包会找不到
```dockerfile
FROM java:8
VOLUME /tmp
# 设置时区
ENV TZ=Asia/Shanghai
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
ADD target/springboot-docker-compose-0.0.1.jar /app.jar
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]
```
2. build.sh 打包脚本
```shell
#!/bin/sh
mvn package -Dmaven.test.skip=true -Ptest docker:build
```
3. mysql-dockerfile
```dockerfile
FROM mysql:5.7
MAINTAINER lys ComCtrl10@gmail.com
ADD init.sql /docker-entrypoint-initdb.d/
```
4. init.sql
```sql
use springboot_docker_compose;
CREATE TABLE `user` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`username` varchar(255) DEFAULT NULL,
`nickname` varchar(255) DEFAULT NULL,
`birthday` datetime DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
-- ----------------------------
-- Records of user
-- ----------------------------
INSERT INTO `user` VALUES ('1', 'messi10', 'leo', null);
INSERT INTO `user` VALUES ('2', 'ddd', 'dd', '2018-09-18 00:00:00');
INSERT INTO `user` VALUES ('3', '33', '1', '2018-09-18 01:38:41');
INSERT INTO `user` VALUES ('4', 'xx', 'x', '2018-09-18 01:42:52');
INSERT INTO `user` VALUES ('5', 'eeeee', 'ee', '2018-09-18 01:46:55');
INSERT INTO `user` VALUES ('6', '5555', '66', '2018-09-18 10:10:52');
```
## Docker Compose
先创建好 `/data/mysql_data` 目录
```yaml
version : '3'
services:
app:
container_name: springboot-docker-compose
build:
context: .
dockerfile: app-dockerfile
ports:
- "8082:8082"
links:
- mysql
depends_on:
- mysql
volumes:
- '/etc/localtime:/etc/localtime:ro'
mysql:
container_name: mysql
build:
context: .
dockerfile: mysql-dockerfile
environment:
MYSQL_DATABASE: springboot_docker_compose
MYSQL_ROOT_PASSWORD: root
MYSQL_ROOT_HOST: '%'
command: [
'--innodb-buffer-pool-size=20M',
'--character-set-server=utf8mb4',
'--collation-server=utf8mb4_general_ci',
]
ports:
- "3306:3306"
restart: always
volumes:
- '/data/mysql_data:/var/lib/mysql'
- '/etc/localtime:/etc/localtime:ro'
```
## Linux 下进行打包发布
1. 清理所有的镜像和容器,准备一个干净的环境
```
[root@localhost springboot_docker_compose]# docker stop $(docker ps -a -q)
[root@localhost springboot_docker_compose]# docker rm $(docker ps -a -q)
[root@localhost springboot_docker_compose]# docker rmi $(docker images)
```
2. git 上拉取代码
```
[root@localhost ~]# git clone git@gitee.com:ComCtrl/springboot_docker_compose.git
Cloning into 'springboot_docker_compose'...
remote: Enumerating objects: 148, done.
remote: Counting objects: 100% (148/148), done.
remote: Compressing objects: 100% (136/136), done.
remote: Total 148 (delta 71), reused 0 (delta 0)
Receiving objects: 100% (148/148), 16.66 KiB | 0 bytes/s, done.
Resolving deltas: 100% (71/71), done.
```
3. 打包
```
[root@localhost ~]# cd springboot_docker_compose/
[root@localhost springboot_docker_compose]# chmod +x ./build.sh
[root@localhost springboot_docker_compose]# ./build.sh
```
4. 执行 docker-compose.yml
```
[root@localhost springboot_docker_compose]# docker-compose up --build
```
5. 验证结果
访问 http://192.168.2.2:8082/user/1,验证结果
## 增加 Redis
1. pom.xml
```xml
org.springframework.boot
spring-boot-starter-data-redis
```
2. application-test.properties
```properties
#======================================#
# 配置 redis 连接属性
#======================================#
# Redis数据库索引(默认为0)
spring.redis.database=0
# Redis服务器地址
spring.redis.host=redis
##Redis服务器连接端口
spring.redis.port=6379
# Redis服务器连接密码(默认为空)
spring.redis.password=
#连接池最大连接数(使用负值表示没有限制)
spring.redis.pool.max-active=8
# 连接池最大阻塞等待时间(使用负值表示没有限制)
spring.redis.pool.max-wait=-1
# 连接池中的最大空闲连接
spring.redis.pool.max-idle=8
# 连接池中的最小空闲连接
spring.redis.pool.min-idle=0
# 连接超时时间(毫秒)
spring.redis.timeout=0
```
3. application-dev.properties
```properties
#======================================#
# 配置 redis 连接属性
#======================================#
# Redis数据库索引(默认为0)
spring.redis.database=0
# Redis服务器地址
spring.redis.host=192.168.2.2
##Redis服务器连接端口
spring.redis.port=6379
# Redis服务器连接密码(默认为空)
spring.redis.password=
#连接池最大连接数(使用负值表示没有限制)
spring.redis.pool.max-active=8
# 连接池最大阻塞等待时间(使用负值表示没有限制)
spring.redis.pool.max-wait=-1
# 连接池中的最大空闲连接
spring.redis.pool.max-idle=8
# 连接池中的最小空闲连接
spring.redis.pool.min-idle=0
# 连接超时时间(毫秒)
spring.redis.timeout=0
```
4. docker-compose.yml
```yaml
redis:
image: "redis:alpine"
ports:
- "6379:6379"
command: [
"--appendonly yes",
"--stop-writes-on-bgsave-error no"
]
volumes:
- "/data/redis_data/dir:/data"
```
5. Controller
```java
@Autowired
private RedisTemplate redisTemplate;
@GetMapping("/redis")
public User redis(){
User user= new User();
user.setId(11);
user.setUsername("aa");
user.setNickname("xxx");
user.setBirthday(new Date());
ValueOperations ops = redisTemplate.opsForValue();
ops.set(String.valueOf(user.getId()), user);
return ops.get(String.valueOf(user.getId()));
}
```
## 增加 MongoDB
1. pom.xml
```xml
org.springframework.boot
spring-boot-starter-data-mongodb
```
2. application-dev.properties
```properties
spring.data.mongodb.uri=mongodb://192.168.2.2:27017/demo
```
3. application-test.properties
```properties
spring.data.mongodb.uri=mongodb://mongodb:27017/demo
```
4. docker-compose.yml
```yaml
mongodb:
container_name: mongodb
image: mongo:3.6
environment:
- MONGO_DATA_DIR=/data/db
- MONGO_LOG_DIR=/data/mongodb_logs
volumes:
- /data/mongodb_data:/data/db
ports:
- 27017:27017
```
5. Controller
```java
@Autowired
private MongoTemplate mongoTemplate;
@GetMapping("/mongo")
public DemoEntity getDemoEntity(){
DemoEntity demoEntity = new DemoEntity();
demoEntity.setId(2L);
demoEntity.setTitle("hahaha");
demoEntity.setDescription("一段描述");
demoEntity.setBy("zhangsan");
demoEntity.setUrl("http://www.baidu.com");
mongoTemplate.save(demoEntity);
Query query = new Query(Criteria.where("id").is(2L));
DemoEntity entity = mongoTemplate.findOne(query, DemoEntity.class);
return entity;
}
```