본문 바로가기
DevOps/Docker

Docker 이미지 제어, 기본으로 알아야하는 명령과 옵션

by 마이자몽 🌻♚ 2021. 10. 6.

Docker 이미지 제어

이 글에서는 Docker 이미지 제어하는데 필수로 알아야할 기본적인 명령과 옵션들을 소개한다.

 

원하는 프로그램을 실행시키기 위해서는 컨테이너를 생성해야한다. 이런 컨테이너를 생성하기 위해서는 이미지가 필요하다. Docker에서 이미지는 컨테이너를 생성하는데 있어서 사용되는 Base, 설계도, 틀이 된다.

 

Java와 같은 프로그래밍 언어를 사용해보셨다면 클래스와 객체의 관계와 비슷하다.

 

 

Docker CLI command

Docker를 설치했다면 Docker CLI command Tool도 함께 설치가 되었을 것입니다.
이는 Command Line 형태로 Docker를 제어할 수 있는 툴 입니다.

 

 

--help

Docker CLI command를 사용하는 방법은 Docker Docs 문서를 통해 확인하는 것이 가장 정확한 방법인데... command의 "--help" 옵션을 사용하면 기본적인 사용방법이나 옵션정도는 확인할 수 있다. 매우 유용하게 사용될 뿐만 아니라, Docker CLI 말고 다른 CLI 툴에서도 이런 명령이 제공되어 "--help"명령으로 확인하는 것을 습관화하면 다른 CLI툴도 편하게 사용할 수 있게 될 겁니다.

 

$ docker image --help

기본적으로 "--help" 옵션을 통해 어떤 명령을 사용할 수 있는지 확인할 수 있다.

 

 

$ docker image pull --help

가장 상위 명령에서만 사용할 수 있는 것이 아니라 세부 command에 대한 사용법도 "--help"명령을 사용해서 확인할 수 있다. 이런 식으로 세부 내용을 확인해가면서 CLI 툴을 사용하다보면 금방 익숙해질 수 있다.

 

 

Management Command와 Alias Command

$ docker --help

Docker CLI Tool에는 Management Command로 그룹화되어 있는 명령들이 있고 일반 Command가 있다. 이전에는 Management Command가 따로 그룹화 되어 있지 않았으나... Docker CLI 1.13부터 관리적인 문제를 해결하고 손쉬운 명령 사용을 위해 명령을 논리적으로 그룹화 했다. 그래서 대부분의 일반 Command에는 Management Command로 실행하는 명령을 간단하게 줄인 별칭같은 명령이다.

 

 

예시

# 이미지 받기
$ docker image pull NAME[:TAG|@DIGEST]
$ docker pull NAME[:TAG|@DIGEST]

# 이미지 조회
$ docker image ls
$ docker images

# 이미지 삭제
$ docker image rm IMAGE [IMAGE...]
$ docker rmi IMAGE [IMAGE...]

위의 예시는 모두 같은 작업을 하는 명령을 Management Command와 일반 Command로 작성한 명령들이다. 그냥 명령만 봤을 때 비슷한 명령들이 있어 일반 Command가 어떤 Management Command와 연결이되는지 어느정도는 숙지하고 사용해야 혼란을 줄일 수 있다. 아래 명령이 대표적인 예시이다.

 

 

# 모든 이미지 출력
$ docker image ls

# 이미지 출력이 안된다.
$ docker images ls

위에 처럼 "docker image ls" 명령을 사용했을 때는 모든 이미지가 출력 되었는데... "docker images ls"로 명령을 사용했을 때는 아무 이미지가 출력되지 않는 것을 확인할 수 있을 것이다. "docker images"는 "docker image ls"의 별칭처럼 사용되는 명령이다. 그래서 "docker images ls"는 "docker image ls ls" 형태로 명령을 실행하는 것이기 때문에 ls 혹은 list로 되어 있는 이미지가 없어 아무 이미지가 목록에 출력되지 않는 것이다.

 

 

 

Docker Hub(Registry)

Docker CLI command를 사용해서 앞으로 이미지를 받고, 받은 이미지로 컨테이너를 생성합니다. 이렇게 사용되는 이미지는 물론 로컬에 있는 이미지를 사용하지만... 로컬에 있는 이미지는 어떻게 받아오는 것일까요? 물리적인 파일을 Docker CLI command로 Load하는 것도 하나의 방법이지만... 누군가가 배포한 이미지라면... 파일을 매번 다운받아서 사용해야하는 번거러움이 있습니다. 그래서 Registry를 지정해서 command만 사용하면 자동으로 이미지를 다운받아서 사용합니다. Docker 이미지 제어하는데 있어서 매우 중요한 이미지 관리소다.

 

Registry는 외부에 공개되지 않고 Private할 수도 있고... Docker HubQuay.io와 같은 Public Registry를 사용할 수 있다. Docker에서 제공하는 Registry가 Docker Hub이고 Docker를 설치할 때 설정되는 Default Registry이다. 이미지를 pull해서받을 때 기본 Registry를 꼭 설정해야 해당 Registry에서 받을 수 있는 것은 아니다. 예를 들어 Docker Hub가 Default Registry로 등록되어 있지만... Private Registry에서 이미지의 전체 URL 경로를 입력해서 받을 수도 있고 그 반대로도 가능하다. Default Registry 설정은 단지 URL 주소를 제외한 Repository부터 간략하게 CLI command 입력하기 위해 설정하는 것이다.

 

예시)

  • docker pull registry.hub.docker.com/library/busybox:latest
  • docker pull busybox:latest

Default Registry가 Docker Hub인 경우 위 두 명령은 같은 이미지를 받는다.

Docker Hub에 들어가서 검색해보면 여러 이미지가 결과로 나온다.
"Official Image" 태그가 붙어 있는 이미지들은 공식 이미지들이고 일반 사용자들도 생성한 이미지를 배포할 수 있다.

 

 

Docker 이미지 제어 명령

Docker 이미지 제어에 기본적으로 알아야하는 기능은 아래와 같다.

  • 이미지 받는 방법
  • 이미지 조회 하는 방법
    • 로컬
    • 외부 Repository
    • 이미지 세부 정보
  • 이미지 삭제하는 방법
  • 이미지 태깅

제어에 필요한 여러 기능들이 많지만... 이미지를 친숙하게 다루기 위해 일단 기본적인 내용을 아래에서 다룬다.

 

 

Docker 이미지 받기

docker pull

 

"docker pull" 명령은 Registry로부터 이미지를 로컬로 받는 명령이다.

$ docker pull centos:8

or

$ docker image pull centos:8
  • NAME[:TAG|@DIGEST] 형태로 다운 받을 수 있다.
    • 여기서 태그는 이미지에 대한 추적을 위한 버전이다.
    • Tag가 없는 경우 가장 최신 버전인 latest 태그로 이미지를 받는다.
    • latest로 이미지를 사용하는 것보다는 특정 버전으로 되어 있는 태그를 사용하는 것을 권장한다.

 

 

-a 옵션

$ docker pull -a centos
  • "-a" 혹은 "--all-tags" 옵션은 Repository의 전체 태그된 이미지를 받는다.
    • 위 예시의 경우 centos Repository의 전체 태그를 받는다.

 

 

 

Docker 이미지 조회

docker images

로컬에 있는 이미지들의 목록을 볼 수 있는 명령이다.

$ docker images

or

$ docker image ls

 

 

--digests 옵션

digest는 이미지를 해시함수에 돌려서 얻은 해시 값입니다. Docker 이미지 제어를 직접적으로 하는 것은 아니고... 내부적으로 이미지 자체에 대한 변조 방지를 위한 보안을 강화하기 위해 digest 값을 사용합니다.
해시에 대한 자세한 내용은 [CS/보안] - Hash 단방향 암호화 기법 에서 확인할 수 있습니다.

 

$ docker images --digests

  • diest에 대한 정보를 확인할 수 있다.
    • 태그가 다르더라도 같은 이미지에 대해서는 같은 digest를 갖고 있는 것을 확인할 수 있다.
    • Docker 이미지 제어(pull, push or Dockerfile FROM 절)하는데 digest를 활용할 수 있다.

 

 

--format 옵션

format 옵션을 사용하면 원하는 형태로 이미지 목록을 출력할 수 있고 아래와 같은 요소를 사용할 수 있다.

  • ID
  • Repository
  • Tag
  • Digest
  • CreateSince
  • CreatedAt
  • Size

 

$ docker images --format "{{.ID}}: {{.Repository}} - {{.Tag}}"

 

  • 스크립트를 작성하거나 개발에 특정 형태로 이미지 목록 출력이 필요할 때 해당 옵션을 사용할 수 있다.

 

 

-q 옵션

$ docker images -q

 

  • 이미지 ID만 출력한다.
  • 이미지 전체를 삭제할 때 해당 옵션을 사용하면 편리하게 삭제할 수 있다.
    • docker rmi $(docker images -q)

 

 

docker search

Registry에 존재하는 이미지를 조회하는 명령이다.

 

$ docker search ubuntu




docker inspect

이미지의 세부 정보를 확인할 수 있다.

 

$ docker inspect centos:8
  • 이미지의 세부 정보를 확인할 수 있다.
  • JSON 형태로 결과를 출력한다.

 

 

Docker 이미지 삭제

docker rmi

이미지를 삭제하는 명령이다.

 

$ docker rmi centos:8

or

$ docker image rm centos:8
  • 공백을 기준으로 나열해서 여러 이미지를 동시에 삭제할 수 있다
  • 이미지의 ID를 사용해서 삭제할 수 있다.

 

 

--force 옵션

이미지를 사용해서 생성된 컨테이너가 있으면 이미지 삭제가 안된다. 생성한 컨테이너가 있더라도 강제로 이미지를 삭제하기 위해 해당 옵션을 사용할 수 있다.

 

$ docker rmi centos:8 --force
  • 컨테이너가 실행중인 상태에서 삭제가 안된다.
    • 생성되어 있으나 종료된 컨테이너는 삭제가 가능하다.

 

 

Docker 태깅

docker tag

Docker 이미지 제어에 있어 버전 관리를 하기 위해서 태그를 사용하는데... 같은 이미지더라도 다르게 태깅해서 관리하는 경우(centos:8, centos:8.1, latest 등)도 많다. 주로 이미지를 배포하기 전에 이미지를 태깅하는 작업을 한다.

 

$ docker tag centos:8 test:1

or

$ docker image tag centos:8 test:1

  • docker tag SOURCE_IMAGE[:TAG] TARGET_IMAGE[:TAG] 형태로 사용된다.
  • 태그를 사용하지 않으면 latest로 태깅된다.

 

 

마무리

Docker 이미지 제어하는데 있어서 배포, 필터링, 이미지 아카이빙 등 아직 다루지 않은 내용도 많다. 이번 글에서는 Docker 이미지 제어하는 기본적인 방법들에 대해서 알아봤고 앞으로의 다른 글들에서 아직 다루지 못한 Docker 이미지 제어 기능들에 대해서 알아보겠습니다.

태그

,

댓글0