지난번 포스팅에선 Django와 관계형 DB인 Postgres까지 Dockerizing 하는 과정을 다루어 보았다.
이 두가지의 기술만으로도 웹페이지를 만들 수는 있지만, 서비스를 만들다 보면 다양한 요구사항에 맞추어 다양한 기술들의 필요성을 느끼게 된다.
주로 caching을 활용하기 위해서 키 값 형식의 데이터베이스를 이용하게 되는데 바로 Redis가 이에 해당한다.
따라서 이번 포스팅에서는 키 값 형식의 데이터베이스인 Redis를 덧붙여 사용하는 방법을 적어보려고 한다.
docker-compose.yml 설정 파일을 보면서 진행해보자.
Docker-compose.yml 추가
# yml 파일 포맷의 version 설정
version: "3"
# docker-compose 볼륨 정의 (이 볼륨은 도커가 관리함)
volumes:
postgres_db_dev: {}
# 띄울 컨테이너 목록
services:
# Database container, 추후에 설명
postgres:
container_name : postgres_service
# dockerhub의 postgres9.5 이미지 사용
image: postgres:9.5
# postgres_db_dev를 컨테이너 ~/data에 마운트
volumes:
- postgres_db_dev:/var/lib/postgresql/data
# postgres 환경 변수
environment:
- POSTGRES_DB=leffedb
- POSTGRES_USER=leffe
- POSTGRES_PASSWORD=leffe
- POSTGRES_INITDB_ARGS=--encoding=UTF-8\
# Django container
django:
# 컨테이너 명
container_name : django_service
# docker build 옵션
build:
# docker build 명령어를 실행할 디렉토리 경로
context: .
# 지정할 Dockerfile 경로
dockerfile: ./Dockerfile
# 환경 변수 설정
environment:
- POSTGRES_DB=leffedb
- POSTGRES_USER=leffe
- POSTGRES_PASSWORD=leffe
- POSTGRES_HOST=postgres
- POSTGRES_PORT=5432
# 현재 디렉토리를 컨테이너 내의 /home/에 mount
volumes:
- ./:/home/
# 작업 폴더 지정
working_dir : /home/
# 실행할 명령어
command: >
bash -c "
chmod +x /wait-for-it.sh
&& /wait-for-it.sh postgres:5432 -t 10
&& python3 manage.py migrate
&& python3 manage.py runserver"
# 호스트 OS와 컨테이너의 포트를 바인딩
ports:
- "8000:8000"
# 호스트 OS에 포트를 공개하지 않고 컨테이너만 포트를 공개 (현재는 주석)
#expose :
# - "8000"
# 컨테이너를 실행하는 종속성을 정의
depends_on:
- redis
# Redis
redis:
container_name: redis_service
image: redis
ports:
- "6379:6379"
기존에 존재하던 파일에 redis_service 라는 컨테이너 이름을가진 redis 서비스를 추가하였다. 이미지로는 docker-hub에 존재하는 redis 이미지를 사용하였고,
port 역시 기본 포트인 6379번을 이용하였다. 또한, 장고에서 Redis를 사용하기 위한 환경변수 역시 같이 설정해주었다.
이전에 써본적이 없는 depends_on 이라는 옵션도 추가 되었다. depends_on 옵션은 서비스 간의 종속성 순서대로 서비스를 시작할 수 있게 해준다. 즉 django 컨테이너를 실행하기 전 redis 컨테이너를 먼저 생성하고 실행하라는 의미이다. (서비스 이름으로 접근 가능)
settings.py 수정
CACHES = {
"default": {
"BACKEND": "django_redis.cache.RedisCache",
"LOCATION": "redis://redis_service:6379/1", # docker-compose.yml에 명시한 컨테이너명
"OPTIONS": {
"CLIENT_CLASS": "django_redis.client.DefaultClient",
}
}
}
Redis를 Django의 Cache로 활용하기 위해 settings.py를 위와 같이 수정한다.
특히 Location 부분에서는 docker-compose.yml에 명시한 서비스 명과 포트를 통해 Redis에 접근할 수 있게 해준다.
해당 과정까지 수정한 후 $ docker-compose up -d --build 명령어를 통해 빌드를 재 진행한다. $ docker-compose ps 명령어를 이용해 띄워진 3개의 컨테이너(django, postgres, redis)를 확인할 수 있다.
다음 포스팅에서는 AMQP를 활용하는 RabbitMQ를 붙이는 과정에 대해서 알아볼 것이다.
공부하면서 정리한 내용이니 틀린 부분이 있을 수 있습니다. 댓글로 남겨주시면 감사하겠습니다.
'SW개발 > Django' 카테고리의 다른 글
[Django]Docker-compose로 Django 환경 구축하기 5 - Nginx (0) | 2021.06.09 |
---|---|
[Django]Docker-compose로 Django 환경 구축하기 4 - RabbitMQ (2) | 2021.06.06 |
[Django]Docker-compose로 Django 환경 구축하기 2 - Postgres (0) | 2021.05.31 |
[Django]Docker-compose로 Django 환경 구축하기 1 - Django (0) | 2021.05.27 |
[Django]추천하는 모듈 import 순서 (0) | 2021.05.07 |