ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 도커 이미지(Docker Image)
    BackEnd/docker 2022. 3. 15. 07:30
    반응형

      도커는 기본적으로 도커 허브(Docker Hub)라는 중앙 이미지 저장소에서 이미지를 내려받습니다. 도커 허브는 도커가 공식적으로 제공하고 있는 이미지 저장소로서, 도커 계정을 가지고 있다면 누구든지 이미지를 올리고 내려받을 수 있기 때문에 다른 사람들에게 이미지를 쉽게 공유할 수 있습니다. 단, 도커 허브는 누구나 이미지를 올릴 수 있기 때문에 공식(Official) 라벨이 없는 이미지는 사용법을 찾을 수 없거나 제대로 동작하지 않을 수 있습니다. 또한 이미지 저장소를 다른 사람들에게 공개하지 않기 위해 비공개(Private) 저장소를 사용하려면 비공개 저장소의 수에 따라 요금을 지불해야 합니다. 

     

      docker create, docker run, docker pull의 명령어로 이미지를 내려받을 때 도커는 도커 허브에서 해당 이미지를 검색한 뒤 내려받습니다. 도커 허브에 어떤 이미지가 있는지 확인하기 위해 도커 허브 사이트를 직접 접속해서 찾아볼 수도 있지만 도커 엔진에서 docker search 명령어를 사용할 수도 있습니다.

    $ docker search ubuntu
    NAME                             DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
    ubuntu                           Ubuntu is a Debian-based Linux operating sys…   13863     [OK]
    websphere-liberty                WebSphere Liberty multi-architecture images …   283       [OK]
    ubuntu-upstart                   DEPRECATED, as is Upstart (find other proces…   112       [OK]
    neurodebian                      NeuroDebian provides neuroscience research s…   88        [OK]
    open-liberty                     Open Liberty multi-architecture images based…   51        [OK]
    ubuntu-debootstrap               DEPRECATED; use "ubuntu" instead                45        [OK]
    ubuntu/nginx                     Nginx, a high-performance reverse proxy & we…   34

      ubuntu 이미지도 여러 종류가 있음을 알 수 있습니다. STARS는 해당 이미지가 도커 사용자로부터 얼마나 즐겨찾기 됐는지를 나타냅니다.

     

    도커 이미지 생성/삭제

      도커로 개발하는 많은 경우에 컨테이너에 애플리케이션을 위한 특정 개발 환경을 직접 구축한 뒤 사용자만의 이미지를 직접 생성해야 합니다. 다음 명령어를 입력해 이미지로 만들 컨테이너를 생성합니다. 컨테이너 내부에 first라는 이름의 파일을 하나 생성해 기존의 이미지로부터 변경사항을 만듭니다.

    $ docker run -i -t --name commit_test ubuntu:14.04
    root@d935bfb8318c:/# echo test_first! >> first

     

      호스트로 빠져나와 docker commit 명령어를 입력해 컨테이너를 이미지로 만듭니다. docker commit 명령어의 형식은 아래와 같습니다.

    $ docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]

      아래 명령은 commit_test라는 컨테이너를 commit_test:first라는 이름의 이미지로 생성합니다. 저장소 이름은 입력하지 않아도 상관없지만 이미지의 태그를 입력하지 않으면 자동으로 latest로 설정됩니다.

    $ docker commit \
    -a "hanseomkim" -m "my first commit" \
    commit_test \
    commit_test:first
    
    sha256:4d23c02a12f21ac4fee6ee5c997f20d042f11e897fea72a824082381f0cca01f
    • -a: 이미지 작성자(author)
    • -m: 커밋 메시지
    • commit_test:first: 이미지 이름:태그

     

      docker images 명령어로 이미지가 생성됐는지 확인합니다.

    $ docker images
    REPOSITORY    TAG       IMAGE ID       CREATED          SIZE
    commit_test   first     4d23c02a12f2   49 seconds ago   197MB
    ubuntu        14.04     13b66b487594   11 months ago    197MB

     

      docker rmi 명령어를 사용하면 이미지를 삭제할 수 있습니다. 이미지를 사용 중인 컨테이너 존재 시 컨테이너 삭제 후 이미지를 삭제해야 합니다. 이미지를 커밋할 때 컨테이너에서 변경된 사항만 새로운 레이어로 저장하고, 그 레이어를 포함해 새로운 이미지를 생성하기 때문에 이미지 삭제 시 이미지 레이어 파일도 삭제됩니다.

    $ docker rmi commit_test:first
    Untagged: commit_test:first
    Deleted: sha256:4d23c02a12f21ac4fee6ee5c997f20d042f11e897fea72a824082381f0cca01f
    Deleted: sha256:3f2c14e723970b8838038b8e73559fad0f5c8bba40c50338c62e90b8ffaebcdf
    • Untagged: 이미지에 부여된 이름만 삭제한다는 것을 뜻함
    • Deleted: 이미지 레이어가 실제로 삭제됐음을 뜻함

     

    Note. 컨테이너가 사용 중인 이미지를 docker rmi -f로 강제로 삭제하면 이미지의 이름이 <none>으로 변경되며, 이러한 이미지들을 댕글링(dangling) 이미지라고 합니다. 댕글링 이미지는 docker images -f dangling=true 명령어를 사용해 별도로 확인할 수 있습니다. 사용 중이지 않은 댕글링 이미지는 docker image prune 명령어로 한꺼번에 삭제할 수 있습니다.

     

    도커 이미지 추출

      도커 이미지를 별도로 저장하거나 옮기는 등 필요에 따라 이미지를 단일 바이너리 파일로 저장해야 할 때가 있습니다. docker save 명령어를 사용하면 컨테이너의 커맨드, 이미지 이름과 태그 등 이미지의 모든 메타데이터를 포함해 하나의 파일로 추출할 수 있습니다. -o 옵션에는 추출될 파일명을 입력합니다.

    $ docker save -o ubuntu_14_04.tar ubuntu:14.04

     

      추출된 이미지는 load 명령어로 도커에 다시 로드할 수 있습니다. save 명령어로 추출된 이미지는 이미지의 모든 메타데이터를 포함하기 때문에 load 명령어로 이미지를 로드하면 이전의 이미지와 완전히 동일한 이미지가 도커 엔진에 생성됩니다.

    docker load -i ubuntu_14_04.tar

     

      save, load 명령어와 유사하게 사용할 수 있는 명령어로 export, import가 있습니다. 그러나 export 명령어는 컨테이너의 파일시스템을 tar 파일로 추출하며 컨테이너 및 이미지에 대한 설정 정보를 저장하지 않습니다.

    반응형

    'BackEnd > docker' 카테고리의 다른 글

    Dockerfile  (0) 2022.03.16
    이미지 배포(Image Deploy)  (0) 2022.03.15
    컨테이너 자원 할당 제한  (0) 2022.03.12
    컨테이너 로깅(Container Logging)  (0) 2022.03.12
    도커 네트워크(Docker Network)  (0) 2022.03.09

    댓글

Designed by Tistory.