1. 개요
다음은 이전 포스팅에서 사용한 docker에 postgres를 띄우기 위한 명령어이다.
docker run -p 5432:5432 --network doc-net --name test-postgres -e POSTGRES_PASSWORD=root -d postgres:latest
바로 문제가 보인다. 너무 길다. 만약 프로젝트가 더 복잡해지고, 더 많은 컨테이너가 필요하다면 이런 명령어를 모두 쳐야 한다. 이를 개선하기 위해 docker compose를 사용해보자.
2. docker-compose.yml
services:
test-postgres:
image: postgres:17
restart: always
ports:
- "5432:5432"
volumes:
- ./postgres-data:/var/lib/postgresql/data
environment:
POSTGRES_USER: postgres
POSTGRES_PASSWORD: postgres
POSTGRES_DB: gugumo
networks:
- doc-net
test-redis:
image: redis
restart: always
ports:
- "6379:6379"
networks:
- doc-net
volumes:
- ./redis-data:/data
backend:
container_name: backend
image: theperz/gugumo-test
ports:
- "8080:8080"
depends_on:
- test-postgres
- test-redis
networks:
- doc-net
networks:
doc-net:
driver: bridge
gugumo 프로젝트 배포에 사용한 docker compose 전문이다. 하나씩 살펴보자.
networks:
doc-net:
driver: bridge
우선 doc-net 라는 이름의 네트워크를 만든다.
backend:
container_name: backend
image: theperz/gugumo-test
ports:
- "8080:8080"
depends_on:
- test-postgres
- test-redis
networks:
- doc-net
application 관련 정보이다. doc-net 위에 올라가며, 이전에 만들었던 theperz/gugumo-test라는 이름의 이미지를 사용, depends_on을 사용하여 해당 컨테이너 이전에 올릴 컨테이너를 정한다.
test-redis:
image: redis
restart: always
ports:
- "6379:6379"
networks:
- doc-net
volumes:
- ./redis-data:/data
redis 관련 정보이다. 사용하는 컨테이너 간 데이터를 공유해야 하므로 volumes를 설정해준다.
test-postgres:
image: postgres:17
restart: always
ports:
- "5432:5432"
volumes:
- ./postgres-data:/var/lib/postgresql/data
environment:
POSTGRES_USER: postgres
POSTGRES_PASSWORD: postgres
POSTGRES_DB: gugumo
networks:
- doc-net
postgres 관련 정보이다. volume, 환경 변수를 지정해주고, 마찬가지로 doc-net에 연결해준다.
해당 파일을 놓고 docker compose up -d --build를 입력하면 해당 컨테이너들을 실행시킬 수 있다.
잘 실행되는 것을 확인할 수 있다.
'Docker' 카테고리의 다른 글
Trouble Shooting: 배포 시 env 관리하기 (0) | 2024.12.30 |
---|---|
Docker CI/CD 진행하기 (1) | 2024.12.28 |
Hello Docker! : 프로젝트 EC2에 배포해보기 (2) | 2024.11.02 |