🐳
도커 & 컨테이너 명령어 치트시트
이 트랙 27개 모듈의 핵심 명령어·단축키 297개를 한 곳에 모았습니다. 실무 중 “그 명령어 뭐였지?” 할 때 검색해 바로 꺼내 쓰세요. 각 모듈 제목을 누르면 해당 강의로 이동합니다.
297개 명령 · 27개 모듈
| 명령어/단축키 | 용도 | 자주 쓰는 예 |
|---|---|---|
docker run hello-world | Docker 설치·동작 확인(첫 컨테이너) | 이미지 pull→컨테이너 생성→실행→종료 4단계 확인 |
docker ps / docker ps -a | 실행 중 / 전체(종료 포함) 컨테이너 목록 | hello-world는 종료돼 ps엔 없고 ps -a에 Exited로 남음 |
docker version --format '{{.Server.Arch}}' | 호스트(도커) CPU 아키텍처 확인 | arm64 / amd64 — exec format error 진단 1단계 |
docker image inspect --format '{{.Architecture}}' | 이미지의 대상 아키텍처 확인 | 호스트 Arch와 다르면 exec format error 발생 |
docker run --platform | 다른 아키텍처를 에뮬레이션 실행 | docker run --platform linux/amd64 myimage:tag (느릴 수 있음) |
docker buildx build --platform | 멀티아키 이미지 빌드·푸시 | docker buildx build --platform linux/amd64,linux/arm64 -t img --push . |
sudo systemctl start docker | 리눅스에서 도커 데몬 시작 | Cannot connect to the Docker daemon 해결 |
sudo usermod -aG docker $USER | sudo 없이 docker 사용(그룹 추가) | 추가 후 터미널을 닫고 새로 열어야 적용 |
| 명령 | 용도 |
|---|---|
docker run -d --name X -p H:C image | 컨테이너 백그라운드 실행 |
docker ps / docker ps -a | 실행중 / 전체 컨테이너 목록 |
docker stop / docker start | 정지 / 재시작 |
docker rm / docker rm -f | 삭제 / 강제 삭제 |
docker logs -f NAME | 실시간 로그 확인 |
docker exec -it NAME bash | 컨테이너 쉘 접속 |
docker inspect NAME | 컨테이너 상세 정보 |
docker stats | 리소스 사용량 모니터링 |
| 명령어/단축키 | 용도 | 자주 쓰는 예 |
|---|---|---|
docker pull | 레지스트리에서 이미지 내려받기 | docker pull nginx:1.25.3-alpine (버전 고정) |
docker images | 로컬 이미지 목록·크기 비교 | docker images -qf dangling=true (태그 잃은 이미지) |
docker build | Dockerfile로 이미지 빌드 | docker build -t app:1.0 --no-cache . |
docker tag | 같은 이미지에 새 이름(참조) 추가 | docker tag app:1.0 myuser/app:1.0 |
docker push | 레지스트리에 이미지 업로드 | docker login && docker push myuser/app:1.0 |
docker history | 레이어별 크기·생성 명령 확인 | docker history --no-trunc app:1.0 |
docker inspect | 이미지 메타데이터(OS/Arch/레이어) | docker inspect -f '{{.Os}}/{{.Architecture}}' app:1.0 |
docker rmi | 이미지 삭제 | docker rmi nginx:1.25.3-alpine |
docker image prune | 미사용(dangling) 이미지 정리 | docker image prune -f (-a는 태그 없는 것까지) |
docker system df | 이미지·컨테이너 디스크 점유 확인 | docker system df |
docker login | 레지스트리 인증(push 전 필수) | echo $TOKEN | docker login ghcr.io -u USER --password-stdin |
| 명령어 | 용도 |
|---|---|
| docker history nginx:alpine | 이미지의 레이어 히스토리와 각 크기 확인 |
| docker image ls | 로컬 이미지 목록과 크기 |
| docker system df | 전체 디스크 사용량 (공유 레이어 반영한 실제 사용량) |
| 플래그 | 용도 | 언제 사용 |
|---|---|---|
-d | 백그라운드 실행 | 서버 프로세스, 장기 실행 |
-it | 대화형 터미널 | 셸 접속, REPL, 디버깅 |
--rm | 종료 시 자동 삭제 | 임시 실행, 일회성 작업 |
--name | 컨테이너 이름 | 관리 편의, 로그 추적 |
-e | 환경변수 주입 | 설정 전달 |
--env-file | 파일로 환경변수 | 여러 변수, 민감 정보 |
-p | 포트 바인딩 | 외부 접근 허용 |
-v | 볼륨/bind mount | 데이터 영속화 |
--restart | 재시작 정책 | 운영 안정성 |
--network | 네트워크 지정 | 서비스 간 통신 |
| 명령어/단축키 | 용도 | 자주 쓰는 예 |
|---|---|---|
docker pull | 태그·다이제스트·플랫폼 지정 내려받기 | docker pull ubuntu:22.04 / docker pull --platform linux/arm64 nginx:1.25 |
docker search | Docker Hub 이미지 검색·필터 | docker search --filter is-official=true nginx / --filter stars=100 python |
docker images | 로컬 이미지 목록·필터 | docker images --format "table {{.Repository}}\t{{.Tag}}\t{{.Size}}" / -f dangling=true |
docker image inspect | 레이어·환경·다이제스트 확인 | docker image inspect nginx --format '{{.RepoDigests}}' |
docker history | 레이어별 생성 명령·크기 보기 | docker history nginx |
docker tag | 레지스트리 주소 포함 태그 부여 | docker tag myapp:1.0 registry.example.com/myapp:1.0 |
docker login / push | 인증 후 이미지 업로드 | echo "$PW" | docker login -u user --password-stdin → docker push user/app:1.0 |
docker system df | Docker 디스크 사용·회수 가능량 | docker system df -v |
docker image prune | dangling/미사용 이미지 정리 | docker image prune / docker image prune -a --filter "until=72h" |
docker rmi | 특정 이미지·태그 삭제 | docker rmi nginx:old / docker rmi $(docker images -f dangling=true -q) |
docker info | 스토리지 드라이버·데이터 경로 확인 | docker info | grep "Storage Driver" |
| 명령어/단축키 | 용도 | 자주 쓰는 예 |
|---|---|---|
docker build -t | Dockerfile로 이미지 빌드(태그 지정) | docker build -t myapp:1.0 . (마지막 .=빌드 컨텍스트) |
docker build --no-cache | 레이어 캐시 무시하고 새로 빌드 | 외부 파일 최신화·캐시 부패 디버깅 시 |
docker build --target | 멀티스테이지 특정 스테이지까지만 빌드 | docker build --target builder -t myapp:test . |
docker build -f | 다른 경로·이름의 Dockerfile 사용 | docker build -f docker/Dockerfile.prod -t myapp:prod . |
docker build --build-arg | 빌드 타임 변수(ARG) 주입 | docker build --build-arg NODE_VERSION=18 -t myapp . |
docker build --build-arg CACHE_BUST=$(date +%s) | 특정 지점부터 강제 캐시 무효화 | ARG 변경으로 그 아래 레이어만 재빌드 |
docker build --platform | 멀티아키·크로스 빌드 | docker build --platform linux/amd64,linux/arm64 -t myapp:multi . |
docker build --progress=plain | 빌드 전체 로그 표시(디버깅) | 캐시 히트/미스와 RUN 출력 상세 확인 |
docker history | 레이어별 크기·생성 명령 확인 | docker history myapp:1.0 --no-trunc (비대 레이어 추적) |
docker inspect | 이미지 메타데이터(Env·Cmd 등) 확인 | docker inspect myapp:1.0 | grep -A5 '"Env"' |
docker scout cves | 이미지 취약점(CVE) 스캔 | docker scout cves myapp:1.0 |
docker run --rm -i hadolint/hadolint | Dockerfile 린트(정적 검사) | docker run --rm -i hadolint/hadolint < Dockerfile |
| 명령어/단축키 | 용도 | 자주 쓰는 예 |
|---|---|---|
docker system df | Docker 디스크 사용량 요약(이미지/컨테이너/볼륨/캐시) | docker system df -v (항목별 상세) |
docker images -f dangling=true | 태그 없는 <none> 이미지 조회 | docker images -f dangling=true |
docker image prune | 미사용 이미지 정리 | docker image prune -a -f --filter "until=72h" |
docker container prune | 종료된 컨테이너 정리 | docker container prune -f |
docker volume prune | 미사용 볼륨 정리(데이터 삭제 주의) | docker volume prune -f |
docker builder prune | 빌드 캐시 정리 | docker builder prune -f --filter "until=24h" |
docker system prune | 미사용 리소스 일괄 정리 | docker system prune -a (미사용 이미지 전체) |
docker tag | 배포용 레지스트리 경로·버전 태그 부여 | docker tag myapp:latest ghcr.io/org/myapp:v1.0.0 |
docker push | 레지스트리에 이미지 업로드 | docker push myapp:20240508-b9e2d14 |
docker pull | 특정 불변 태그로 이미지 내려받기 | docker pull myapp:20240508-b9e2d14 |
docker save | 이미지를 tar로 아카이브(폐쇄망 이전) | docker save nginx:alpine | gzip > nginx.tar.gz |
docker load | tar 아카이브에서 이미지 복원 | docker load -i nginx-alpine.tar |
docker images --format | 태그·생성일·ID를 표로 출력 | docker images myapp --format "table {{.Tag}}\t{{.CreatedAt}}" |
| 명령어/단축키 | 용도 | 자주 쓰는 예 |
|---|---|---|
docker volume create | Named Volume 생성(라벨·드라이버) | docker volume create --label project=myapp mysql-data |
docker volume ls | 볼륨 목록·dangling 필터 | docker volume ls -f dangling=true / -f label=env=production |
docker volume inspect | 실제 저장 경로 확인 | docker volume inspect mysql-data --format '{{.Mountpoint}}' |
docker run -v | Named Volume/Bind Mount 마운트 | -v mysql-data:/var/lib/mysql(named) / -v $(pwd)/src:/app/src(bind) |
docker run --mount | 명시적 마운트(권장) | --mount type=volume,source=data,target=/app,readonly |
docker run --tmpfs | 메모리 기반 임시 마운트 | docker run --tmpfs /app/uploads:rw,size=100m myapp |
docker run --user | UID/GID 맞춰 권한 오류 해결 | docker run --user $(id -u):$(id -g) -v $(pwd):/app myapp |
| 볼륨 백업(도우미 컨테이너) | 볼륨 내용을 tar로 호스트에 추출 | docker run --rm -v mysql-data:/src -v $(pwd):/backup alpine tar czf /backup/data.tar.gz -C /src . |
| 볼륨 복구 | tar를 새 볼륨에 풀기 | docker run --rm -v new:/data -v $(pwd):/backup alpine tar xzf /backup/data.tar.gz -C /data |
docker diff | 데이터가 쓰기 레이어에 쌓였는지 확인 | docker diff <postgres컨테이너> (볼륨 사용 시 안 잡힘) |
docker exec(DB 덤프) | 실행 중 DB 정합성 백업 | docker exec postgres pg_dumpall -U postgres > backup.sql |
docker volume rm / prune | 볼륨 삭제·미사용 정리 | docker volume rm mysql-data / docker volume prune |
| 명령어/단축키 | 용도 | 자주 쓰는 예 |
|---|---|---|
docker network ls | 네트워크 목록·드라이버 확인 | 기본 bridge/host/none과 사용자 정의 네트워크 구분 |
docker network create | 사용자 정의 bridge 생성(내장 DNS 제공) | docker network create --subnet 172.20.0.0/16 my_net |
docker network inspect | 서브넷·연결된 컨테이너 확인 | docker network inspect my_net --format '{{range .Containers}}{{.Name}} {{end}}' |
docker network connect | 실행 중 컨테이너를 네트워크에 추가 연결 | docker network connect net-backend api-server (재시작 없이) |
docker network disconnect | 네트워크에서 분리 | docker network disconnect net-backend api-server |
docker network rm | 사용자 정의 네트워크 삭제 | docker network rm net-frontend net-backend |
docker network prune | 미사용 네트워크 일괄 정리 | 연결된 컨테이너 없는 네트워크만 삭제(주의) |
docker run --network | 컨테이너를 특정 네트워크로 실행 | --network my_net(이름 통신) · --network host · --network none |
docker exec <c> ping <이름> | 이름 기반 연결 확인 | docker exec db ping -c 3 web (사용자 정의 net에서만 이름 해석) |
docker exec <c> nslookup <이름> | 내장 DNS 이름 해석 테스트 | docker exec web nslookup db → 127.0.0.11이 응답 |
docker exec <c> nc -zv <이름> <포트> | 포트 연결 확인 | docker exec web nc -zv db 5432 (ping은 되는데 포트가 안 될 때) |
docker exec <c> ip route | 컨테이너 라우팅·게이트웨이 확인 | 사내망 대역과 브릿지 서브넷 충돌 진단 |
docker inspect <c> --format '{{...Networks}}' | 컨테이너가 속한 네트워크 확인 | docker inspect web --format '{{range $k,$v := .NetworkSettings.Networks}}{{$k}} {{end}}' |
| 명령어/단축키 | 용도 | 자주 쓰는 예 |
|---|---|---|
docker compose up -d | 전체 스택 백그라운드 기동 | docker compose up -d --build (이미지 재빌드 후 기동) |
docker compose down | 컨테이너+네트워크 삭제(볼륨 유지) | docker compose down -v (볼륨까지 삭제 — 주의) |
docker compose ps | 서비스 상태·포트 목록 | Up 아닌 서비스(Exited/Restarting)부터 확인 |
docker compose logs | 서비스 로그 확인 | docker compose logs -f --tail 100 web |
docker compose exec | 실행 중 서비스에서 명령 실행 | docker compose exec db psql -U postgres |
docker compose run --rm | 새 임시 컨테이너로 일회성 작업 | docker compose run --rm web python manage.py migrate |
docker compose build | 서비스 이미지 빌드 | docker compose build --no-cache web |
docker compose pull | 최신 이미지 내려받기 | docker compose pull |
docker compose restart | 특정 서비스만 재시작 | docker compose restart web |
docker compose up --scale | 서비스 인스턴스 수 조정 | docker compose up -d --scale web=3 |
docker compose config | 병합·변수 치환 결과 검증 | docker compose -f compose.yml -f compose.prod.yml config |
-f (파일 겹치기) | base+override 환경별 병합 | docker compose -f compose.yml -f compose.prod.yml up -d |
--profile | 선택적 서비스 그룹만 활성화 | docker compose --profile monitoring up -d |
| 명령어/단축키 | 용도 | 자주 쓰는 예 |
|---|---|---|
docker compose up | 서비스 스택 기동 | docker compose up -d |
docker compose down | 스택 중지·컨테이너/네트워크 삭제 | docker compose down -v --remove-orphans (볼륨까지) |
docker compose logs | 서비스 로그 확인 | docker compose logs -f |
docker compose ps | 실행 중 서비스 상태 | docker compose ps |
docker compose restart | 특정 서비스만 재시작 | docker compose restart web |
docker compose exec | 실행 중 서비스에 명령 실행 | docker compose exec web sh |
docker compose watch | 소스 변경을 컨테이너에 자동 반영 | docker compose watch (sync/rebuild 자동) |
docker compose version | Compose 버전 확인(watch는 v2.22+) | docker compose version |
docker build --target | 멀티스테이지에서 개발/운영 스테이지 선택 | docker build --target dev -t myapp:dev . |
docker ps | 컨테이너·포트 매핑 확인 | docker ps | grep 5432 |
docker stats | 개발 컨테이너 자원 사용량 관찰 | docker stats |
| 명령어/단축키 | 용도 | 자주 쓰는 예 |
|---|---|---|
docker run --cpus | CPU 절대 상한 지정 | docker run --cpus 0.5 nginx (0.5코어) |
docker run -m / --memory-swap | 메모리·스왑 상한 지정 | docker run -m 512m --memory-swap 512m myapp (스왑 0) |
docker run --cpu-shares | 경합 시 상대 우선순위 | docker run --cpu-shares 512 batch (기본 1024의 절반) |
docker run --cpuset-cpus | 특정 코어에 고정 | docker run --cpuset-cpus "0,1" nginx / "2-3" |
docker stats | 실시간 자원 사용률 | docker stats --no-stream --format "table {{.Name}}\t{{.MemPerc}}" |
docker inspect(OOM) | OOM 종료·종료코드 확인 | docker inspect ctr --format '{{.State.OOMKilled}} {{.State.ExitCode}}' (137=OOM) |
docker inspect(설정) | 적용된 제한값 확인 | docker inspect ctr --format '{{.HostConfig.NanoCpus}} {{.HostConfig.Memory}}' |
docker update | 실행 중 제한 변경(재시작 불필요) | docker update --memory 1g --memory-swap 2g ctr / --cpus 2.0 |
docker events | OOM 이벤트 스트림 확인 | docker events --filter type=container --filter event=oom --since 10m |
cat memory.stat | 캐시 vs RSS 구분(누수 오진 방지) | docker exec ctr cat /sys/fs/cgroup/memory.stat | grep -E '^(anon|file) ' |
cat cpu.stat | CPU 스로틀 발생 확인 | cat /sys/fs/cgroup/cpu.stat → nr_throttled 증가 여부 |
| 명령어/단축키 | 용도 | 자주 쓰는 예 |
|---|---|---|
docker logs | 컨테이너 stdout/stderr 조회 | docker logs -f --tail 100 <c> |
docker logs --since/--until | 시간 구간으로 로그 필터 | docker logs --since 10m --until 1m <c> |
docker logs -t | 캡처 시각 타임스탬프 포함 | docker logs -f -t --tail 10 <c> |
docker inspect -f | 로그 파일 경로·드라이버 확인 | docker inspect -f '{{.LogPath}}' <c> |
docker info | 데몬 기본 로그 드라이버 확인 | docker info -f '{{.LoggingDriver}}' |
--log-driver | 컨테이너 로그 드라이버 지정 | docker run --log-driver local nginx |
--log-opt | 로그 로테이션 옵션 설정 | docker run --log-opt max-size=10m --log-opt max-file=3 nginx |
docker exec | 파일 로그(stdout 미출력) 직접 확인 | docker exec <c> tail -f /var/log/app.log |
docker cp | 로그 파일을 호스트로 추출 | docker cp <c>:/var/log/app.log ./app.log |
docker system df | 컨테이너 로그 포함 디스크 점유 확인 | docker system df |
truncate | 긴급 시 로그 파일 비우기(컨테이너 유지) | sudo truncate -s 0 $(docker inspect -f '{{.LogPath}}' <c>) |
| 명령어/단축키 | 용도 | 자주 쓰는 예 |
|---|---|---|
docker ps -a | 종료·재시작 포함 전체 컨테이너 상태 확인 | docker ps -a --format "table {{.Names}}\t{{.Status}}" |
docker logs | 종료 직전 stdout/stderr로 1차 원인 파악 | docker logs --tail 100 <c> |
docker inspect -f | 종료 원인 필드만 Go 템플릿으로 추출 | docker inspect -f '{{.State.OOMKilled}} {{.State.ExitCode}}' <c> |
docker events | 컨테이너 start/die 생명주기 이벤트 관찰 | docker events --filter event=die --format '{{.Actor.Attributes.name}} {{.Actor.Attributes.exitCode}}' |
docker stats | 실시간 CPU·메모리(제한 대비) 스냅샷 | docker stats --no-stream <c> |
docker update | 실행 중 컨테이너의 메모리 제한 즉시 변경 | docker update --memory 512m --memory-swap 1g <c> |
docker exec | 실행 중 컨테이너 내부 UID·파일 확인(권한 진단) | docker exec <c> id |
docker ps --filter | 조건으로 컨테이너 좁히기 | docker ps --filter "publish=8080" |
docker run | 에러 재현·포트 바꿔 재실행 | docker run -d -p 8081:80 --name app nginx:alpine |
docker build | 캐시 미적용 진단·강제 재빌드 | docker build --no-cache -t app . --progress=plain |
docker rm -f | 실습·문제 컨테이너 강제 정리 | docker rm -f port-occupier oom-test |
ss / lsof | 포트 충돌 시 호스트 점유 프로세스 확인 | ss -tlnp | grep 8080 / lsof -i :8080 |
| 명령어/단축키 | 용도 | 자주 쓰는 예 |
|---|---|---|
docker save -o | 이미지를 tar로 저장(비압축) | docker save -o myapp.tar myapp:1.0 |
docker save + gzip | 압축 저장으로 전송 용량 절감 | docker save myapp:1.0 | gzip -9 > myapp.tar.gz / | pigz(병렬) |
docker save(다중) | 여러 이미지를 한 파일로 묶기 | docker save img1:1.0 img2:1.0 | gzip > bundle.tar.gz |
docker load | tar/tar.gz에서 이미지 복원 | docker load -i bundle.tar.gz / gunzip -c f.tar.gz | docker load |
docker export / import | 컨테이너 파일시스템 스냅샷(레이어 X) | docker export -o fs.tar ctr → docker import fs.tar app:snap |
sha256sum | 전송 무결성 체크섬 생성·검증 | sha256sum f.tar.gz > f.sha256 → 수신측 sha256sum -c f.sha256 |
tar -tf / -xOf | load 전 tar 내용·매니페스트 확인 | tar -xOf myapp.tar manifest.json | python3 -m json.tool |
docker tag | load 후 none:none 태그 복구 | docker tag <IMAGE_ID> myapp:1.0 |
docker images | 복원된 이미지 이름·태그 확인 | docker images | grep -E "alpine|nginx" |
docker inspect | 이미지 ID·아키텍처 검증 | docker inspect myapp:1.0 --format '{{.Architecture}}' |
rsync --checksum | 전송 후 자동 무결성 검증 이전 | rsync -avz --checksum f.tar.gz user@host:/path/ |
| 명령어/단축키 | 용도 | 자주 쓰는 예 |
|---|---|---|
docker build --target | 특정 스테이지까지만 빌드 | docker build --target build -t app:build . (테스트/디버그용) |
docker build -f | 여러 Dockerfile 중 지정 빌드 | docker build -f Dockerfile.multi -t goapp:multi . |
docker buildx build --platform | 타깃/멀티 아키텍처 빌드·푸시 | docker buildx build --platform linux/amd64,linux/arm64 -t app:1.0 --push . |
docker buildx version | BuildKit(buildx) 사용 가능 확인 | docker buildx version |
DOCKER_BUILDKIT=1 | 구버전에서 BuildKit 일회성 활성화 | DOCKER_BUILDKIT=1 docker build . |
RUN --mount=type=cache | 레이어 캐시 밖 다운로드 캐시 영속 | RUN --mount=type=cache,target=/root/.npm npm ci |
--cache-from / --cache-to | CI에서 레지스트리 캐시 재사용 | docker buildx build --cache-to type=registry,ref=<repo>:cache,mode=max --push . |
docker images | 단일 vs 멀티스테이지 크기 비교 | docker images goapp:single goapp:multi |
docker history | 최종 이미지 레이어 구성 확인 | docker history goapp:multi |
docker image inspect | 아키텍처 확인(exec format error 진단) | docker image inspect app:latest --format '{{.Architecture}}/{{.Os}}' |
docker run --rm | 최종 이미지에 devDeps 제외 검증 | docker run --rm nodeapp:multi sh -c "ls node_modules/.bin/tsc || echo excluded" |
| 명령어/단축키 | 용도 | 자주 쓰는 예 |
|---|---|---|
docker compose up --build | 재빌드 후 실행(전체/특정 서비스) | docker compose up --build -d / ... -d app(app만) |
docker compose up --no-deps | 의존 서비스 재시작 없이 한 서비스만 교체 | docker compose up --build -d --no-deps app |
docker compose -f -f | base+override로 개발 환경 전환 | docker compose -f docker-compose.yml -f docker-compose.dev.yml up -d |
docker compose build --build-arg | 빌드 인자로 버전 주입 | docker compose build --build-arg APP_VERSION=1.1.0 app |
docker compose ps | 서비스 상태·헬스 확인 | docker compose ps --format "table {{.Service}}\t{{.Status}}" |
docker compose logs | 서비스 로그 확인 | docker compose logs -f app / docker compose logs nginx --tail=20 |
docker compose exec | 컨테이너 내부 접속·연결 테스트 | docker compose exec nginx wget -qO- http://app:3000/api/health |
curl -I | Nginx 응답 코드로 502/504 구분 | curl -I http://localhost (502=연결실패, 504=타임아웃) |
docker tag / images | 버전 태그로 롤백 대비 | docker tag web-was-lab-app:latest web-was-lab-app:v1.0 |
docker inspect | 실행 컨테이너가 쓰는 이미지 확인 | docker inspect web-was-lab-app-1 --format '{{.Image}}' |
docker network create/connect | 별도 실행 컨테이너 이름 해석 연결 | docker network create appnet → docker run --network appnet ... |
docker compose down | 스택 종료(볼륨·이미지까지 초기화) | docker compose down / docker compose down -v --rmi local |
| 명령어/단축키 | 용도 | 자주 쓰는 예 |
|---|---|---|
docker ps | STATUS 컬럼에서 헬스 상태 확인 | docker ps --format "table {{.Names}}\t{{.Status}}" → (healthy) / (unhealthy) / (health: starting) |
docker inspect(Health) | 헬스체크 로그·실패 이력 조회 | docker inspect nginx-hc --format '{{json .State.Health}}' | python3 -m json.tool |
docker inspect(재시작) | 재시작 횟수·종료 원인 확인 | docker inspect crasher --format '{{.RestartCount}} {{.State.ExitCode}} {{.State.OOMKilled}}' |
docker run --restart | 실행 시 재시작 정책 지정 | docker run -d --restart=unless-stopped nginx:alpine |
docker update --restart | 실행 중 컨테이너 정책 변경 | docker update --restart on-failure:5 myapp |
docker compose ps | 서비스별 헬스 상태 일괄 확인 | docker compose ps → Up (healthy) |
docker compose up | 의존성 healthy 대기 후 기동 | docker compose up(포그라운드) / docker compose up -d |
docker compose restart | unhealthy 서비스만 재시작 | docker compose restart <서비스명> |
docker exec | 헬스체크 실패를 의도적으로 유발 | docker exec nginx-hc nginx -s stop (→ unhealthy 관찰) |
watch | 상태 전환 실시간 관찰 | watch docker ps --format "table {{.Names}}\t{{.Status}}" |
docker rm -f | 실습 컨테이너 강제 정리 | docker rm -f nginx-hc |
| 개념 | 명령/설정 | 설명 |
|---|---|---|
| 셸 진입 | docker exec -it <id> bash 또는 sh | 실행 중인 컨테이너에 인터랙티브 세션 |
| 단발성 명령 | docker exec <id> cat /etc/config | 셸 없이 특정 명령만 실행 |
| 메타데이터 추출 | docker inspect --format '{{.NetworkSettings.IPAddress}}' | Go 템플릿으로 원하는 필드만 추출 |
| OOMKilled 확인 | docker inspect --format '{{.State.OOMKilled}}' | 메모리 부족 종료 여부 확인 |
| 실시간 리소스 | docker stats --no-stream | CPU/메모리/네트워크 스냅샷 |
| 프로세스 목록 | docker top <id> | 컨테이너 내 실행 중인 프로세스 |
| 파일 추출 | docker cp <id>:/path/file ./local | 실행 중/중지된 컨테이너 모두 가능 |
| distroless 진단 | sudo nsenter --target $PID --net --pid --mount -- bash | 셸 없는 컨테이너 네임스페이스 직접 진입 |
| 시스템 콜 추적 | sudo strace -p $PID -f | 프로세스의 시스템 콜 실시간 추적 |
| 사이드카 디버그 | docker run --network container:<id> nicolaka/netshoot | 프로덕션 컨테이너 수정 없이 네트워크 진단 |
| 트래픽 캡처 | docker run --network container:<id> tcpdump | 컨테이너 네트워크 패킷 분석 |
| 개념 | 명령/설정 | 설명 |
|---|---|---|
| non-root 사용자 생성 | RUN adduser -S -u 1001 appuser | Dockerfile에서 전용 시스템 유저 생성 |
| 사용자 전환 | USER appuser | 이후 모든 프로세스를 non-root로 실행 |
| 소유권 설정 | COPY --chown=user:group | 복사와 동시에 소유자 지정, 추가 레이어 불필요 |
| 모든 capabilities 제거 | --cap-drop ALL | Docker 기본 14개 capabilities 모두 제거 |
| 필요한 capability만 추가 | --cap-add NET_BIND_SERVICE | 제거 후 꼭 필요한 것만 선택적 추가 |
| 읽기 전용 파일시스템 | --read-only | 런타임 파일 변조 차단 |
| 임시 쓰기 공간 | --tmpfs /tmp:rw,noexec,nosuid | 메모리 기반 임시 디렉토리, 컨테이너 종료 시 삭제 |
| 권한 상승 방지 | --security-opt no-new-privileges | setuid/setgid 바이너리 통한 권한 상승 차단 |
| seccomp 프로파일 | --security-opt seccomp=profile.json | 허용할 syscall 화이트리스트 지정 |
| 보안 감사 | docker/docker-bench-security | CIS Benchmark 기반 자동화 감사 도구 |
| 개념 | 명령/설정 | 설명 |
|---|---|---|
| 레지스트리 실행 | docker run -d -p 5000:5000 registry:2 | 기본 레지스트리 컨테이너 시작 |
| 이미지 태그 규칙 | docker tag myapp:v1 HOST:PORT/myapp:v1 | 레지스트리 주소 포함 태그 부여 |
| 이미지 push | docker push HOST:PORT/myapp:v1 | 프라이빗 레지스트리에 업로드 |
| 이미지 pull | docker pull HOST:PORT/myapp:v1 | 프라이빗 레지스트리에서 다운로드 |
| insecure-registry | /etc/docker/daemon.json 에 추가 후 데몬 재시작 | HTTP 레지스트리 허용 (개발용) |
| CA 인증서 신뢰 | /etc/docker/certs.d/HOST:PORT/ca.crt | self-signed 인증서 신뢰 등록 |
| htpasswd 파일 생성 | htpasswd -Bbn user pass > htpasswd | bcrypt 해시로 사용자 생성 |
| 기본 인증 활성화 | REGISTRY_AUTH=htpasswd 환경변수 | 레지스트리 컨테이너 인증 설정 |
| 로그인 | docker login HOST:PORT | 레지스트리에 자격증명 저장 |
| 로그아웃 | docker logout HOST:PORT | 저장된 자격증명 제거 |
| 이미지 목록 조회 | curl http://HOST:PORT/v2/_catalog | 저장된 리포지토리 목록 API |
| 태그 목록 조회 | curl http://HOST:PORT/v2/IMAGE/tags/list | 이미지별 태그 목록 API |
| 취약점 스캔 | trivy image IMAGE:TAG | Trivy로 보안 취약점 검사 |
| 폐쇄망 이미지 반입 | docker save | gzip > file.tar.gz + docker load < file.tar.gz | 오프라인 환경 이미지 이전 |
| 명령어/단축키 | 용도 | 자주 쓰는 예 |
|---|---|---|
docker buildx build | BuildKit 빌더로 이미지 빌드 | docker buildx build -t myapp:latest . |
RUN --mount=type=cache | 패키지 캐시를 빌드 간 재사용(Dockerfile) | RUN --mount=type=cache,target=/root/.npm npm ci |
--mount=type=cache,sharing=locked | 동시 빌드 시 캐시 쓰기 직렬화 | RUN --mount=type=cache,target=/var/cache/apt,sharing=locked apt-get update |
RUN --mount=type=secret | 시크릿을 레이어에 남기지 않고 주입 | docker buildx build --secret id=npmrc,src=$HOME/.npmrc . |
RUN --mount=type=ssh | SSH 에이전트로 private repo 접근 | docker buildx build --ssh default . |
docker buildx build --progress=plain | 캐시 히트/미스 상세 로그 | docker buildx build --progress=plain -t myapp . 2>&1 | tee build.log |
docker buildx build --no-cache | 캐시 무시하고 처음부터 빌드 | docker buildx build --no-cache -t myapp . |
--cache-to / --cache-from type=registry | 레지스트리에 빌드 캐시 저장·재사용(CI) | docker buildx build --cache-to type=registry,ref=reg/app:cache --push . |
docker buildx bake | 여러 타깃을 파일로 선언해 일괄 빌드 | docker buildx bake --push / docker buildx bake --print |
docker history | 레이어별 명령·크기 확인(시크릿 유출 점검) | docker history myapp:latest --no-trunc | grep -i token |
docker system df | 빌드 캐시·이미지 디스크 사용량 확인 | docker system df (-v로 상세) |
docker builder prune | 쌓인 빌드 캐시 정리 | docker builder prune --filter until=24h (24h 이상만) |
DOCKER_BUILDKIT=1 | 구버전에서 BuildKit 활성화 | DOCKER_BUILDKIT=1 docker build -t myapp . |
| 명령어/단축키 | 용도 | 자주 쓰는 예 |
|---|---|---|
kubectl apply -f | YAML로 Deployment·Service 배포(선언적) | kubectl apply -f nginx-deployment.yaml |
kubectl get pods | 실행 중 Pod 목록(= docker ps) | kubectl get pods -w (상태 변화 감시) · --show-labels |
kubectl get deployment | 복제본 READY 상태 확인 | kubectl get deployment nginx-deployment → READY 3/3 |
kubectl get service | 서비스·노출 포트 확인 | kubectl get service nginx-service |
kubectl logs | 컨테이너 로그(= docker logs) | kubectl logs <pod> --previous (직전 크래시 로그) |
kubectl describe pod | Pending·CrashLoop 원인 Events 확인 | kubectl describe pod <pod> → Events의 FailedScheduling·BackOff |
kubectl exec -it | 컨테이너 접속(= docker exec -it) | kubectl exec -it pod-a -- curl http://pod-b-service |
kubectl rollout undo | 이전 버전으로 즉시 롤백 | kubectl rollout undo deployment/<name> · --to-revision=2 |
kubectl edit deployment | 실행 중 Deployment 설정 수정 | kubectl edit deployment nginx-deployment (requests 조정) |
kubectl run | 임시 디버그 Pod 실행 | kubectl run debug --image=myapp:latest --restart=Never -it -- /bin/sh |
kubectl describe nodes | 노드 리소스 할당 현황 확인 | kubectl describe nodes | grep -A5 "Allocated resources" |
minikube service --url | 로컬 클러스터 외부 접근 URL | minikube service nginx-service --url |
| 명령어/단축키 | 용도 | 자주 쓰는 예 |
|---|---|---|
docker stats | 실행 중 컨테이너 CPU·MEM·NET·BLOCK I/O 실시간 | docker stats(전체) / docker stats api_server db(지정) |
docker stats --no-stream | 한 번만 찍고 종료 — 스크립트·크론용 | docker stats --no-stream --format '{{.Name}} {{.CPUPerc}} {{.MemPerc}}' |
docker inspect --format | 컨테이너 설정값을 Go 템플릿으로 추출 | docker inspect cadvisor --format '{{.HostConfig.Privileged}}' |
docker inspect --format '{{range}}' | 마운트·네트워크 같은 목록형 값 순회 | docker inspect cadvisor --format '{{range .HostConfig.Binds}}{{.}}{{"\n"}}{{end}}' |
docker logs | 컨테이너 표준출력 로그로 기동 실패 원인 확인 | docker logs cadvisor 2>&1 | tail -20 |
docker exec | 실행 중 컨테이너 안에서 진단 명령 실행 | docker exec prometheus wget -qO- http://cadvisor:8080/metrics |
docker compose ps | 모니터링 스택 컨테이너 상태(Exited 여부) | docker compose ps cadvisor |
docker compose up -d | 스택 기동 · 설정 변경 후 재생성 | docker compose up -d --force-recreate cadvisor |
| 명령어/단축키 | 용도 | 자주 쓰는 예 |
|---|---|---|
docker login | 레지스트리 인증(CI에선 토큰 stdin) | echo $TOKEN | docker login ghcr.io -u USER --password-stdin |
docker build | 파이프라인에서 이미지 빌드 | docker build -t myapp:$GIT_SHA . |
docker tag | 하나의 이미지에 여러 태그 부여 | docker tag myapp:$GIT_SHA myapp:main-latest |
docker push | 레지스트리에 이미지 업로드 | docker push myapp:1.2.3 (불변 태그 우선) |
docker pull | 배포 대상에서 이미지 내려받기 | docker pull myapp:main-a1b2c3d4 |
docker buildx ls | 빌더 인스턴스·지원 플랫폼 목록 | docker buildx ls |
docker buildx create | 멀티아키텍처용 빌더 생성 | docker buildx create --name mybuilder --driver docker-container --use |
docker buildx inspect --bootstrap | 빌더 기동 및 플랫폼 확인 | docker buildx inspect --bootstrap |
docker buildx build --platform | AMD64/ARM64 동시 빌드·push | docker buildx build --platform linux/amd64,linux/arm64 -t myapp:latest --push . |
docker build --secret | 빌드 시크릿을 레이어에 남기지 않기 | docker build --secret id=db_password,env=DB_PASSWORD . |
docker history | 캐시 재사용·레이어 확인 | docker history cicd-demo:withcache |
docker buildx du | 빌드 캐시 디스크 사용량 | docker buildx du |
DOCKER_BUILDKIT=1 | CI 러너에서 BuildKit 강제 | DOCKER_BUILDKIT=1 docker build . |
| 명령어/단축키 | 용도 | 자주 쓰는 예 |
|---|---|---|
docker run --init | tini를 PID 1로 주입(좀비·신호 처리) | docker run --init myapp / compose init: true |
docker stop -t | Graceful Shutdown 대기 시간 조정 | docker stop -t 30 myapp (기본 10초 연장) |
docker exec ... kill | 신호 핸들러 동작 수동 검증 | docker exec myapp kill -SIGTERM 1 |
docker inspect(OOM) | OOM 종료 여부 확인 | docker inspect ctr --format '{{.State.OOMKilled}}' (true=OOM) |
docker inspect(다이제스트) | 다이제스트 핀닝값 확인 | docker inspect node:20-alpine --format '{{index .RepoDigests 0}}' |
docker inspect(로그 경로) | json-file 로그 파일 위치 확인 | docker inspect ctr --format '{{.LogPath}}' |
docker update | 실행 중 리소스 제한 변경 | docker update --memory 1g --memory-swap 1g ctr / --cpus 2.0 |
docker stats | 메모리·CPU 사용 추이 관찰 | docker stats --no-stream --format "table {{.Name}}\t{{.MemPerc}}" |
docker scout | 이미지 CVE 취약점 스캔 | docker scout cves myapi:1.2.3 / docker scout quickview |
docker compose run | secrets 등 일회성 실행 검증 | docker compose run --rm app |
cat cpu.stat | CPU 스로틀(꼬리 지연) 진단 | docker exec myapp cat /sys/fs/cgroup/cpu.stat → nr_throttled |
dmesg / journalctl | 호스트에서 OOM 로그 확인 | dmesg | grep -i "out of memory" |