🐳 Docker 초보자용 학습 요약 노트 (티스토리용)
---
1. 도커 커리큘럼 🐳
우리는 총 4단계를 거쳐 도커의 기본기를 마스터합니다.
1. 기초 개념
- 이미지(설계도)와 컨테이너(실행체)의 차이, 격리 원리 이해.
2. 이미지 빌드
- Dockerfile을 작성하여 나만의 실행 환경을 만듦.
3. 멀티 컨테이너 관리
- Docker Compose를 이용해 여러 서비스를 한 번에 관리.
4. 데이터와 네트워크
- 볼륨(Volume)을 통해 데이터를 보존하고, 컨테이너 간 통신 구조 이해.
---
2. 핵심 개념 (Key Concepts) 💡
이미지(Image)
프로그램 실행에 필요한 모든 것을 담은 읽기 전용 스냅샷입니다.
- 예: `python:3.9-slim`, `nginx:alpine` 등은 이미지 이름입니다.
- 같은 이미지에서 여러 컨테이너를 만들 수 있습니다.
컨테이너(Container)
이미지를 실행한 상태로, 독립된 박스 안에서 프로세스가 돌아갑니다.
- 한 번에 여러 컨테이너를 띄워서 서로 다른 앱을 돌릴 수 있습니다.
- 컨테이너가 종료되면 그 안의 **변경사항은 기본적으로 사라집니다.**
불변성(Immutability)
- 이미지는 변하지 않습니다.
- 설정을 바꾸고 싶으면 `Dockerfile`로 새 이미지를 빌드합니다.
- 컨테이너는 이미지의 “실행 인스턴스”일 뿐, 이미지를 수정하는 것이 아닙니다.
볼륨(Volume)
컨테이너가 사라져도 데이터를 남기기 위한 외장 금고 역할을 합니다.
```yaml
volumes:
- dbdata:/var/lib/postgresql/data
- dbdata처럼 이름이 붙은 볼륨을 사용하면,
컨테이너를 삭제해도 데이터는 유지됩니다. - 개발용으로는 ./local:/app 같은 Bind Mount를 사용해 코드를 실시간 동기화합니다.
네트워크(Network)
컨테이너들이 서로 서비스 이름으로 통신할 수 있게 해주는 통로입니다.
services:
app:
depends_on:
- db
db:
image: postgres:14
- app에서 db로 접속할 때 localhost가 아니라 db라는 이름으로 접속합니다.
- Docker Compose는 자동으로 하나의 네트워크를 만들어서 서비스 이름 기반 라우팅을 지원합니다.
3. 주요 명령어 (Essential Commands) ⌨️
3.1 이미지 빌드 / 컨테이너 실행
분류명령어설명
| 빌드 | docker build -t [이름] . | 현재 폴더의 Dockerfile로 이미지 빌드 |
| 실행 (일반) | docker run [이름] | 해당 이미지로 컨테이너 실행 |
| 실행 (대화형) | docker run -it [이름] | 터미널에서 컨테이너 안으로 들어가 대화 |
예시:
bash
docker build -t my-python-app .
docker run -it my-python-app sh
3.2 컨테이너 상태 확인 / 관리
명령어설명
| docker ps -a | 모든 컨테이너(실행 중 포함) 상태 확인 |
| docker images | 저장된 이미지 목록 확인 |
| docker logs [ID/이름] | 컨테이너 내부 로그 확인 |
예시:
docker ps -a
docker logs my-app-container
3.3 Docker Compose 명령어
명령어설명
| docker-compose up | docker-compose.yml에 정의된 서비스를 모두 실행 |
| docker-compose down | 모든 서비스 중지 및 컨테이너 청소 |
예시:
docker-compose up
docker-compose down
4. 예제 파일 (Example Files) 📄
4.1 Dockerfile - 파이썬 앱 예제
# 1. 기초 재료 (OS + 파이썬)
FROM python:3.9-slim
# 2. 컨테이너 안 작업 디렉터리 설정
WORKDIR /app
# 3. 의존성 설치
COPY requirements.txt .
RUN pip install -r requirements.txt
# 4. 코드 복사
COPY main.py .
# 5. 포트 노출 (메타 정보)
EXPOSE 5000
# 6. 실행 명령어
CMD ["python", "main.py"]
main.py 예시:
from flask import Flask
app = Flask(__name__)
@app.route("/")
def home():
return "Hello from Docker!"
if __name__ == "__main__":
app.run(host="0.0.0.0", port=5000)
빌드 & 실행:
docker build -t my-flask-app .
docker run -p 8000:5000 my-flask-app
→ http://localhost:8000에서 접속 가능.
4.2 docker-compose.yml - 앱 + DB 세트 예제
version: '3.8'
services:
db:
image: postgres:14
environment:
POSTGRES_DB: mydb
POSTGRES_USER: myuser
POSTGRES_PASSWORD: mypass
volumes:
- dbdata:/var/lib/postgresql/data
ports:
- "5432:5432"
app:
build: .
ports:
- "8000:5000"
depends_on:
- db
environment:
- DB_HOST=db
- DB_NAME=mydb
- DB_USER=myuser
- DB_PASS=mypass
volumes:
dbdata:
- db는 PostgreSQL 데이터베이스.
- app은 앞에서 만든 파이썬 앱.
- app에서는 환경변수 DB_HOST=db로 db 컨테이너에 접속.
실행:
docker-compose up
4.3 개발용 - 코드 실시간 반영 예제
version: '3.8'
services:
app:
build: .
volumes:
- .:/app
ports:
- "5000:5000"
command: python /app/main.py
environment:
- FLASK_ENV=development
- . (로컬 폴더)를 컨테이너 /app에 마운트 → 코드 변경 시 바로 반영.
- FLASK_ENV=development로 개발 모드 설정.
5. 볼륨(Volume) 종류 정리 🧩
5.1 Bind Mount (로컬 폴더 연결)
volumes:
- .:/app
- 호스트의 현재 폴더를 컨테이너 안으로 그대로 연결.
- 개발용으로 코드 실시간 반영에 적합.
5.2 Named Volume (도커가 관리)
volumes:
dbdata:
services:
db:
volumes:
- dbdata:/var/lib/postgresql/data
- 데이터베이스 데이터 등 영구적인 저장에 사용.
- 컨테이너를 삭제해도 dbdata 볼륨은 유지됩니다.
5.3 tmpfs (메모리 전용)
services:
app:
volumes:
- type: tmpfs
target: /tmp/cache
- 디스크에 저장되지 않고 메모리만 사용.
- 세션 캐시, 일시적 데이터 저장에 적합.
6. 네트워크 개념 보충 🌐
- Docker Compose는 기본적으로 하나의 가상 네트워크를 만들어
app과 db가 같은 네트워크에 속하게 됩니다. - 같은 네트워크에 있으면, 서비스 이름으로 서로 접속 가능:
- app에서 db로 http://db:5432 또는 postgresql://db:5432/...처럼 접속.
포트 바인딩:
services:
app:
ports:
- "8000:5000"
- 8000 포트를 호스트에 노출 → localhost:8000로 접속 가능.
7. 초보자용 실습 흐름 추천 🚀
- 단일 컨테이너 실행
- docker run -it python:3.9-slim python → 컨테이너 안에서 직접 파이썬 실행 보기.
- Dockerfile 빌드 + 실행
- 위 Dockerfile과 main.py 예제로 이미지 빌드 후 실행.
- Docker Compose로 앱 + DB
- app + db 구조로 구성 후, 앱이 DB에 접속하는 흐름 연습.
- 볼륨 / 네트워크 확인
- dbdata 볼륨을 유지한 상태에서 컨테이너를 삭제 후 재구동 → 데이터가 남아있는지 확인.
'IT writer' 카테고리의 다른 글
| Kubernetes(K8s) 학습 요약 노트 (0) | 2026.02.24 |
|---|---|
| Docker 학습 요약 노트 (0) | 2026.02.24 |
| 업무 생산성과 창의성을 극대화할 수 있는 핵심 AI 프로그램들을 분야별로 정리 (0) | 2026.02.07 |
| 스마트 팩토리, DX, AX (0) | 2026.01.09 |
| 클라우드형 서비스 모델 (0) | 2025.12.11 |