Dockerfile은 Docker 이미지를 빌드하기 위한 스크립트 파일이다. 이 파일에 작성된 명령어에 따라 이미지가 만들어지며, 이후 컨테이너가 해당 이미지를 기반으로 실행된다. Dockerfile은 애플리케이션의 환경 설정과 설치 과정을 자동화해 준다.
# 베이스 이미지로 Python 3.9 사용
FROM python:3.9-slim
# 작업 디렉토리 설정
WORKDIR /app
# 시스템 패키지 업데이트 및 필수 라이브러리 설치
RUN apt-get update && apt-get install -y \
gcc \
libmariadb-dev
# 필요한 Python 패키지 설치
COPY requirements.txt /app/
RUN pip install --no-cache-dir -r requirements.txt
# 애플리케이션 파일 복사
COPY . /app/
# Django 서버 실행 명령어
CMD ["python", "manage.py", "runserver", "0.0.0.0:8000"]
FROM python:3.9-slim: Python 3.9을 베이스로 하는 가벼운 이미지 사용.WORKDIR /app: /app 폴더에서 작업을 수행하도록 설정.RUN apt-get update && apt-get install -y gcc libmariadb-dev: MySQL과의 연동을 위해 필요한 패키지를 설치.COPY requirements.txt: 필요한 Python 패키지 목록을 복사하고 설치.CMD ["python", "manage.py", "runserver", "0.0.0.0:8000"]: Django 개발 서버를 8000번 포트에서 실행.Docker Image는 애플리케이션을 실행하는 데 필요한 모든 것이 포함된 패키지이다. Dockerfile을 기반으로 이미지가 빌드되며, 이미지에서 컨테이너를 생성하여 실행할 수 있다. 이 이미지는 불변성이 특징이며, 한 번 빌드한 이미지는 어디서든 동일하게 동작한다.
Docker Compose는 여러 컨테이너로 이루어진 애플리케이션을 정의하고 관리할 수 있는 도구이다. docker-compose.yml 파일에 서비스 간의 관계를 정의하고, 이 파일 하나로 모든 서비스를 실행할 수 있다. Django와 MySQL 같은 복잡한 애플리케이션을 구성할 때 특히 유용하다.
docker-compose.yml 파일 예시 (Django + MySQL):version: '3'
services:
web:
build: .
command: python manage.py runserver 0.0.0.0:8000
volumes:
- .:/app
ports:
- "8000:8000"
depends_on:
- db
db:
image: mysql:8.0
environment:
MYSQL_ROOT_PASSWORD: root_password
MYSQL_DATABASE: mydatabase
MYSQL_USER: user
MYSQL_PASSWORD: user_password
ports:
- "3306:3306"
volumes:
- mysql_data:/var/lib/mysql
volumes:
mysql_data:
이 파일은 Django 애플리케이션과 MySQL 데이터베이스를 설정하는 방법을 보여준다.
web 서비스:
build: .: 현재 디렉토리에 있는 Dockerfile을 사용해 이미지를 빌드.command: Django 서버를 실행하는 명령어.volumes: 호스트의 파일을 컨테이너와 공유.ports: 로컬 호스트의 8000번 포트를 컨테이너의 8000번 포트에 연결.depends_on: db 서비스가 준비될 때까지 기다린 후 실행.db 서비스:
image: mysql:8.0: MySQL 8.0 이미지를 사용.environment: 데이터베이스 설정 값들 (루트 비밀번호, 데이터베이스 이름, 사용자 이름, 사용자 비밀번호)을 환경 변수로 설정.ports: MySQL의 기본 포트인 3306번을 호스트와 연결.volumes: 데이터 지속성을 위해 MySQL 데이터를 호스트의 디렉토리와 공유.docker-compose up: 모든 서비스를 동시에 시작.docker-compose down: 모든 컨테이너와 네트워크를 중지하고 제거.docker-compose logs: 각 컨테이너의 로그를 확인.