본문으로 건너뛰기
홈
기술
기술 전체
프로그래밍68
컴퓨터 과학63
AI48
웹 개발36
인프라33
데이터31
소프트웨어 공학18
소개
← 목록으로인프라 › 컨테이너 › Docker

5. docker image 조작

목차

docker image 조작

이미지 다운로드(docker image pull)

$ docker image pull [옵션] 이미지명[:태그명]

ex)

## CentOS 7버전을 다운로드 받을 경우
$ docker image pull centos:7

## 모든 태그를 얻을경우 -a 옵션 사용
$ docker image pull -a centos

## x
$ docker image pull gcr.io.tensorflow/tensorflow

이미지 업로드(docker image push)

  • docker hub에 이미지를 업로드 할 때 사용
$ docker image push 이미지명[:태그명]

이미지 목록 표시(docker image ls)

다운받은 이미지 목록을 표시하려면 docker image ls 명령을 사용한다.

docker image ls [option] [repository name]

사용옵션

옵션설명
—all, -a모든 이미지를 표시
—digests다이제스트를 표시할지 말지
—no-trunc결과를 모두 표시
—quiet, -qDocker 이미지 ID만 표시
옵션설명
–all, -a모든 이미지를 표시
–digests다이제스트를 표시할지 말지
–no-trunc결과를 모두 표시
–quiet, -qDocker 이미지 ID만 표시
## 모든 이미지를 표시
$ docker image ls --all
$ docker image ls -a

## 다이제스트 표시할지 말지
$ docker image ls --digests

## 결과를 모두 표시
$ docker image ls --no-trunc

## Docker 이미지 ID만 표시
$ docker image --quiet
$ docker image -q

dockerls.PNG

이미지 상세정보 확인 (docker image inspect)

## CentOS의 이미지 상세정보 호출
$ docker image inspect [옵션] [이미지명]

ex)

$ docker image inspect centos:7

—foramt 옵션을 추가하면 특정 정보를 얻을 수 있다.

CentOs의 이미지 상세정보가 표시

dockerimage-inspect.PNG

–foramt 옵션을 추가하면 특정 정보를 얻을 수 있다.

$ docker image inspect --format="{{.Os}}" centos:7
linux
$ docker image inspect --format="{{.Size}}" centos:7
201782942

image-inspect-format.PNG

이미지 태그 설정 (docker image tag)

이미지에 표식이 되는 태그를 붙일 경우 사용. tag를 사용하면 누가만든 이미지인지 바로 알 수 있다.

$ docker image tag 이미지명
  • nginx의 이름을 paikscheol/webserver로 바꿔보자
$ docker image tag nginx paikscheol/webserver

docker-image-tag.PNG

이미지 검색(docker search)

  • docker hub에 공개되어 있는이미지를 검색할 경우 사용
$ docker search [옵션] <검색 키워드>
  • 지정할 수 있는 주요 옵션
옵션설명
—no-trunc결과를 모두 표시
—limitn건의 검색 결과를 표시
—filter=stars=n즐겨찾기의 수(n 이상)를 지정
옵션설명
–no-trunc결과를 모두 표시
–limitn건의 검색 결과를 표시
–filter=stars=n즐겨찾기의 수(n 이상)를 지정
$ docker search nginx

docker-search.PNG

도커 이미지 삭제 (docker image rm)

  • 작성한 이미지를 삭제할 수 있다.
$ docker image rm [옵션] 이미지명 [이미지명]
옵션설명
—force, -f이미지를 강제로 삭제
—no-prune중간 이미지를 삭제하지 않음
옵션설명
–force, -f이미지를 강제로 삭제
–no-prune중간 이미지를 삭제하지 않음
$ docker image rm hello-world -f

docker-image-f.PNG

  • 사용하지 않는 Docker image를 삭제할 경우
$ docker image prune [옵션]
옵션설명
—force, -f이미지를 강제로 삭제
—all, -a사용하지 않는 이미지를 모두 삭제
옵션설명
–force, -f이미지를 강제로 삭제
–all, -a사용하지 않는 이미지를 모두 삭제

Docker hub 로그인(docker login)

$ docker login [옵션] [서버]
  • docker repository에 로그인할 때 사용
옵션설명
—password, -p비밀번호
—username, -u사용자명
옵션설명
–password, -p비밀번호
–username, -u사용자명

이미지 이름·태그·다이제스트 읽기

nginx:stable은 레지스트리의 nginx 저장소에 있는 stable 태그를 가리킨다. 태그는 사람이 붙이는 이동 가능한 이름이므로 시간이 지나면 다른 이미지 내용으로 재지정될 수 있다. sha256:... 다이제스트는 게시된 이미지의 내용 식별에 쓰인다. 빌드와 배포를 재현해야 한다면 태그를 고정하고, 더 엄격하게는 검증한 다이제스트를 사용한다. 다만 다이제스트를 고정하면 보안 패치가 자동 반영되지 않으므로 갱신 절차도 필요하다.

docker image pull nginx:stable
docker image inspect nginx:stable --format '{{json .RepoDigests}}'
docker image inspect nginx:stable --format '{{.Os}}/{{.Architecture}}'
docker image ls nginx

inspect의 RepoDigests는 레지스트리에서 가져온 이미지의 다이제스트를 보여 준다. Os와 Architecture는 이미지 플랫폼을 확인하는 데 도움이 된다. 원문 docker image --quiet는 목록 명령이 빠진 예시이고, ID만 보고 싶다면 docker image ls --quiet를 실행한다. --format이 올바른 옵션 이름이며 원문의 --foramt는 오타다.

태그를 붙인 뒤 게시하기

docker image tag nginx:stable registry.example.test/team/web:1.0
docker image ls registry.example.test/team/web
# 조직의 실제 레지스트리와 권한을 확인한 뒤에만 push
# docker login registry.example.test
# docker image push registry.example.test/team/web:1.0

tag는 이미지를 복사해 두 배로 저장하는 작업이 아니라 같은 로컬 이미지에 새 참조 이름을 붙인다. push는 레지스트리에 업로드하는 별도 동작이다. 로컬에서 태그만 붙인 뒤 다른 서버에서 이미지를 사용할 수 있다고 생각하면 실패한다. 개인 또는 조직 레지스트리 이름, 접근 권한, 이미지 출처를 확인한 뒤 업로드한다. docker search의 인기 지표만으로 이미지를 신뢰해서는 안 된다. 공식 이미지 여부, 유지 관리 상태, 태그 정책과 취약점 업데이트를 확인한다.

flowchart LR
  R[원격 이미지] -->|pull| L[로컬 이미지 내용]
  L -->|tag| T[새 로컬 이름]
  T -->|push| P[원격 레지스트리]
  L -->|run| C[컨테이너]

삭제 전 참조 확인하기

docker image rm은 로컬 이미지 참조를 제거한다. 어떤 컨테이너가 이미지를 사용하는 동안 삭제가 막힐 수 있으며, -f로 강제 삭제한다고 실행 중 컨테이너의 데이터 정리까지 안전하게 끝난다는 뜻은 아니다. docker image prune은 기본적으로 매달리지 않은(dangling) 이미지를 지우고 -a는 컨테이너가 참조하지 않는 이미지를 더 넓게 지운다. 실습 이외의 서버에서는 먼저 docker system df -v와 docker ps -a로 용량·참조를 확인한다. 목록에 보이는 태그 하나를 지우는 것과 실제 저장 계층이 해제되는 것은 다를 수 있다.

목적명령확인
이미지의 플랫폼·다이제스트 확인docker image inspect IMAGE원하는 아키텍처와 레지스트리 출처
새 배포 이름 지정docker image tag SRC DSTimage ls에 두 이름 표시
정리 후보 검토docker image ls, docker system df -v사용 중 컨테이너와 공유 계층
미사용 이미지 정리docker image prune삭제될 목록과 디스크 공간

docker login -p 비밀번호는 인자가 셸 기록과 프로세스 목록에 드러날 수 있다. 자동화에서는 레지스트리 토큰을 표준 입력으로 전달하는 --password-stdin과 적절한 자격 증명 저장소를 사용한다. 이 글에 나온 오래된 CentOS 7 이미지는 과거 명령 예시이며, 새 서비스의 베이스 이미지는 유지 보수 중인 배포판을 선택해야 한다.

참고: 이미지 빌드·태그·게시, docker image CLI, docker login.

같은 카테고리의 글