기본
컨테이너 실행
docker run nginx # run image docker run -d nginx # detached (background) docker run -p 8080:80 nginx # map port docker run --name web nginx # named container docker run -it ubuntu bash # interactive shell
필수 명령
docker ps실행 중인 컨테이너 목록
docker ps -a모든 컨테이너 목록 (중지된 것 포함)
docker images로컬 이미지 목록
docker pull nginx레지스트리에서 이미지 다운로드
docker info시스템 전체 정보
컨테이너 관리
생명 주기
docker start <id>중지된 컨테이너 시작
docker stop <id>정상 중지 (SIGTERM)
docker kill <id>강제 중지 (SIGKILL)
docker restart <id>컨테이너 재시작
docker rm <id>중지된 컨테이너 제거
docker rm -f <id>강제 제거 (실행 중이어도)
검사 & 디버깅
docker logs <id>컨테이너 로그 보기
docker logs -f <id>로그 실시간 팔로우
docker exec -it <id> bash실행 중인 컨테이너에 셸 접속
docker inspect <id>컨테이너 상세 메타데이터 (JSON)
docker top <id>컨테이너 내 실행 중인 프로세스
docker stats실시간 리소스 사용량
파일 복사
docker cp file.txt :/app/ # host → container docker cp :/app/log.txt ./ # container → host
이미지
빌드 & 태깅
docker build -t myapp . # build from Dockerfile docker build -t myapp:v2 . # with tag docker tag myapp user/myapp:v2 # retag image
게시
docker login docker push user/myapp:v2 docker pull user/myapp:v2
이미지 관리
docker images모든 로컬 이미지 목록
docker rmi <image>이미지 제거
docker image prune댕글링 이미지 제거
docker system prune미사용 데이터 모두 제거
docker history <image>이미지 레이어 히스토리 보기
Dockerfile
주요 명령어
FROM node:20기반 이미지
WORKDIR /app작업 디렉터리 설정
COPY . .이미지에 파일 복사
RUN npm install빌드 중 명령 실행
CMD ["node", "app.js"]런타임 기본 명령
EXPOSE 3000리스닝 포트 문서화
ENV NODE_ENV=production환경 변수 설정
ARG VERSION=latest빌드 시간 변수
ENTRYPOINT ["python"]고정 실행 파일 (CMD는 인수)
Dockerfile 예시
FROM node:20-alpine WORKDIR /app COPY package*.json ./ RUN npm ci --production COPY . . EXPOSE 3000 CMD ["node", "server.js"]
볼륨
영구 스토리지
docker volume create mydata docker run -v mydata:/app/data nginx docker run -v $(pwd):/app nginx # bind mount
볼륨 명령
docker volume ls볼륨 목록
docker volume inspect <v>볼륨 세부 정보
docker volume rm <v>볼륨 제거
docker volume prune미사용 볼륨 제거
네트워크
네트워크 기본
docker network create mynet docker run --network mynet --name api nginx docker run --network mynet --name db postgres
네트워크 명령
docker network ls네트워크 목록
docker network inspect <n>네트워크 세부 정보
docker network connect <n> <c>컨테이너를 네트워크에 연결
docker network rm <n>네트워크 제거

같은 네트워크의 컨테이너는 이름으로 서로 접근 가능

Docker Compose
compose.yaml 예시
services: web: build: . ports: ["3000:3000"] depends_on: [db] db: image: postgres:16 environment: POSTGRES_PASSWORD: secret volumes: [pgdata:/var/lib/postgresql/data] volumes: pgdata:
Compose 명령
docker compose up모든 서비스 시작
docker compose up -d백그라운드에서 시작
docker compose down컨테이너 중지 및 제거
docker compose down -v볼륨도 함께 제거
docker compose build이미지 재빌드
docker compose logs -f모든 서비스 로그 팔로우
docker compose ps실행 중인 서비스 목록
docker compose exec web bash서비스에 셸 접속
유용한 패턴
정리 명령
docker system prune -a # remove all unused docker container prune # remove stopped docker image prune -a # remove unused images
빠른 레시피
Temp containerdocker run --rm -it alpine sh
Port checkdocker port
Env varsdocker run -e KEY=val image
Env filedocker run --env-file .env image
Restart policydocker run --restart unless-stopped image
Resource limitdocker run --memory 512m --cpus 1 image