컨테이너와 Docker 개요
웹 앱을 실행하려면
- 로컬에는 Node 설치 필요
- DB는 PostgreSQL 설치 필요
- 팀원마다 버전이 다를 수 있음
Docker를 쓰면
- 앱 컨테이너
- DB 컨테이너
를 같은 설정으로 실행할 수 있음컨테이너가 무엇이고 Docker가 무엇을 자동화하는지, 개발 환경 일관성과 배포 재현성 관점에서 정리하는 입문 카드입니다.
Category Reference
컨테이너 개념, 이미지 빌드, 실행 흐름, 네트워크, Compose까지 Docker의 핵심 흐름을 카드형 레퍼런스로 정리합니다.
제목, 요약, 태그, 섹션 제목 기준으로 찾습니다.
섹션
3 cards
웹 앱을 실행하려면
- 로컬에는 Node 설치 필요
- DB는 PostgreSQL 설치 필요
- 팀원마다 버전이 다를 수 있음
Docker를 쓰면
- 앱 컨테이너
- DB 컨테이너
를 같은 설정으로 실행할 수 있음컨테이너가 무엇이고 Docker가 무엇을 자동화하는지, 개발 환경 일관성과 배포 재현성 관점에서 정리하는 입문 카드입니다.
이미지 = 실행에 필요한 파일과 설정을 담은 청사진
컨테이너 = 이미지를 기반으로 실제 실행 중인 인스턴스Docker 입문에서 가장 자주 헷갈리는 이미지와 컨테이너의 차이를 정적 청사진과 실행 인스턴스 관점에서 정리합니다.
Docker CLI가 데몬과 통신해 이미지, 컨테이너, 네트워크, 볼륨 같은 객체를 관리하는 구조를 정리합니다.
2 cards
docker run --name web -d -p 8080:80 nginx:alpine이미지를 처음 실행할 때 가장 자주 쓰는 docker run 옵션을 중심으로 이름, 포트, 환경 변수, 삭제 흐름을 정리합니다.
docker ps
docker ps -a
docker stop web
docker start web
docker rm web컨테이너를 생성한 뒤 상태를 확인하고 시작, 중지, 삭제하는 기본 생명주기 명령을 정리합니다.
3 cards
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이 이미지를 만드는 방식을 정리합니다.
FROM node:22-alpine
WORKDIR /app
COPY package.json package-lock.json ./
RUN npm ci
COPY . .
RUN npm run buildDocker 빌드 속도와 이미지 효율을 좌우하는 build context와 레이어 캐시의 동작 원리를 정리합니다.
docker build -t myname/my-app:1.0.0 .
docker push myname/my-app:1.0.0이미지 이름과 태그가 버전 식별과 배포 경로를 결정한다는 점을 중심으로 build, tag, push 흐름을 정리합니다.
2 cards
# 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 run --name web -d -p 8080:80 nginx:alpine호스트와 컨테이너 사이의 포트 연결, 그리고 컨테이너끼리의 통신에서 bridge 네트워크가 어떤 역할을 하는지 정리합니다.
2 cards
services:
app:
build: .
ports:
- "3000:3000"
db:
image: postgres:16
volumes:
- pgdata:/var/lib/postgresql/data
volumes:
pgdata:여러 docker run 명령을 흩어 놓는 대신 compose.yaml 하나로 앱, DB, 볼륨, 네트워크를 선언하는 기본 흐름을 정리합니다.
services:
web:
build: .
depends_on:
db:
condition: service_healthy
db:
image: postgres:16
healthcheck:
test: ["CMD-SHELL", "pg_isready -U postgres"]
interval: 10s
retries: 5Compose에서 서비스 시작 순서를 제어하되, 실행 순서와 준비 완료 상태는 다르다는 점을 healthcheck와 함께 정리합니다.
3 cards
docker logs app
docker exec -it app sh
docker inspect app실행 중인 컨테이너 내부를 확인하고, 셸에 들어가고, 설정과 포트 매핑을 읽는 기본 디버깅 흐름을 정리합니다.
docker system prune실험 후 남은 중지 컨테이너, dangling 이미지, 미사용 네트워크와 볼륨을 안전하게 정리하는 기본 카드를 정리합니다.
docker run --memory=512m --cpus=1.5 my-app:latest컨테이너가 호스트 자원을 무제한 쓰지 않도록 docker run 단계에서 메모리와 CPU 제한을 거는 기본 패턴을 정리합니다.