Server/Container 기술
docker-compose란?
건담아빠
2024. 12. 9. 17:08

오랜만에 docker-compose로 환경을 구성하면서 정리해 두려고 한다.
주요기능
1. 멀티 컨테이너 애플리케이션 관리
- 여러 개의 Docker 컨테이너를 하나의 구성 파일로 정의하고 실행 가능하다.
- 웹 애플리케이션, 데이터베이스, 캐시서버 등 단일 명령으로 실행 가능하다.
2. 의존성 관리
- 컨테이너 간의 의존성을 정의하고 자동으로 순서를 조정할 수 있다.
- 예: 데이터베이스 컨테이너가 준비될 때까지 웹 컨테이너 대기한다.
3. 간편한 실행
- 단일 명령으로 모든 컨테이너를 시작, 중지, 재시작 가능하다.
4. 환경 파일 지원
- .env 파일을 사용하여 환경 변수를 정의하고 재사용이 가능하다.
5. 네트워크와 볼륨 관리
- 네트워크 : 컨테이너 간 통신을 위한 네트워크를 자동 생성 및 관리 할 수 있다.
- 볼륨 : 컨테이너의 데이터를 호스트에 영구적으로 저장이 가능하다.
docker-compose.yml 파일 예제
version: '3.9'
services:
web:
image: nginx:latest
ports:
- "8080:80"
volumes:
- ./nginx:/usr/share/nginx/html
networks:
- app-network
app:
build:
context: ./app
ports:
- "3000:3000"
networks:
- app-network
depends_on:
- db
db:
image: postgres:13
environment:
POSTGRES_USER: user
POSTGRES_PASSWORD: password
volumes:
- db-data:/var/lib/postgresql/data
networks:
- app-network
volumes:
db-data:
networks:
app-network:
주요 요소 설명
1. services
- 실행할 컨테이너를 정의할 수 있다.
2. networks
- 컨테이너 간 통신을 위한 네트워크를 정의할 수 있다.
3. volumes
- 데이터 영속성을 위해 호스트와 컨테이너 간의 디렉토리를 공유 할 수 있다.
4. depends_on
- 컨테이너의 실행 순서를 정의할 수 있다.
- 예: app는 db가 실행된 후 실행되어야 한다.
docker-compose 주요 명령어
1. 컨테이너 시작
$ docker-compose up
2. 컨테이너 백그라운드 실행
$ docker-compose up -d
3. 컨테이너 중지
$ docker-compose down
4. 로그 확인
$ docker-compose logs
5. 컨테이너 재시작
$ docker-compose restart
6. 기타
$ docker-compose up --build
$ docker-compose -f docker-compose.local.yml up -d --build
Docker Compose의 장점
- 간결한 관리 : YAML 파일로 복잡한 설정을 간단히 정리 가능하다.
- 이식성 : 다른 개바자와 환경을 쉽게 공유 가능하다.
- 의존성 해결 : 서비스 간의 의존성을 자동으로 처리 가능하다.
- 유지보수 용이 : 설정 변경과 업데이트가 쉽고 명확하다.
GTP등 여러 리서치 결과물들을 가지고 다시한번 머릿속에 정리하는 시간을 가져 보았다.