3

Why: Docker가 해결하는 3가지 문제

Docker 배포 & 테스트

학습 목표
  • Docker가 해결하는 핵심 문제 3가지를 설명할 수 있다
  • Docker 이미지와 컨테이너의 차이를 안다
  • Docker Compose의 역할을 이해한다

Docker가 해결하는 3가지 문제

문제 1: 환경 차이

개발자 A: Python 3.11, macOS, arm64
개발자 B: Python 3.10, Windows, x86_64
서버: Python 3.9, Ubuntu, x86_64

같은 코드인데 다르게 동작한다!

Docker 해결: 모든 환경에서 동일한 컨테이너 실행

문제 2: 파이썬 밖의 의존성

ChromaDB는 SQLite 3.35 이상을 요구한다.
그런데 배포판에 딸려 온 SQLite는 3.31이다.

pip로는 SQLite를 바꿀 수 없다. 가상환경으로도 안 된다.
Neo4j 서버 자체도, 시스템 라이브러리도 마찬가지다.

Docker 해결: 파이썬 패키지가 아닌 것까지 이미지 안에 함께 고정

파이썬 패키지 버전이 프로젝트마다 다른 문제는 가상환경으로 풀린다 (D1 pitfall 이 그 해결책으로 venv 를 권했다). Docker 의 고유한 값은 파이썬 밖에 있다.

문제 3: 설치 복잡도

우리 시스템에 필요한 것:
- Python 3.11+
- OpenAI API 키
- ChromaDB (+ SQLite 3.35+)
- Neo4j 5.x
- Streamlit

설치 가이드: 3페이지...

Docker 해결: docker compose up (1줄)

핵심 개념

이미지 vs 컨테이너

이미지 (Image) = 설계도
  - Dockerfile로 정의
  - 빌드 시점에 생성
  - 읽기 전용
  - 예: ubuntu:22.04, python:3.12-slim

컨테이너 (Container) = 실행 중인 인스턴스
  - 이미지를 기반으로 생성
  - 실행 시점에 생성
  - 읽기/쓰기 가능
  - 예: my-app-1, my-neo4j-1
비유:
  이미지 = 쿠키 틀
  컨테이너 = 구워진 쿠키

  하나의 틀(이미지)로 여러 쿠키(컨테이너)를 만들 수 있다.

Docker Compose

단일 컨테이너:
  docker run my-app          # 앱만 실행
  docker run neo4j           # Neo4j 따로 실행

Docker Compose:
  docker compose up          # 앱 + Neo4j 한번에 실행!

docker-compose.yml:
  services:
    app: ...      # Streamlit 앱
    neo4j: ...    # Neo4j 데이터베이스

Docker Compose = 여러 컨테이너를 한번에 관리하는 도구

AI로 학습하기 — 꿀팁
Docker 이미지·컨테이너 구분 검증AI 학습 팁

Docker 이미지와 컨테이너의 차이에 대한 설명이 정확한지, 흔한 오해가 포함되지 않았는지 검증하세요.

Docker 학습 자료에서 '이미지는 실행 가능한 패키지이고 컨테이너는 이미지의 실행 인스턴스'라고 설명한다. 이 정의가 정확한지, 그리고 'docker run을 두 번 실행하면 같은 이미지로 두 컨테이너가 독립적으로 실행된다'는 주장이 맞는지 검증해줘. 틀린 부분이 있으면 교정해줘.
이 팁이 도움이 됐나요?
용어