Super Kawaii Cute Cat Kaoani
본문 바로가기
{Back-end}/DevOps

[Docker] 도커 명령어 정리

by wonee1 2025. 11. 4.
728x90

 

 

 

Docker 명령어 활용

Docker 이미지 명령어 구성

Docker는 Dockerfile을 이용해 이미지를 build하고, 로컬 서버에 save하거나 load할 수 있습니다. Docker Hub Registry에 docker login 후 이미지를 push하거나 pull하여 공유할 수 있으며, search를 통해 이미지를 찾을 수 있습니다. 이미지는 container로 실행될 수 있습니다.

 

 

 

이미지 검색하기

docker search 명령어를 사용하여 Docker Hub에서 이미지를 검색할 수 있습니다.

  • 명령어: docker search 이미지명[:TAG]
  • 예시: docker search ubuntu
  • 공식 이미지: ubuntu, centos, redis 등 OS나 프로그램 이름과 같은 이미지는 공식 이미지로 간주됩니다.
  • 비공식 이미지: 나머지 이미지는 사용자들이 만들어서 공개한 이미지입니다.
  • Docker Hub 웹사이트(https://registry.hub.docker.com)에서도 이미지 검색이 가능합니다.

 

 

Docker 이미지 내려받기

 

docker pull 명령어를 사용하여 Docker Hub에서 이미지를 다운로드할 수 있습니다.

  • 명령어: docker [image] pull [OPTIONS] 이미지명[:TAG]
  • [image]는 생략 가능합니다.
  • 예시: docker pull debian
    • Using default tag: latest 메시지는 태그를 지정하지 않으면 latest 버전이 자동으로 사용됨을 의미합니다.
    • Digest 값은 Docker 레지스트리에서 이미지를 관리하는 고유 식별값(해시값)입니다.
    • 다운로드한 이미지는 여러 레이어로 구성되며, 각 레이어는 해시 값으로 구분됩니다.
  • 이미지 기본 형식: <네임스페이스>/<이미지명>:<태그>
    • Docker Hub의 library는 기본 네임스페이스입니다.
    • TAG를 포함하지 않으면 자동으로 latest로 지정됩니다.
  • 이미지 다운로드 방법:
    • 최신 버전 명시적 지정: docker pull debian:latest
    • 이미지 식별 정보(다이제스트) 지정: docker pull debian:sha256:28579893344284...
    • Docker Hub 레지스트리 명시적 지정: docker pull library/debian:latest 또는 docker pull docker.io/library/debian:latest
    • 외부 레지스트리 주소 이용: docker pull gcr.io/google-samples/hello-app:1.0
      • 주의: 웹 주소 URL에서 도메인 주소의 시작인 http://를 붙이지 않고 이미지 주소를 사용해야 합니다.

 

Docker 이미지 목록 출력하기

 

docker image ls 또는 docker images 명령어를 사용하여 로컬에 다운로드된 이미지 목록을 확인할 수 있습니다.

  • 명령어:
    • docker image ls (최신)
    • docker images (이전)
  • 출력 정보: REPOSITORY, TAG, IMAGE ID, CREATED, SIZE
  • 특정 이미지 검색: docker images ubuntu와 같이 이미지 이름을 설정하면 이름은 같지만 태그가 다른 이미지가 출력될 수 있습니다.

 

Docker 이미지 세부 정보 조회하기

 

docker image inspect 명령어를 사용하여 이미지의 상세 정보를 확인할 수 있습니다.

  • 명령어: docker image inspect [OPTIONS] 이미지명[:TAG]
  • 주요 출력 정보:
    • "Id": 이미지 ID
    • "Created": 생성일
    • "DockerVersion": Docker 버전
    • "Architecture": CPU 아키텍처
    • "RootFS": 이미지 다이제스트 정보
    • "GraphDriver": 이미지 레이어 저장 정보

Docker 이미지 히스토리 조회하기

docker image history 명령어를 사용하여 이미지 구성 레이어의 수행 명령, 크기 등을 조회할 수 있습니다.

  • 명령어: docker image history [OPTIONS] 이미지명[:TAG]
  • 특징: 위쪽 내용이 최신 변경 내역입니다.
  • Image != Layer: 이미지는 여러 레이어로 구성되며, 각 레이어는 웹 애플리케이션 소스, 아파치 HTTPD 서버, 운영체제(데비안) 등을 포함할 수 있습니다. 하위 레이어는 읽기 전용(Read-only)이며, 최상위 레이어는 읽기/쓰기(Read-write)가 가능합니다.

Docker 이미지 태그 설정하기

docker tag 명령어를 사용하여 이미지에 태그를 지정할 수 있습니다.

  • 명령어: docker tag 원본이미지명[:TAG] 참조이미지명[:TAG]
  • 활용: 이미지 ID나 이미지 이름[:태그]에 세부 정보(OS, 버전 등)를 붙여 태그를 지정하거나, Docker Hub와 같은 레지스트리에 업로드하기 위해 저장소명과 함께 태그를 지정할 때 사용합니다.
  • 예시:
    • docker image tag httpd:latest debian-httpd:1.0
    • docker image tag httpd:latest [본인 아이디]/httpd:3.0

Docker 로그인하기

docker login 명령어를 사용하여 Docker Hub에 로그인할 수 있습니다.

  • 명령어: docker login
  • 목적: 호스트에서 Docker Hub에 이미지를 업로드(push)하기 위해 필요합니다. (pull이나 search에는 필요하지 않습니다.)
  • 주의: 비밀번호는 암호화되지 않고 /home/hylee/.docker/config.json 경로에 저장됩니다. (Base64 인코딩을 통한 저장)

Docker 로그아웃하기

docker logout 명령어를 사용하여 Docker Hub 레지스트리에서 로그아웃할 수 있습니다.

  • 명령어: docker logout
  • 효과: config.json 파일의 auth 값이 삭제되고, docker info에서도 사용자명이 제거됩니다.

Docker 이미지 삭제하기

docker image rm 또는 docker rmi 명령어를 사용하여 이미지를 삭제할 수 있습니다.

  • 명령어: docker image rm [옵션] {이미지명[:TAG] | 이미지ID}
    • docker rmi는 docker image rm의 이전 명령어입니다.
  • 삭제 규칙:
    • latest 버전을 제외한 나머지는 반드시 태그명을 명시해야 합니다.
    • 이미지 ID로 삭제 시, 다른 태그가 참조하고 있으면 오류가 발생할 수 있습니다.
    • -f 옵션을 사용하면 태그가 지정된 모든 httpd 관련 이미지를 강제로 삭제할 수 있습니다. (이미지 ID의 앞 글자 몇 자만 써도 삭제 가능)
  • 컨테이너 실행 중인 이미지: 실행 중인 컨테이너에 연결된 이미지는 삭제할 수 없습니다. 컨테이너를 멈추고 삭제한 후 이미지를 삭제해야 합니다.

모든 Docker 이미지 삭제하기

docker image prune 명령어를 사용하여 로컬에 다운로드된 이미지 중 컨테이너가 연결되지 않은 모든 이미지를 제거할 수 있습니다.

  • 명령어: docker image prune [옵션]
  • Dangling 이미지: 태그가 붙지 않았거나 어떤 컨테이너도 참조하지 않는 이미지들을 삭제합니다.
  • -a 옵션을 사용하면 사용 중이 아닌 모든 이미지를 제거합니다.

Docker 컨테이너 명령어 구성

Docker 이미지를 기반으로 컨테이너를 실행하고 관리하는 명령어들을 포함합니다.

  • run, create, exec, attach 등의 명령어를 통해 컨테이너를 생성, 실행, 관리할 수 있습니다.
  • stop, pause, unpause, restart, kill, rm 등을 통해 컨테이너의 상태를 제어할 수 있습니다.
  • inspect, ps, logs, top, stats 등으로 컨테이너 정보를 조회할 수 있습니다.

컨테이너 목록 확인하기

docker container ls 또는 docker ps 명령어를 사용하여 컨테이너 목록을 출력합니다.

  • 명령어:
    • docker container ls
    • docker ps
  • -a 옵션을 사용하면 정지된 컨테이너까지 모두 출력합니다.
  • 옵션을 사용하지 않으면 실행되고 있는 컨테이너만 출력합니다.

컨테이너 실행하기

docker run 명령어를 사용하여 이미지를 기반으로 컨테이너를 생성하고 실행합니다.

  • 명령어: docker [container] run [옵션] 이미지명 [실행명령]
  • 이는 [pull] + create + start + [command]의 과정을 포함합니다.
  • 주요 옵션:
    • -i: 키보드 입력을 컨테이너 표준 입력에 연결.
    • -t: 터미널을 통해 대화형 조작 가능. (-it 조합으로 많이 사용)
    • -d (--daemon): 백그라운드로 컨테이너를 실행하여 터미널과 연결하지 않음.
    • --name: 컨테이너 이름 설정 (시스템에서 유일해야 함).
    • --rm: 컨테이너가 종료되면 자동으로 삭제.
    • --restart: 컨테이너 종료 시 재시작 정책 지정. (no, on-failure, always 등)
    • --env: 컨테이너 환경 변수 지정.
    • -v (--volume): 호스트 경로와 컨테이너 경로의 공유 볼륨 설정 (Bind mount).
    • -h: 컨테이너 호스트명 지정.
    • -p (--publish): 호스트 포트와 컨테이너 포트 연결.
    • -P (--publish-all): 컨테이너 내부의 노출된 포트를 호스트 임의의 포트에 게시.
    • --link: 동일 호스트의 다른 컨테이너와 연결 설정 (IP 대신 컨테이너 이름 사용).

컨테이너 생성하기

docker create 명령어를 사용하여 이미지를 기반으로 컨테이너를 생성합니다 (실행은 하지 않음).

  • 명령어: docker [container] create [옵션] 이미지명
  • docker run과 달리 컨테이너 내부에 접근하지 않고 스냅숏 생성만 수행합니다.

컨테이너 시작하기

docker start 명령어를 사용하여 이미 생성된 컨테이너를 시작합니다.

  • 명령어: docker [container] start [옵션] 컨테이너명
  • docker ps 명령어를 통해 STATUS가 Up으로 변경된 것을 확인할 수 있습니다.

컨테이너 접속하기

docker attach 명령어를 사용하여 동작 중인 컨테이너에 접속합니다.

  • 명령어: docker [container] attach [옵션] 컨테이너명
  • 활용: 실행 중인 애플리케이션 컨테이너에 단순한 조회 작업 수행 시 유용.
  • 종료:
    • Bash 쉘에서 exit 또는 ctrl+D를 입력하면 컨테이너가 정지됩니다.
    • ctrl + p + q를 입력하면 컨테이너를 정지하지 않고 빠져나올 수 있습니다.

컨테이너 삭제하기

docker rm 명령어를 사용하여 컨테이너를 삭제합니다.

  • 명령어: docker [container] rm [옵션] 컨테이너명
  • -f 옵션을 사용하면 동작 중인 컨테이너도 강제로 삭제할 수 있습니다 (SIGKILL 시그널 전송).

컨테이너를 정지할 때 함께 삭제하기

docker run --rm 옵션을 사용하면 컨테이너 실행이 끝나면 자동으로 파기됩니다.

  • 명령어: docker [container] run --rm [옵션] 이미지명
  • 정지된 컨테이너를 디스크에 유지할 필요가 없을 때 유용합니다.

실행 중이지 않은 모든 컨테이너 파기하기

docker container prune 명령어를 사용하여 실행 중이 아닌 모든 컨테이너를 일괄 삭제하고 저장 공간을 확보합니다.

  • 명령어: docker container prune [옵션]

run과 start의 차이

  • docker container run IMAGE_ID: 이미지를 기반으로 새로운 컨테이너를 만듭니다 (생성 + 시작).
  • docker container start CONTAINER_ID: 기존에 실행되었던 컨테이너를 실행시킵니다.
  • docker container stop CONTAINER_ID: 기존에 실행되었던 컨테이너를 중지시킵니다.

컨테이너 정지하기

docker stop 명령어를 사용하여 실행 중인 컨테이너를 정지합니다.

  • 명령어: docker [container] stop 컨테이너명
  • -t 옵션으로 정지 대기 시간을 지정할 수 있습니다 (예: -t 10은 10초 후 정지).
  • SIGKILL 시그널을 전송하여 컨테이너 프로세스를 정지합니다.

컨테이너 재시작하기

docker restart 명령어를 사용하여 컨테이너를 다시 시작합니다 (stop + start).

  • 명령어: docker [container] restart 컨테이너명
  • 기존 컨테이너 프로세스를 정지하고 새로운 컨테이너 프로세스를 시작합니다.
  • 컨테이너 동작에는 영향을 주지 않고 호스트의 PID만 변경됩니다.

외부에서 컨테이너 안의 명령 실행

docker exec 명령어를 사용하여 컨테이너가 실행되고 있는 상태에서만 컨테이너 내부의 명령을 실행할 수 있습니다.

  • 명령어: docker [container] exec 컨테이너명 실행명령
  • 활용: 이미 실행된 컨테이너에 apt-get, yum 등으로 패키지를 설치하거나 각종 daemon을 실행할 때 유용합니다.
  • 주의: 정지된 상태에서는 사용할 수 없습니다.

컨테이너 표준 출력 호스트에 연결하기

docker logs 명령어를 사용하여 현재 실행 중인 특정 Docker 컨테이너의 출력 내용 (STDOUT과 STDERR)을 확인합니다.

  • 명령어: docker [container] logs 컨테이너명
  • -f 옵션 사용 시 새로 출력되는 내용을 계속 출력합니다.

컨테이너와 호스트 간 파일 복사하기

docker cp 명령어를 사용하여 실행/정지 상태의 컨테이너와 호스트 간에 파일을 복사합니다.

  • 명령어:
    • docker [container] cp 컨테이너명:원본파일 대상파일 (컨테이너에서 호스트로)
    • docker [container] cp 원본파일 컨테이너명:대상파일 (호스트에서 컨테이너로)

컨테이너 사용 현황 확인하기

docker stats 명령어를 사용하여 컨테이너들의 시스템 리소스 사용 현황을 실시간으로 확인합니다.

  • 명령어: docker [container] stats 컨테이너명
  • 리눅스 계열 운영체제의 top 명령어와 비슷한 역할을 합니다.

컨테이너에서 변경된 파일 확인

docker diff 명령어를 사용하여 컨테이너가 실행되면서 변경된 파일 및 디렉토리 목록을 출력합니다.

  • 명령어: docker [container] diff 컨테이너명
  • 출력 내용:
    • A: 추가된 파일
    • C: 변경된 파일
    • D: 삭제된 파일
  • 비교 기준: 컨테이너를 생성한 이미지 내용

컨테이너 세부 정보 확인하기

docker inspect 명령어를 사용하여 컨테이너의 세부 정보를 출력합니다 (할당 IP 주소 등).

  • 명령어: docker [container] inspect 컨테이너명
  • 컨테이너 이름은 도커에서 자동 지정됩니다.

컨테이너의 변경사항을 이미지로 생성

docker commit 명령어를 사용하여 컨테이너의 변경사항을 새로운 이미지로 생성합니다.

  • 명령어: docker [container] commit [옵션] 컨테이너명 이미지명[:태그]
  • 주요 옵션:
    • -a: Author (작성자 정보). 예: "Jiwoong Park <jwpark12@sungshin.ac.kr>"
    • -m: Commit 메시지. 예: "apt update & apt install vim"
728x90