4 minute read

docker pull: 이미지 내려받기

도커 이미지는 기본적으로 도커 허브 레지스트리로 자동 지정되고, 특정 레지스트리를 수동으로 지정해서 받을 수도 있다.

1
docker [IMAGE] pull [OPTIONS] name[:TAG | @IMAGE_DIGEST]

실제 예시를 통해 자세히 알아보자.

1
2
3
4
5
6
7
$ docker pull debian
Using default tag: latest # 이미지 명 뒤에 태그가 없으면 latest로 지정됨
latest: Pulling from library/debian # library: 도커 허브의 공식 이미지가 저장되어있는 특별한 네임스페이스
1e4aec178e08: Pull complete # 도커 허브에서 제공된 이미지의 distribution hash.
Digest: sha256:43ef0c6c3585d5b406caa7a0f232ff5a19c1402aeb415f68bcd1cf9d10180af8 # Digest는 원격 도커 레지스트리(도커 허브)에서 관리하는 이미지의 고유 식별값
Status: Downloaded newer image for debian:latest # 다운로드한 이미지 정보가 로컬에 저장
docker.io/library/debian:latest # docker.io는 도커 허브에서 받음을 의미. 나머지는 <NAMESPACE>/<IMAGE_NAME>:<TAG>

다음은 옵션이다.

  • -all-tags, -a: 저장소에 태그로 지정된 이미지를 모두 다운로드
  • --disable-content-trust: 이미지 검증 작업 건너뛰기. Docker Contetns Trust (DCT)를 이용하여 이미지 신뢰성 검증
  • --platform: 플랫폼 지정, 윈도우 도커에서 리눅스 이미지를 받아야 하는 경우 사용
  • --quite, -q: 이미지 다운로드 과정에서 화면에 나타나는 상세 출력 숨김

docker image save: 도커 이미지 파일로 관리

docker image save/docker save는 도커 원본 이미지의 레이어 구조까지 포함한 복제를 수행하여 tar 파일로 이미지를 저장한다. 도커 허브에서 이미지를 받아 내부망으로 이전하는 경우, 신규 애플리케이션 서비스를 위해 Dockerfile로 새롭게 생성한 이미지를 저장 및 배포하는 경우, 컨테이너를 commit하여 생성한 이미지를 저장 및 배포하는 경우, 개발 및 수정한 이미지 등등에서 사용한다.

1
2
3
# 도커 이미지를 tar로 저장
docker image save [OPTIONS] IMAGE [IMAGE...]
docker image load [OPTIONS]

예시:

1
2
3
4
5
6
7
8
$ docker images
REPOSITORY   TAG       IMAGE ID       CREATED       SIZE
httpd        latest    3a4ea134cf8e   13 days ago   145MB
debian       latest    54e726b437fb   13 days ago   124MB
mysql        5.7       be16cf2d832a   3 weeks ago   455MB
$ docker image save mysql:5.7 > test-mysql57.tar
$ ls
test-mysql57.tar

불러올 때는 다음과 같이 docker image load를 사용한다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
$ docker images # image 확인
REPOSITORY   TAG       IMAGE ID       CREATED       SIZE
httpd        latest    3a4ea134cf8e   13 days ago   145MB
debian       latest    54e726b437fb   13 days ago   124MB
$ docker image load < test-mysql57.tar # 불러오기
c233345f327a: Loading layer [==================================================>]    145MB/145MB
9117b1e53ba3: Loading layer [==================================================>]  11.26kB/11.26kB
1256ef6b8ce9: Loading layer [==================================================>]  2.385MB/2.385MB
9e296bbbda1f: Loading layer [==================================================>]  13.95MB/13.95MB
75a9fcfd26c5: Loading layer [==================================================>]  7.168kB/7.168kB
4104fbb529d5: Loading layer [==================================================>]  3.072kB/3.072kB
6740e92960ea: Loading layer [==================================================>]  79.47MB/79.47MB
912dde462543: Loading layer [==================================================>]  3.072kB/3.072kB
d34e99e3e6e5: Loading layer [==================================================>]  230.6MB/230.6MB
38c885e9f124: Loading layer [==================================================>]  17.41kB/17.41kB
bc7ce92d7b90: Loading layer [==================================================>]  1.536kB/1.536kB
Loaded image: mysql:5.7
$ docker images # 새롭게 추가된 mysql
REPOSITORY   TAG       IMAGE ID       CREATED       SIZE
httpd        latest    3a4ea134cf8e   13 days ago   145MB
debian       latest    54e726b437fb   13 days ago   124MB
mysql        5.7       be16cf2d832a   3 weeks ago   455MB

docker image rm/docker rmi: 이미지 삭제

1
2
3
4
5
# 정식명령
docker image rm [OPTIONS] IMAGE [IMAGE...]

# 압축명령
docker rmi [OPTIONS] IMAGE [IMAGE...]

예제.

1
2
3
4
5
6
7
8
9
10
11
12
# latest가 아닌 이상 태그명을 명시해야 함
$ docker image rm mysql
Error: No such image: mysql
$ docker images
REPOSITORY   TAG       IMAGE ID       CREATED       SIZE
httpd        latest    3a4ea134cf8e   13 days ago   145MB
debian       latest    54e726b437fb   13 days ago   124MB
mysql        5.7       be16cf2d832a   3 weeks ago   455MB
$ docker image rm mysql:5.7
Untagged: mysql:5.7
Deleted: sha256:be16cf2d832a9a54ce42144e25f5ae7cc66bccf0e003837e7b5eb1a455dc742b
...

삭제하다보면 Error response from daemon: conflict: unable to remove repository reference ...라고 나오며 삭제가 안될 때가 있다. 컨테이너가 아직 동작 중이라 그런 것이니 중지하고 삭제한 후 다시 시도하자

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
$ sudo docker image rm nvidia/cuda:11.8.0-base-ubuntu20.04
Error response from daemon: conflict: unable to remove repository reference "nvidia/cuda:11.8.0-base-ubuntu20.04" (must force) - container 0508bd8ee6a2 is using its referenced image eb8718baffe6
$ sudo docker stop 0508bd8ee6a2 # 동작 중이라면
0508bd8ee6a2
$ sudo docker rm 0508bd8ee6a2
0508bd8ee6a2
$ sudo docker image rm nvidia/cuda:11.8.0-base-ubuntu20.04
Untagged: nvidia/cuda:11.8.0-base-ubuntu20.04
Untagged: nvidia/cuda@sha256:dc9cda1c8bf3d76d4140fee288c107e2b81774d167a6a8435090b8f0f1f28f52
Deleted: sha256:eb8718baffe6af11250f89df236ae649d9929b7885316b0dc4c9b321fb7f9168
Deleted: sha256:dbc2dc7aa95d5c973ac1a4b5259c210f4baf34ab111c0f2ea3f8ff567e28276c
Deleted: sha256:f997035a803c9c16429d2d66a17e1754f6e2e081dded27fdf493ab833fc0d426
Deleted: sha256:63ffe2d7ffdee0912313491cb180dab07bc490cd817e458e0030ed2af8fec8f0
Deleted: sha256:13c16e3020f4fcd4960579f2694feaef3a7cfb75e0e14dace0092f8cd6a4d2e8
Deleted: sha256:d543b8cad89e3428ac8852a13cb2dbfaf55b1e10fd95a9753e51faf393d60e81

또한, -f, --force 옵션을 통해 태그가 지정된 모든 이미지를 삭제할 수 있다. 이 때 이미지 ID는 전체가 아닌 일부만 써도 상관없다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
$ docker images
REPOSITORY     TAG       IMAGE ID       CREATED       SIZE
debian-httpd   2.0       3a4ea134cf8e   13 days ago   145MB
httpd          latest    3a4ea134cf8e   13 days ago   145MB
debian         latest    54e726b437fb   13 days ago   124MB
$ docker image rm -f 3a4e
Untagged: debian-httpd:2.0
Untagged: httpd:latest
Untagged: httpd@sha256:db2d897cae2ad67b33435c1a5b0d6b6465137661ea7c01a5e95155f0159e1bcf
Deleted: sha256:3a4ea134cf8e081516a776ce184dedc28986f941ed214b9012dc888049480f5a
Deleted: sha256:019e5c44c73d76bc67f1618d02f9535348180094293dc4ddcfe70894209fd9ed
Deleted: sha256:eb991c200c9af34ef15003013e10c8ce8e143991de9780f2d0c5370041f3cf19
Deleted: sha256:127d0bec4c754ad1d28fcb982b114444cbc9aca95a6f5a7d74560e61a109a2fb
Deleted: sha256:c5c018d684454c7d5056c7f72a970aac612a515e70f3c858cba3978039a26248
Deleted: sha256:4695cdfb426a05673a100e69d2fe9810d9ab2b3dd88ead97c6a3627246d83815
$ docker images
REPOSITORY   TAG       IMAGE ID       CREATED       SIZE
debian       latest    54e726b437fb   13 days ago   124MB
1
2
3
4
5
6
7
8
# 이미지 전체 삭제
docker rmi $(docker images -q) # docker images -q: Only show image IDs

# 특정 이미지 이름이 포함된 것만 삭제
docker rmi $(docker images | grep debian)

# 특정 이미지 이름을 제외하고 삭제
docker rmi $(docker images | grep -v centos)

docker image prune은 다운로드한 이미지 중 컨테이너에 연결되지 않은 이미지를 제거하는데 사용된다.

1
2
3
4
5
# -a 옵션은 사용 중이 아닌 모든 이미지 제거
docker image prune -a

# --filter until=<timestamp>를 통해 필터링 옵션을 줄 수 있다.
# docker image prun -a -f -filter "until=48h" # -f: Do not prompt for confirmation

docker tag: 이미지/태그 명 변경

도커 이미지의 태그명은 다음과 같이 변경한다.

1
$ docker tag SOURCE_IMAGE[:TAG] TARGET_IMAGE[:TAG]

Categories:

Updated:

Leave a comment