코딩공부/Server

docker-compose.yml 작성을 위한 구성 옵션 정리

Dong_Devlog 2022. 11. 21. 18:28

docker-compose.yml 작성을 위한 구성 옵션 정리

 

docker-compose.yml
version: '3.8'

services:
  postgres:
    container_name: postgres
    image: postgres:14.5
    volumes:
      - postgres:/var/lib/postgresql/data/
    environment:
      - POSTGRES_USER=user
      - POSTGRES_PASSWORD=P@ssw0rd
      - POSTGRES_DB=django
    restart: always

  backend:
    container_name: backend
    build: ./backend/
    entrypoint: sh -c "python manage.py collectstatic --no-input && python manage.py migrate && gunicorn drf_project.wsgi --workers=5 -b 0.0.0.0:8000"
    volumes:
      - ./backend/django/:/app/
      - /etc/localtime:/etc/localtime:ro
      - django_media:/app/media/
      - django_static:/app/static/
    environment:
      - DEBUG=1
      - POSTGRES_DB=django
      - POSTGRES_USER=user
      - POSTGRES_PASSWORD=P@ssw0rd
      - POSTGRES_HOST=postgres
      - POSTGRES_PORT=5432
    depends_on:
      - postgres
    restart: always

  nginx:
    container_name : nginx
    image: nginx:1.23.2
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - ./nginx/default.conf:/etc/nginx/conf.d/default.conf
      - django_media:/media/
      - django_static:/static/
    depends_on:
      - backend
    restart: always

 

디렉토리 구조
path : /home/ubuntu/
├── backend
│   ├── Dockerfile
│   └── django	# project directory
├── docker-compose.yml
└── nginx
    └── default.conf

 

구성 옵션 정리
  • version : docker-compose 문서에 대한 버전을 지정한다. 버전에 따라 기능과 옵션이 다를 수 있다.
  • services : 컨테이너를 실행하기 위해 정의 한다. 컨테이너는 곧 서비스라는 개념으로 접근
  • build : Dockerfile 빌드를 위한 Dockerfile이 있는 경로를 지정
  • container_name : 컨테이너의 이름을 지정한다.
  • image : 컨테이너에 사용 될 이미지명, 태그가 없으면 latest가 자동으로 붙는다.
  • volumes : 호스트의 dir와 컨테이너의 dir를 연결(mount) 해준다.
  • environment : 컨테이너 내부의 환경 변수를 설정한다.
  • restart : restart 옵션(no:수동으로 재시작, always:컨테이너를 끄기전까지 항상 재시작, on-failure:오류가 있을 시에 재시작)
  • depends_on : 컨테이너의 실행 순서 설정
  • ports : 호스트와 컨테이너 포트를 설정, 각 서비스의 포트를 정의한다.