Category Reference

Docker

컨테이너 개념, 이미지 빌드, 실행 흐름, 네트워크, Compose까지 Docker의 핵심 흐름을 카드형 레퍼런스로 정리합니다.

15 cards

제목, 요약, 태그, 섹션 제목 기준으로 찾습니다.

섹션

소개와 개념

3 cards

Docker소개와 개념

컨테이너와 Docker 개요

text
웹 앱을 실행하려면
- 로컬에는 Node 설치 필요
- DB는 PostgreSQL 설치 필요
- 팀원마다 버전이 다를 수 있음

Docker를 쓰면
- 앱 컨테이너
- DB 컨테이너
를 같은 설정으로 실행할 수 있음

컨테이너가 무엇이고 Docker가 무엇을 자동화하는지, 개발 환경 일관성과 배포 재현성 관점에서 정리하는 입문 카드입니다.

Docker소개와 개념

이미지와 컨테이너 차이

text
이미지 = 실행에 필요한 파일과 설정을 담은 청사진
컨테이너 = 이미지를 기반으로 실제 실행 중인 인스턴스

Docker 입문에서 가장 자주 헷갈리는 이미지와 컨테이너의 차이를 정적 청사진과 실행 인스턴스 관점에서 정리합니다.

Docker소개와 개념

client, daemon, objects

Docker CLI가 데몬과 통신해 이미지, 컨테이너, 네트워크, 볼륨 같은 객체를 관리하는 구조를 정리합니다.

기본 흐름

2 cards

Docker기본 흐름

docker run 기본

bash
docker run --name web -d -p 8080:80 nginx:alpine

이미지를 처음 실행할 때 가장 자주 쓰는 docker run 옵션을 중심으로 이름, 포트, 환경 변수, 삭제 흐름을 정리합니다.

Docker기본 흐름

컨테이너 생명주기와 기본 명령

bash
docker ps
docker ps -a
docker stop web
docker start web
docker rm web

컨테이너를 생성한 뒤 상태를 확인하고 시작, 중지, 삭제하는 기본 생명주기 명령을 정리합니다.

이미지와 빌드

3 cards

Docker이미지와 빌드

Dockerfile 기본

dockerfile
FROM node:22-alpine
WORKDIR /app
COPY package.json package-lock.json ./
RUN npm ci
COPY . .
CMD ["npm", "start"]

FROM, WORKDIR, COPY, RUN, CMD 같은 핵심 지시어를 기준으로 Dockerfile이 이미지를 만드는 방식을 정리합니다.

Docker이미지와 빌드

build context와 cache

dockerfile
FROM node:22-alpine
WORKDIR /app
COPY package.json package-lock.json ./
RUN npm ci
COPY . .
RUN npm run build

Docker 빌드 속도와 이미지 효율을 좌우하는 build context와 레이어 캐시의 동작 원리를 정리합니다.

Docker이미지와 빌드

image tag와 push

bash
docker build -t myname/my-app:1.0.0 .
docker push myname/my-app:1.0.0

이미지 이름과 태그가 버전 식별과 배포 경로를 결정한다는 점을 중심으로 build, tag, push 흐름을 정리합니다.

데이터와 네트워크

2 cards

Docker데이터와 네트워크

bind mount와 volume 차이

bash
# bind mount
docker run -v "$(pwd)":/app node:22-alpine

# named volume
docker run -v pgdata:/var/lib/postgresql/data postgres:16

개발 편의성과 데이터 영속성 요구에 따라 bind mount와 volume 중 무엇을 고를지 판단하는 카드입니다.

Docker데이터와 네트워크

포트 공개와 bridge 네트워크

bash
docker run --name web -d -p 8080:80 nginx:alpine

호스트와 컨테이너 사이의 포트 연결, 그리고 컨테이너끼리의 통신에서 bridge 네트워크가 어떤 역할을 하는지 정리합니다.

Compose와 멀티컨테이너

2 cards

DockerCompose와 멀티컨테이너

Compose 기본

yaml
services:
  app:
    build: .
    ports:
      - "3000:3000"
  db:
    image: postgres:16
    volumes:
      - pgdata:/var/lib/postgresql/data

volumes:
  pgdata:

여러 docker run 명령을 흩어 놓는 대신 compose.yaml 하나로 앱, DB, 볼륨, 네트워크를 선언하는 기본 흐름을 정리합니다.

DockerCompose와 멀티컨테이너

depends_on과 healthcheck

yaml
services:
  web:
    build: .
    depends_on:
      db:
        condition: service_healthy

  db:
    image: postgres:16
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U postgres"]
      interval: 10s
      retries: 5

Compose에서 서비스 시작 순서를 제어하되, 실행 순서와 준비 완료 상태는 다르다는 점을 healthcheck와 함께 정리합니다.

운영과 디버깅

3 cards

Docker운영과 디버깅

inspect, exec, debug 기본

bash
docker logs app
docker exec -it app sh
docker inspect app

실행 중인 컨테이너 내부를 확인하고, 셸에 들어가고, 설정과 포트 매핑을 읽는 기본 디버깅 흐름을 정리합니다.

Docker운영과 디버깅

prune과 cleanup

bash
docker system prune

실험 후 남은 중지 컨테이너, dangling 이미지, 미사용 네트워크와 볼륨을 안전하게 정리하는 기본 카드를 정리합니다.

Docker운영과 디버깅

CPU와 메모리 제한 기본

bash
docker run --memory=512m --cpus=1.5 my-app:latest

컨테이너가 호스트 자원을 무제한 쓰지 않도록 docker run 단계에서 메모리와 CPU 제한을 거는 기본 패턴을 정리합니다.