# [Docker] Spring boot, mySQL, redis 컨테이너 동시에 띄우기
2024. 12. 13. 15:01ㆍ개발/Docker
🌞 2024.12.13 Fri
본 포스팅은 SpringBoot, mysql, redis 를 동시에 적용해 도커 컨테이너 생성하는 내용을 다룹니다.
세가지 이미지를 동시에 띄워서 해보자.
1. Spring dependency 에 redis 의존성 추가
1.1 <build.gradle> 추가 (gradle)
implementation 'org.springframework.boot:spring-boot-starter-data-redis'
1.2 <pom.xml> 추가 (maven)
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
1.3 application.yml(gradle) setting (JDBC)
# 📝 < application.yml>
spring:
datasource:
url: jdbc:mysql://my-db:3306/mydb
username: root
password: qwer1234
driver-class-name: com.mysql.cj.jdbc.Driver
data:
redis:
host: my-cache-server
port: 6379
1.3 application.yml(Maven) setting (JDBC)
# 📝📝📝<application.properties> 📝📝📝
spring.mvc.view.prefix=/WEB-INF/views/
spring.mvc.view.suffix =.jsp
spring.mvc.static-path-pattern=/resources/**
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://my-db:3306/apple_store?serverTimezone=Asia/Seoul&autoReconnect=true&useSSL=false
spring.datasource.username=root
spring.datasource.password=qwer1234
productimage.upload.directory=src/main/resources/static/image
** host localhost 가 아니라 compose 에 있는 service 이름 임.
1.4 Redis config 생성. 및 Main controller 에서 wiring
// < RedisConfig.java>
@Configuration
public class RedisConfig {
@Bean
public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory connectionFactory) {
RedisTemplate<String, Object> template = new RedisTemplate<>();
template.setConnectionFactory(connectionFactory);
template.setKeySerializer(new StringRedisSerializer());
template.setValueSerializer(new GenericJackson2JsonRedisSerializer());
return template;
}
}
** Eclipse 로 코드 복사 할때 cmd shift o 를 누르면 알아서 임포트 를 자동완성해줌.
** 맨위에 해당 파일 임포트는 삭제하면 에러가 남.
// < AppController.java>
@RestController
public class AppController {
@Autowired
private RedisTemplate<String, Object> redisTemplate;
@GetMapping("/")
public String home() {
redisTemplate.opsForValue().set("abc", "def");
return "Hello, World!";
}
}
1.5 Compose file 에서 health 체크 추가
#- <compose.yml>
services:
my-server:
build: .
ports:
- 8080:8080
depends_on:
my-db:
condition: service_healthy
my-cache-server:
condition: service_healthy
my-db:
image: mysql
environment:
MYSQL_ROOT_PASSWORD: pwd1234
MYSQL_DATABASE: mydb
volumes:
- ./mysql_data:/var/lib/mysql
ports:
- 3306:3306
healthcheck:
test: [ "CMD", "mysqladmin", "ping" ]
interval: 5s
retries: 10
my-cache-server:
image: redis
ports:
- 6379:6379
healthcheck:
test: [ "CMD", "redis-cli", "ping" ]
interval: 5s
retries: 10
'개발 > Docker' 카테고리의 다른 글
# [Docker] 도커 기초 정의와 명령어 사용 (2) | 2024.12.14 |
---|---|
# [Docker ] Docker image, container 모두 삭제 (0) | 2024.12.14 |
# [Docker] Docker Compose 를 활용해 2개 이상의 컨테이너 관리 하기 (0) | 2024.12.13 |
# [Docker] Docker Compose 를 활용해 2개 이상의 컨테이너 관리 하기 (0) | 2024.12.13 |
# [ERROR] [my-server 2/2] COPY build/libs/*SNAPSHOT.jar /app. , Error: Unable to access jarfile application.jar (0) | 2024.12.13 |