Docker: 컨테이너화 하기

Ohback·2025년 4월 11일

🚢 1. 도커(Docker)와 컨테이너(Container)란 무엇일까?


1-1. 배포 과정의 현실

개발자가 로컬(내 컴퓨터)에서 만든 프로그램은 잘 돌아가지만, 막상 서버에 올리면 이런 문제가 생긴다:

  • 환경 차이: 내 컴퓨터에는 Python 3.10이 설치되어 있는데 서버는 3.8 → 코드가 안 돌아감
  • 라이브러리 충돌: 로컬에는 pandas 2.x 버전, 서버는 pandas 1.x 버전
  • 설정 누락: DB 연결 설정, 환경 변수, 의존 패키지 설치 등 서버에서 직접 하나하나 맞추기 힘듦

즉, 개발자들 사이에서 흔히 말하는 “내 컴퓨터에선 잘 됐는데요?” 현상이 생김.


1-2. 컨테이너(Container)라는 개념

위에서 언급한 문제를 해결하기 위해 나온 게 컨테이너(Container)라는 개념이다. 컨테이너는 쉽게 말하면 “내 프로그램과 그 프로그램이 돌아가는 환경을 통째로 박스에 담는 것”이다.

  • 내 코드 + Python 버전 + 필요한 라이브러리 + 설정 파일
    → 전부 묶어서 하나의 컨테이너 안에 담아버림.

그러면 이 컨테이너만 서버에 올리면, 환경 걱정 없이 똑같이 실행된다.
즉, 개발 환경과 운영 환경의 차이를 없애주는 기술이 컨테이너화(Containerization)이다!


1-3. 도커(Docker)란?

여기서 컨테이너를 만들고 관리할 수 있는 가장 대표적인 도구가 바로 도커(Docker)이며, “개발자가 만든 프로그램을 어디서든 똑같이 실행할 수 있도록 해주는 컨테이너 기술의 표준 도구”이다.

  • 이미지(Image): 컨테이너를 만들기 위한 설계도. “이 코드 실행하려면 Python 3.10, pandas 2.0 설치해줘” 같은 지침서.
  • 컨테이너(Container): 이미지를 실제로 실행한 결과물. 박스를 열면 내 프로그램이 그 안에서 실행됨.
  • Docker Hub: GitHub처럼, 도커 이미지를 올리고 내려받을 수 있는 저장소.

개발자는 Dockerfile이라는 설계도를 작성해서 이미지를 만들고, 서버에서는 그 이미지를 실행만 하면 된다.

- Dockerfile

# 1) Python 기반 이미지 사용 (슬림 버전으로 가볍게)
FROM python:3.10-slim

# 2) 컨테이너 안 작업 디렉토리 설정
WORKDIR /app

# 3) 필요 패키지 설치를 위해 시스템 의존성 추가
RUN apt-get update && apt-get install -y \
    libpq-dev gcc \
    && rm -rf /var/lib/apt/lists/*

# 4) requirements.txt 복사 및 설치
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt

# 5) 소스 코드 복사
COPY . .

# 6) 장고에서 사용하는 포트 (Gunicorn/Runserver)
EXPOSE 8000

# 7) Gunicorn으로 앱 실행 (WSGI 방식 권장)
CMD ["gunicorn", "--bind", "0.0.0.0:8000", "myproject.wsgi:application"]

- requirements.txt

Django==4.2
gunicorn==21.2.0
psycopg2-binary==2.9.9  # PostgreSQL을 쓴다면 필요

- 실행 방법

1) 이미지 빌드: docker build -t django-app .

2) 컨테이너 실행: docker run -p 8000:8000 django-app

3) 브라우저에서 확인: http://localhost:8000


1-4. 도커(Docker)의 특징

  • 일관성: 내 PC에서 되면 서버에서도 그대로 동작
  • 이식성: 어디서든 실행 가능 (AWS, GCP, Azure, 심지어 내 노트북에서도)
  • 경량화: 기존 가상머신보다 훨씬 가볍고 빠름
  • 자동화: CI/CD 파이프라인과 결합해 배포 자동화 가능


2. VM vs Container, 어떻게 다를까?

출처: https://akfpartners.com

VM (Virtual Machine, 가상머신)은 물리 서버 위에 하이퍼바이저(Hypervisor)를 이용해 완전한 운영체제를 가상으로 실행하는 기술로 다음과 같은 특징이 있음:

  • OS 전체를 포함 → 무겁고 부팅 시간이 김
  • 각 VM은 CPU, 메모리, 디스크를 독립적으로 할당
  • 서버를 여러 개로 나누어 쓰는 느낌

장점은 완벽한 격리, 다양한 OS 실행 가능(리눅스 위에 윈도우도 가능)하고,
무겁고 느림, 리소스 낭비 발생이라는 단점이 있다.

즉, 가상머신(VM)과 컨테이너(Container)는 애플리케이션 실행 환경을 분리한다는 점에서는 비슷하지만, 동작 방식과 효율성이 크게 다르다.

2-1. 차이 한눈에 보기

구분VMContainer
OS 포함 여부전체 OS 포함앱 실행 환경만 포함
부팅 속도느림(분 단위)빠름(초 단위)
무게무거움가벼움
격리 수준높음비교적 낮음
대표 기술VirtualBox, VMwareDocker, Kubernetes

핵심 차이점: VM은 “OS 단위로 가상화”, 컨테이너는 “앱 실행 환경만 가상화”

2-2. 비유

  • VM = 아예 집 한 채를 새로 짓고 사는 것 (모든 설비 갖춤)
  • Container = 아파트에서 방 하나 빌려서 쓰는 것 (기본 설비 공유)

profile
기록은 기억을 지배한다.

0개의 댓글