Dockerfile, Docker Image, 그리고 Docker Compose

찬민·2024년 9월 27일
0

TIL

목록 보기
60/62

1. Dockerfile이란?

Dockerfile은 Docker 이미지를 빌드하기 위한 스크립트 파일이다. 이 파일에 작성된 명령어에 따라 이미지가 만들어지며, 이후 컨테이너가 해당 이미지를 기반으로 실행된다. Dockerfile은 애플리케이션의 환경 설정과 설치 과정을 자동화해 준다.

Django용 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번 포트에서 실행.

2. Docker Image란?

Docker Image는 애플리케이션을 실행하는 데 필요한 모든 것이 포함된 패키지이다. Dockerfile을 기반으로 이미지가 빌드되며, 이미지에서 컨테이너를 생성하여 실행할 수 있다. 이 이미지는 불변성이 특징이며, 한 번 빌드한 이미지는 어디서든 동일하게 동작한다.

Docker Image의 특징:

  • 캐시 레이어: 이미지 빌드 시 각 명령어는 레이어로 분리되며, 변경 사항이 없는 레이어는 재사용된다.
  • 레지스트리: 빌드된 이미지는 Docker Hub나 개인 레지스트리에 푸시하여 공유하거나 배포할 수 있다.

3. Docker Compose란?

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: 각 컨테이너의 로그를 확인.

0개의 댓글