# 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 环境需要手动安装) ## 目录说明 ![1537412808002](images/1537412808002.png) ## 代码部分 项目的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; } ```