Docker Compose는 Docker 애플리케이션을 정의하고 실행하기 위한 도구이다.
Docker Compose를 이용하면 여러 개의 컨테이너를 정의하고 구성할 수 있으며, 이를 단일 파일로 정의할 수 있다.
이렇게 정의된 파일을 실행하면, Docker Compose는 컨테이너들을 자동으로 실행하고, 이들 간의 네트워크를 구성한다.
Docker Compose를 이용하면, 개발 환경을 쉽게 구축할 수 있다.
예를 들어, Django 애플리케이션을 실행하는 데에 필요한 데이터베이스, 웹 서버, 캐시 서버 등을 하나의 Docker Compose 파일로 정의할 수 있다.
이렇게 하면, 로컬 개발 환경에서 모든 컨테이너를 실행할 수 있으며, 배포를 위한 이미지도 동일한 설정으로 빌드할 수 있다.
Docker Compose를 이용하면, 여러 컨테이너를 실행하고 구성하는 과정을 간소화할 수 있다.
이를 통해 개발자는 애플리케이션 개발에만 집중할 수 있으며, 인프라 구성 등의 작업에 시간을 낭비하지 않을 수 있다.
services:
db:
image: mysql:8.0.32-debian
command: --init-file /init/db.sql
volumes:
- ./data:/var/lib/mysql
- ./init:/init
restart: always
environment:
MYSQL_ROOT_PASSWORD: qwer1234
ports:
- 3306:3306
backend:
build:
context: .
dockerfile: Dockerfile
command: sh -c "sleep 5 && python manage.py migrate && gunicorn config.wsgi --bind 0.0.0.0:8000"
ports:
- 8000:8000
depends_on:
db:
condition: service_started
DROP DATABASE IF EXISTS `web`;
CREATE DATABASE IF NOT EXISTS `web`;
이것이 db.sql 파일임. 데이터베이스를 생성해주는 것인데, 없을 때 따로 생성하라는 쿼리문
volumes는 앞선 게시글에서 컨테이너는 메모리 휘발성이기 때문에 host pc에 저장을 해줘야 한다. mount 개념.
context는 경로
dockerfile은 dockerfile 파일 이름
전 게시글에서 Dockerfile에서 migrate를 하고, 서버를 돌렸는데, 그렇게 되면 db와 연결하는데 오류가 생김. 그리고, sh -c를 준 이유는 command에서 &&를 잘 못읽는거 같아서 그냥 shell로 특정 명령어 문장을 다 던져버림.
depends_on은 먼저 무엇이 만들어지고 실행될 수 있게 하는 것
FROM python:3.9
ENV PYTHONUNBUFFERED 1
WORKDIR /app
COPY requirements.txt /app/requirements.txt
COPY . /app
RUN pip install -r requirements.txt