[Redis] docker-compose 이용해 redis 띄우기 + Redis Config
1. redis image 다운로드
docker pull redis:alpine
alpine
은 태그를 의미하며 redis
의 버전 등의 값을 줄수 있다.
이를 생략하면 latest
를 받는데, alpine
태그의 특징은 이미지를 경량화 시켜서 용량이 작다는 것이다.
2. docker-compose.yml
작성
version: "3.8"
services:
db-mysql:
container_name: naem_database
image: mysql
platform: linux/amd64
env_file: ./.env
environment:
- MYSQL_ROOT_PASSWORD=$MYSQLDB_ROOT_PASSWORD
- MYSQL_DATABASE=$MYSQLDB_DATABASE
ports:
- ${MYSQLDB_LOCAL_PORT}:${MYSQLDB_DOCKER_PORT}
volumes:
- ./docker-data/mysql:/var/lib/mysql
networks:
- springboot-mysql-net
redis-docker:
image: redis:alpine
command: redis-server --port ${REDIS_LOCAL_PORT}
container_name: "docker-redis"
volumes:
- ./docker-data/redis:/data
labels:
- "name=redis"
- "mode=standalone"
ports:
- ${REDIS_LOCAL_PORT}:${REDIS_DOCKER_PORT}
application:
container_name: naem_application
build:
context: ./
dockerfile: Dockerfile
env_file: ./.env
ports:
- ${SPRING_LOCAL_PORT}:${SPRING_DOCKER_PORT}
environment:
SPRING_APPLICATION_JSON: '{
"spring.datasource.url" : "jdbc:mysql://localhost:$MYSQLDB_DOCKER_PORT/$MYSQLDB_DATABASE?serverTimezone=UTC&characterEncoding=UTF-8",
"spring.datasource.username" : "$MYSQLDB_USER",
"spring.datasource.password" : "$MYSQLDB_ROOT_PASSWORD",
"spring.jpa.properties.hibernate.dialect" : "org.hibernate.dialect.MySQL8Dialect",
"spring.jpa.hibernate.ddl-auto" : "create"
}'
depends_on:
- db-mysql
networks:
- springboot-mysql-net
networks:
springboot-mysql-net:
driver: bridge
.env
REDIS_LOCAL_PORT=6379
REDIS_DOCKER_PORT=6379
3. redis-cli 사용
우선, docker-compose up -d
을 실행해준다.
그리고, 컨테이너에 접속하여 redis 커맨드 라인 명령어 도구인 redis-cli
를 이용해보자.
>> docker exec -it [컨테이너명] redis-cli
127.0.0.1:6379> PING
PONG
127.0.0.1:6379> keys *
(empty array)
127.0.0.1:6379> SET abc 123
OK
127.0.0.1:6379> GET abc
"123"
127.0.0.1:6379>
예시: docker exec -it docker-redis redis-cli
(종료는 docker-compose stop
으로 하고, 삭제까지 하고 싶으면 docker-compose down
을 하면 된다.)
4. application.yml
설정
spring:
cache:
type: redis
redis:
cache-null-values: true
5. RedisConfig.java
작성
@Configuration
public class RedisConfig {
@Autowired
private SecretYamlRead secretYamlRead;
String host = secretYamlRead.getHost();
int port = Integer.parseInt(secretYamlRead.getPort());
@Bean
public RedisConnectionFactory redisConnectionFactory() {
return new LettuceConnectionFactory(host, port);
}
@Bean
public RedisTemplate<?, ?> redisTemplate() {
RedisTemplate<?, ?> redisTemplate = new RedisTemplate<>();
redisTemplate.setConnectionFactory(redisConnectionFactory());
return redisTemplate;
}
}
나는 application.yml
과 별도로 secret.yml
파일에 따로 환경변수 정보를 작성했기 때문에,
secretYamlRead
을 통해 환경변수 값을 가져온다.
이 내용에 대해서는 이 글을 참고하자.
Ref.
- https://basketdeveloper.tistory.com/85 - 도커컴포즈로 redis 띄우기
💛 개인 공부 기록용 블로그입니다. 👻