🐳

도커 & 컨테이너 명령어 치트시트

이 트랙 27개 모듈의 핵심 명령어·단축키 297를 한 곳에 모았습니다. 실무 중 “그 명령어 뭐였지?” 할 때 검색해 바로 꺼내 쓰세요. 각 모듈 제목을 누르면 해당 강의로 이동합니다.

297개 명령 · 27개 모듈
명령어/단축키용도자주 쓰는 예
docker run hello-worldDocker 설치·동작 확인(첫 컨테이너)이미지 pull→컨테이너 생성→실행→종료 4단계 확인
docker ps / docker ps -a실행 중 / 전체(종료 포함) 컨테이너 목록hello-world는 종료돼 ps엔 없고 ps -aExited로 남음
docker version --format '{{.Server.Arch}}'호스트(도커) CPU 아키텍처 확인arm64 / amd64exec 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 $USERsudo 없이 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 buildDockerfile로 이미지 빌드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 searchDocker 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-stdindocker push user/app:1.0
docker system dfDocker 디스크 사용·회수 가능량docker system df -v
docker image prunedangling/미사용 이미지 정리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 -tDockerfile로 이미지 빌드(태그 지정)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/hadolintDockerfile 린트(정적 검사)docker run --rm -i hadolint/hadolint < Dockerfile
명령어/단축키용도자주 쓰는 예
docker system dfDocker 디스크 사용량 요약(이미지/컨테이너/볼륨/캐시)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 loadtar 아카이브에서 이미지 복원docker load -i nginx-alpine.tar
docker images --format태그·생성일·ID를 표로 출력docker images myapp --format "table {{.Tag}}\t{{.CreatedAt}}"
명령어/단축키용도자주 쓰는 예
docker volume createNamed 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 -vNamed 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 --userUID/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 db127.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 versionCompose 버전 확인(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 --cpusCPU 절대 상한 지정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 eventsOOM 이벤트 스트림 확인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.statCPU 스로틀 발생 확인cat /sys/fs/cgroup/cpu.statnr_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 loadtar/tar.gz에서 이미지 복원docker load -i bundle.tar.gz / gunzip -c f.tar.gz | docker load
docker export / import컨테이너 파일시스템 스냅샷(레이어 X)docker export -o fs.tar ctrdocker import fs.tar app:snap
sha256sum전송 무결성 체크섬 생성·검증sha256sum f.tar.gz > f.sha256 → 수신측 sha256sum -c f.sha256
tar -tf / -xOfload 전 tar 내용·매니페스트 확인tar -xOf myapp.tar manifest.json | python3 -m json.tool
docker tagload 후 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 versionBuildKit(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-toCI에서 레지스트리 캐시 재사용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 -fbase+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 -INginx 응답 코드로 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 appnetdocker run --network appnet ...
docker compose down스택 종료(볼륨·이미지까지 초기화)docker compose down / docker compose down -v --rmi local
명령어/단축키용도자주 쓰는 예
docker psSTATUS 컬럼에서 헬스 상태 확인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 psUp (healthy)
docker compose up의존성 healthy 대기 후 기동docker compose up(포그라운드) / docker compose up -d
docker compose restartunhealthy 서비스만 재시작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-streamCPU/메모리/네트워크 스냅샷
프로세스 목록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 appuserDockerfile에서 전용 시스템 유저 생성
사용자 전환USER appuser이후 모든 프로세스를 non-root로 실행
소유권 설정COPY --chown=user:group복사와 동시에 소유자 지정, 추가 레이어 불필요
모든 capabilities 제거--cap-drop ALLDocker 기본 14개 capabilities 모두 제거
필요한 capability만 추가--cap-add NET_BIND_SERVICE제거 후 꼭 필요한 것만 선택적 추가
읽기 전용 파일시스템--read-only런타임 파일 변조 차단
임시 쓰기 공간--tmpfs /tmp:rw,noexec,nosuid메모리 기반 임시 디렉토리, 컨테이너 종료 시 삭제
권한 상승 방지--security-opt no-new-privilegessetuid/setgid 바이너리 통한 권한 상승 차단
seccomp 프로파일--security-opt seccomp=profile.json허용할 syscall 화이트리스트 지정
보안 감사docker/docker-bench-securityCIS Benchmark 기반 자동화 감사 도구
개념명령/설정설명
레지스트리 실행docker run -d -p 5000:5000 registry:2기본 레지스트리 컨테이너 시작
이미지 태그 규칙docker tag myapp:v1 HOST:PORT/myapp:v1레지스트리 주소 포함 태그 부여
이미지 pushdocker push HOST:PORT/myapp:v1프라이빗 레지스트리에 업로드
이미지 pulldocker pull HOST:PORT/myapp:v1프라이빗 레지스트리에서 다운로드
insecure-registry/etc/docker/daemon.json 에 추가 후 데몬 재시작HTTP 레지스트리 허용 (개발용)
CA 인증서 신뢰/etc/docker/certs.d/HOST:PORT/ca.crtself-signed 인증서 신뢰 등록
htpasswd 파일 생성htpasswd -Bbn user pass > htpasswdbcrypt 해시로 사용자 생성
기본 인증 활성화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:TAGTrivy로 보안 취약점 검사
폐쇄망 이미지 반입docker save | gzip > file.tar.gz + docker load < file.tar.gz오프라인 환경 이미지 이전
명령어/단축키용도자주 쓰는 예
docker buildx buildBuildKit 빌더로 이미지 빌드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=sshSSH 에이전트로 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 -fYAML로 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-deploymentREADY 3/3
kubectl get service서비스·노출 포트 확인kubectl get service nginx-service
kubectl logs컨테이너 로그(= docker logs)kubectl logs <pod> --previous (직전 크래시 로그)
kubectl describe podPending·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로컬 클러스터 외부 접근 URLminikube 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 --platformAMD64/ARM64 동시 빌드·pushdocker 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=1CI 러너에서 BuildKit 강제DOCKER_BUILDKIT=1 docker build .
명령어/단축키용도자주 쓰는 예
docker run --inittini를 PID 1로 주입(좀비·신호 처리)docker run --init myapp / compose init: true
docker stop -tGraceful 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 runsecrets 등 일회성 실행 검증docker compose run --rm app
cat cpu.statCPU 스로틀(꼬리 지연) 진단docker exec myapp cat /sys/fs/cgroup/cpu.statnr_throttled
dmesg / journalctl호스트에서 OOM 로그 확인dmesg | grep -i "out of memory"