3분
Why: Docker가 해결하는 3가지 문제
Docker 배포 & 테스트
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을 두 번 실행하면 같은 이미지로 두 컨테이너가 독립적으로 실행된다'는 주장이 맞는지 검증해줘. 틀린 부분이 있으면 교정해줘.
이 팁이 도움이 됐나요?