도커/개념 및 실습

03장-1, docker 명령 - 이미지 다운로드

Jaden Park 2021. 5. 31. 14:45

도커 허브(Docker Hub)

  • 도커 허브는 도커의 기본 이미지 저장소
  • 도커 허브에 저장된 이미지의 이름은 "저장소이름:태그" 형태
    • 오피셜 이미지의 "저장소 이름"은 단순히 저장소의 이름으로 나타내며, 그 외의 이미지들은 "허브의 ID/저장소이름" 으로 되어있음.
    • 따라서 이미지를 검색할 때 사용자 허브 ID를 검색하거나 저장소 이름으로 검색하면 원하는 이미지를 찾을 수 있음.
  • 도커 허브에서 이미지를 검색하거나 특정 이미지를 사용하여 컨테이너를 실행하는 방법에 대해서도 알 수 있다.
  • 도커 허브의 기본적인 기능은 이미지의 공유
  • 따라서 도커 회사가 개발한 오피셜 이미지 외에도 사용자들이 개발한 이미지들도 업로드 되어있고 다운로드 받을 수 있다.



이미지 검색 및 다운로드

이미지를 다운로드하려면 먼저 검색할 수 있어야 한다. 물론 이미지의 이름을 알고 있다면 바로 다운로드할 수도 있다.

docker search

  • docker search 명령을 사용하여 이미지를 검색할 수 있다.
  • TERM에 키워드를 지정하면 저장소 이름, 허브의 ID, 설명 등에 포함된 글자 기준으로 결과를 나타낸다.

명령어 옵션 및 사용법

[root@docker ~]# docker search --help

Usage:  docker search [OPTIONS] TERM

Search the Docker Hub for images

Options:
  -f, --filter filter   Filter output based on conditions provided
      --format string   Pretty-print search using a Go template
      --limit int       Max number of search results (default 25)
      --no-trunc        Don't truncate output

 

centos 키워드를 사용하여 이미지 검색 결과

[root@docker ~]# docker search centos
NAME                               DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
centos                             The official build of CentOS.                   6568      [OK]       
ansible/centos7-ansible            Ansible on Centos7                              134                  [OK]
consol/centos-xfce-vnc             Centos container with "headless" VNC session…   129                  [OK]

...
필드 설명
NAME 이미지의 저장소 이름
DESCRIPTION 이미지에 대한 설명
STARS 이미지에 대한 평가점수
OFFICIAL 공식 이미지 여부
AUTOMATED 자동화 빌드 여부
  • OFFICIAL이 체크된 이미지의 NAME에는 단순히 centos 이지만 그 외에는 ansible/centos7-ansible과 같이 허브의 ID가 추가되어 있다.
  • 이는 사용자가 다수의 이미지 저장소를 가질 수 있고, 이미지를 업로드 할 때 인증에 필요한 절차로 사용되기 때문이다.
  • 또한, docker search 명령은 이미지 저장소에 저장되어 있는 태그까진 알 수 없다. 따라서 원하는 이미지를 정확하게 검색하려면 도커 허브를 사용해야 한다.

 

docker pull

  • docker pull 명령은 이미지를 다운로드할 때 사용.
[root@docker ~]# docker pull --help

Usage:  docker pull [OPTIONS] NAME[:TAG|@DIGEST]
  • NAME 에는 docker search 명령의 결과의 NAME 과 같음.
  • 다만 추가로 TAG 또는 @DIGEST 를 사용하는데, 이는 이미지 저장소에 있는 실제 이미지를 구분하는 기준.
  • TAG는 이미지의 태그로 보통 버전을 나타내거나 특성을 나타냄.
  • @DIGEST 는 해시처럼 이미지의 무결성을 검증하는데 사용할 수 있지만 보통 TAG 를 더 많이 사용
  • 만약 이미지를 다운로드 받을 때 두 개 모두 생략한다면 자동으로 TAG에 latest가 부여되어 다운로드가 진행

ubuntu, mysql:5.7, centos, httpd 이미지 설치

[root@docker ~]# docker pull ubuntu
Using default tag: latest
latest: Pulling from library/ubuntu
345e3491a907: Pull complete 
57671312ef6f: Pull complete 
5e9250ddb7d0: Pull complete 
Digest: sha256:adf73ca014822ad8237623d388cedf4d5346aa72c270c5acc01431cc93e18e2d
Status: Downloaded newer image for ubuntu:latest
docker.io/library/ubuntu:latest

[root@docker ~]# docker pull mysql:5.7
5.7: Pulling from library/mysql
69692152171a: Pull complete 
1651b0be3df3: Pull complete 
951da7386bc8: Pull complete 
0f86c95aa242: Pull complete 
37ba2d8bd4fe: Pull complete 
6d278bb05e94: Pull complete 
497efbd93a3e: Pull complete 
a023ae82eef5: Pull complete 
e76c35f20ee7: Pull complete 
e887524d2ef9: Pull complete 
ccb65627e1c3: Pull complete 
Digest: sha256:a682e3c78fc5bd941e9db080b4796c75f69a28a8cad65677c23f7a9f18ba21fa
Status: Downloaded newer image for mysql:5.7
docker.io/library/mysql:5.7

[root@docker ~]# docker pull centos
Using default tag: latest
latest: Pulling from centos
2d473b07cdd5: Pull complete 
06e7245653b0: Pull complete 
Digest: sha256:cc85f1ce0137172c5b5066a27f2013be5874ed72ee7c41911496bb3246b31d7b
Status: Downloaded newer image for centos:latest
docker.io/library/centos:latest

[root@docker ~]# docker pull httpd:latest
latest: Pulling from library/httpd
69692152171a: Already exists 
7284b4e0cc7b: Pull complete 
3678b2d55ccd: Pull complete 
aeb67982a725: Pull complete 
06954f8169fd: Pull complete 
Digest: sha256:48bae0ac5d0d75168f1c1282c0eb21b43302cb1b5c5dc9fa3b4a758ccfb36fe9
Status: Downloaded newer image for httpd:latest
docker.io/library/httpd:latest
  • 이미지는 다수의 레이어로 이루어져 있음
  • 이미지마다 레이어의 수는 다르며 만약 레이어가 중복된다면 다시 다운로드 받지 않음.
  • 만약, docker login 을 하지많고 pull을 한다면 6시간에 100번으로 제한이 됌.

이미지 관리 (확인, 삭제)

docker images, docker image ls

[root@docker ~]# docker images --help

Usage:  docker images [OPTIONS] [REPOSITORY[:TAG]]
  • docker images 명령으로 이미지 목록을 나열
  • 이 명령은 docker image ls 명령과 동일하지만 편의상 docker images 를 사용함
  • repository 를 지정하면 해당 저장소의 이미지만 나열할 수 있음
[root@docker ~]# docker images
REPOSITORY    TAG       IMAGE ID       CREATED        SIZE
httpd         latest    39c2d1c93266   5 days ago     138MB
mysql         5.7       2c9028880e58   2 weeks ago    447MB
ubuntu        latest    7e0aa2d69a15   5 weeks ago    72.7MB
alpine        latest    6dbb9cc54074   6 weeks ago    5.61MB
hello-world   latest    d1165f221234   2 months ago   13.3kB
centos        latest    300e315adb2f   5 months ago   209MB

[root@docker ~]# docker image ls
REPOSITORY    TAG       IMAGE ID       CREATED        SIZE
httpd         latest    39c2d1c93266   5 days ago     138MB
mysql         5.7       2c9028880e58   2 weeks ago    447MB
ubuntu        latest    7e0aa2d69a15   5 weeks ago    72.7MB
alpine        latest    6dbb9cc54074   6 weeks ago    5.61MB
hello-world   latest    d1165f221234   2 months ago   13.3kB
centos        latest    300e315adb2f   5 months ago   209MB

[root@docker ~]# docker images centos
REPOSITORY   TAG       IMAGE ID       CREATED        SIZE
centos       latest    300e315adb2f   5 months ago   209MB

 

docker rmi

[root@docker ~]# docker rmi --help

Usage:  docker rmi [OPTIONS] IMAGE [IMAGE...]
  • docker rmi 명령을 사용하여 이미지를 삭제할 수 있다.
  • 이미지에 관련된 레이어는 전부 삭제되며, 만약 해당 레이어를 다른 컨테이너 또는 이미지가 사용하고 있다면 삭제하지 않는다.
    • -f 옵션을 사용하면 강제로 지울 수 있지만 컨테이너에 영향을 미치기 때문에 권장하지 않는다.

centos 이미지를 지우기

[root@docker ~]# docker rmi centos
Untagged: centos:latest
Untagged: centos@sha256:5528e8b1b1719d34604c87e11dcd1c0a20bedf46e83b5632cdeac91b8c04efc1
Deleted: sha256:300e315adb2f96afe5f0b2780b87f28ae95231fe3bdd1e16b9ba606307728f55
Deleted: sha256:2653d992f4ef2bfd27f94db643815aa567240c37732cae1405ad1c1309ee9859

 

docker inspect

[root@docker ~]# docker inspect --help

Usage:  docker inspect [OPTIONS] NAME|ID [NAME|ID...]
  • docker inspect 명령은 이미지뿐만 아니라 도커 오브젝트의 정보를 자세히 확인할 때 사용
  • Config 섹션의 Cmd는 이 이미지를 컨테이너로 생성할 때 컨테이너가 실행하는 애플리케이션
  • Volumes는 컨테이너를 생성하면 도커 볼륨이 함께 생성
  • WorkingDir은 컨테이너에 접근했을 때의 디렉토리이며 비어있으면 보통 "/"
  • Entrypoint 도 cmd와 마찬가지로 컨테이너가 실행할 애플리케이션인데, Entrypoint와 cmd 관계는 명령과 인자의 관계가 비슷
    • Entrypoint가 지정되어 있지 않으면 Cmd가 명령으로 동작
    • Entrypoint와 Cmd가 함께 있으면 Entrypoint가 명령이고 Cmd가 인자처럼 동작
  • RootFS 섹션의 값은 이미지의 레이어를 나타냄.
[root@docker ~]# docker inspect centos:latest

...

        "Config": {

...

            "Cmd": [
                "/bin/bash"
            ],
            ...
            "Volumes": null,
            "WorkingDir": "",
            "Entrypoint": null,

        ...

        "RootFS": {
            "Type": "layers",
            "Layers": [
                "sha256:2653d992f4ef2bfd27f94db643815aa567240c37732cae1405ad1c1309ee9859"

 

docker save / load

  • docker save 명령은 호스트에 저장된 이미지를 아카이브 파일로 복사하는 명령
    • -o 옵션을 사용하여 생성되는 파일의 경로를 지정해야한다
  • docker load 명령은 아카이브 파일을 불러오는 명령
    • -i 옵션을 사용하여 지정된 파일을 로드
[root@docker ~]# docker save --help

Usage:  docker save [OPTIONS] IMAGE [IMAGE...]



[root@docker ~]# docker load --help

Usage:  docker load [OPTIONS]
[root@docker ~]# docker save -o img.tar centos:latest httpd:latest 


[root@docker ~]# ls
anaconda-ks.cfg  img.tar


[root@docker ~]# pwd
/root


[root@docker ~]# tar tf img.tar
300e315adb2f96afe5f0b2780b87f28ae95231fe3bdd1e16b9ba606307728f55.json
...
repositories


[root@docker ~]# docker rmi centos:latest httpd:latest 
Untagged: centos:latest
...
Untagged: httpd:latest
...
Deleted: sha256:7524155083fa19d15b8902105916a8da484d1ff5d362d3530d871511c1f13f2a


[root@docker ~]# docker images
REPOSITORY    TAG       IMAGE ID       CREATED        SIZE
mysql         5.7       2c9028880e58   2 weeks ago    447MB
ubuntu        latest    7e0aa2d69a15   5 weeks ago    72.7MB
alpine        latest    6dbb9cc54074   6 weeks ago    5.61MB
hello-world   latest    d1165f221234   2 months ago   13.3kB


[root@docker ~]# docker load -i img.tar
2653d992f4ef: Loading layer  216.5MB/216.5MB
Loaded image: centos:latest
15fd28211cd0: Loading layer  3.072kB/3.072kB
33c6c92714e0: Loading layer  7.483MB/7.483MB
33de34a890b7: Loading layer  61.79MB/61.79MB
98d580c48609: Loading layer  3.584kB/3.584kB
Loaded image: httpd:latest


[root@docker ~]# docker images
REPOSITORY    TAG       IMAGE ID       CREATED        SIZE
httpd         latest    39c2d1c93266   5 days ago     138MB
mysql         5.7       2c9028880e58   2 weeks ago    447MB
ubuntu        latest    7e0aa2d69a15   5 weeks ago    72.7MB
alpine        latest    6dbb9cc54074   6 weeks ago    5.61MB
hello-world   latest    d1165f221234   2 months ago   13.3kB
centos        latest    300e315adb2f   5 months ago   209MB

'도커 > 개념 및 실습' 카테고리의 다른 글

1, 2, 3장 연습문제  (0) 2021.06.02
03장-3, 컨테이너 관리  (0) 2021.06.02
03장-2, 컨테이너 실행  (0) 2021.06.01
02장, 도커 개요, 설치  (0) 2021.05.31
01장, 가상화  (0) 2021.05.31