목차
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, -q | Docker 이미지 ID만 표시 |
| 옵션 | 설명 |
|---|---|
| –all, -a | 모든 이미지를 표시 |
| –digests | 다이제스트를 표시할지 말지 |
| –no-trunc | 결과를 모두 표시 |
| –quiet, -q | Docker 이미지 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

이미지 상세정보 확인 (docker image inspect)
## CentOS의 이미지 상세정보 호출
$ docker image inspect [옵션] [이미지명]
ex)
$ docker image inspect centos:7
—foramt 옵션을 추가하면 특정 정보를 얻을 수 있다.
CentOs의 이미지 상세정보가 표시

–foramt 옵션을 추가하면 특정 정보를 얻을 수 있다.
$ docker image inspect --format="{{.Os}}" centos:7
linux
$ docker image inspect --format="{{.Size}}" centos:7
201782942

이미지 태그 설정 (docker image tag)
이미지에 표식이 되는 태그를 붙일 경우 사용. tag를 사용하면 누가만든 이미지인지 바로 알 수 있다.
$ docker image tag 이미지명
- nginx의 이름을 paikscheol/webserver로 바꿔보자
$ docker image tag nginx paikscheol/webserver

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

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

- 사용하지 않는 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 DST | image ls에 두 이름 표시 |
| 정리 후보 검토 | docker image ls, docker system df -v | 사용 중 컨테이너와 공유 계층 |
| 미사용 이미지 정리 | docker image prune | 삭제될 목록과 디스크 공간 |
docker login -p 비밀번호는 인자가 셸 기록과 프로세스 목록에 드러날 수 있다. 자동화에서는 레지스트리 토큰을 표준 입력으로 전달하는 --password-stdin과 적절한 자격 증명 저장소를 사용한다. 이 글에 나온 오래된 CentOS 7 이미지는 과거 명령 예시이며, 새 서비스의 베이스 이미지는 유지 보수 중인 배포판을 선택해야 한다.