jun-wiki

View My GitHub Profile

Posts (Latest 10 updated) :
Read all
Contents:
  1. 도커
    1. 간단 핵심 개념
      1. TL;DR
    2. 최소 템플릿
      1. 디렉터리 구조
      2. .dockerignore (필수)
    3. 도커 기본 패툰
      1. 자주 쓰는 추가 옵션
    4. 커맨드 치트시트

도커

도커란 무엇이냐?

애플리케이션을 컨테이너로 묶어 어떤 환경에서든 동일하게 실행가능하도록 해주는 오픈 소스 프로젝트다

꽤나 유용해보여서 정리해 본다

간단 핵심 개념

  • 이미지(Image): 앱 실행에 필요한 OS·런타임·라이브러리·소스가 겹겹이 쌓인 “스냅샷”

  • 컨테이너(Container): 이미지를 실제로 띄운 실행 인스턴스(프로세스). 여러 개 가능

  • 레지스트리(Registry): 이미지를 저장/공유하는 창고(예: Docker Hub, GHCR)

TL;DR

  • Dockerfile에 환경 만드는 레시피 적는다

  • docker build이미지 만든다

  • docker run으로 컨테이너 실행한다


최소 템플릿

디렉터리 구조

myapp/
 ├─ Dockerfile
 ├─ .dockerignore
 ├─ app/           # 소스코드
 └─ requirements.txt or package.json ...


.dockerignore (필수)

빌드 속도↑, 이미지 용량↓, 시크릿 유출 방지

.git
__pycache__/
node_modules/
*.log
.env
.env.*

Dockerfile로 이미지 빌드할 때 제외할 파일 명시하는 역할이다


도커 기본 패툰

# 1) 베이스 이미지 선택
FROM python:3.12-slim

# 2) 시스템 패키지 (필요할 때만)
RUN apt-get update && apt-get install -y --no-install-recommends \
    curl build-essential \
 && rm -rf /var/lib/apt/lists/*

# 3) 작업 디렉터리
WORKDIR /app

# 4) 의존성 캐시 최적화: 스펙 파일만 먼저 복사
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt

# 5) 애플리케이션 복사
COPY app ./app

# 6) 컨테이너 런타임 계정 (루트 지양)
RUN useradd -m appuser
USER appuser

# 7) 포트/환경변수/헬스체크/엔트리포인트
EXPOSE 8000
ENV PYTHONDONTWRITEBYTECODE=1 PYTHONUNBUFFERED=1

# 8) 실제 프로세스 실행
CMD ["python", "-m", "app"]

자주 쓰는 추가 옵션

# HEALTHCHECK: 컨테이너 상태 감시
HEALTHCHECK --interval=30s --timeout=3s --retries=3 \
  CMD curl -f http://localhost:8000/health || exit 1

# 멀티스테이지 빌드(빌드용 → 실행용)
# 빌드 이미지
FROM node:20 AS build
WORKDIR /src
COPY package*.json ./
RUN npm ci
COPY . .
RUN npm run build

# 실행 이미지
FROM nginx:alpine
COPY --from=build /src/dist /usr/share/nginx/html

커맨드 치트시트

# 이미지 빌드
docker build -t myapp:dev .

# 컨테이너 실행/중지/삭제
docker run -p 5173:5173 myapp:dev
docker ps
docker stop <id>
docker rm <id>

# Compose
docker compose up -d --build           # 빌드 + 백그라운드 실행
docker compose down                    # 컨테이너/네트워크 삭제(볼륨은 유지)
docker compose down -v                 # 볼륨까지 삭제(데이터 초기화)
docker compose restart frontend        # 특정 서비스 재시작
docker compose logs -f frontend        # 로그 계속 보기
docker compose exec backend sh         # 컨테이너 쉘 들어가기

# 볼륨/네트워크
docker volume ls
docker volume rm <name>

# 이미지/레이어 캐시 이슈 있을 때
docker compose build --no-cache frontend