Chapter_2.3) 도커 이미지

동현·2022년 5월 5일
0
Chapter_2.3) 도커 이미지

Chapter_2.3) 도커 이미지

이글은 "시작하세요! 도커/ 쿠버네티스" 책을 기반으로 작성된 책입니다.


  • 목차
    • 도커 이미지 생성
    • 이미지 구조 이해
    • 이미지 추출
    • 이미지 배포

🖍 도커 이미지

모든 컨테이너는 이미지를 기반으로 생성되기 떄문에 이미지를 다루는 법은 도커 관리에서 뺴놓을수 없다.

이미지를 구성하는 저장소, 생성, 삭제, 구조 등은 매우 중요하다.

도커는 기본적으로 도커 허브에서 이미지를 내려 받으며 누구나 도커 계정을 가지고 있다면 이미지를 쉽게 공유 할 수 있다.

➕ 도커 허브에 있는 이미지를 docker search를 통해 찾아 사용할 수 있다.


🖍 도커 이미지 생성

도커 이미지를 도커 허브에서 pull 해오는 방법도 있지만 개발을 하면서 특정 개발 환경을 직접 구축한 후 사용자만의 이미지를 생성 해야 할 경우가 많을 것이다. 이를 위해 도커 이미지를 생성하는 방법을 알아보자.

  1. 명령어를 통해 컨테이너를 생성한다.

 컨테이너 내부에 first라는 이름 파일을 생성해 기본 이미지로 부터 변경 사항을 만든다.
  1. 컨테이너에서 호스트로 빠져나와 docker commit 명령어를 통해 컨테이너를 이미지로 만든다.

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

    ( commit 옵션을 지정하고 커밋할 컨테이너의 이름을 명시한 후 생성될 이미지의 이름 입력 )

( 저장소의 이름은 입력하지 않아도 상관 없지만 태그를 입력하지 않으면 자동으로 latest로 설정 )

➕ -a 옵션은  author → 이미지 작성자를 나타내는 메타데이터를 이미지에 포함 (alicek106)

    -m 커밋 메세지

이후 docker images를 통해 확인해 보면 first라는 태그로 이미지가 생성되어있음을 확인할 수 있다.


🖍 이미지 구조 이해

도커 컨테이너를 만드는 작업은 commit을 통해 쉽게 수행할 수 있다. 이미지를 좀 더 효율적으로 다루기 위해 컨테이너가 어떻게 이미지로 만들어지는지 구조는 어떻게 되는지 알아보자.

# docker inspect ubuntu:14.04
# docker inspect commit_test:first
# docker inspect commit_test:second

docker inspect를 통해 컨테이너의 정보를 볼때 주의 깊게 살펴 볼 부분은 아래의 layers 부분이다.

📄 ubuntu:14.04

📄 commit_test:first

📄 commit_test:second

도커 이미지가 각각 197mb 라고 나오지만 이는 197mb X 3이 아니다.

이미지를 커밋할때 컨테이너에서 변경된 사항만 새로운 레이어로 저장을 해 그 레이어를 포함해 새로운 이미지를 만들기 때문에

→ 197MB + first의 변경 사항 + second의 변경 사항 이다.

삭제

생성한 이미지를 삭제 해보자.

# docker rmi commit_test:first

이미지를 사용중인 컨테이너가 존재할 때 해당 이미지를 삭제하려 하면 다음과 같은 오류가 발생한다. -f 옵션을 이용해 강제로 삭제할 수 있지만 이는 이미지를 실제로 삭제하지 않고 이름만 삭제한다.

따라서 다음과 같이 이미지를 삭제해 주어야 한다. commit_test:first 이미지를 삭제하였다고 해서 실제로 해당 이미지는 삭제되지 않는다 이는 하위 이미지인 commit_test:second가 존재하기 때문이다.

‼️ commit_test:second를 삭제 할때는 얘기가 달라진다. commit_test:second를 사용하는 컨테이너가 없기 때문에 바로 삭제가 가능하다.

즉, 삭제되는 이미지의 부모 이미지가 존재하지 않아야만 해당 이미지의 파일이 실제로 삭제된다.

➕ commit_test:second를 삭제 했다해도 ubuntu:14.04가 삭제되는 것은 아니다. 앞에서는 second, first 파일이 존재하는 레이어만 삭제됐는데, commit_test:first 이미지 태그는 이미 삭제되어 존재하지 않지만 우분투 이미지를 가르키는 ubuntu:14.04 이미지가 아직 존재하기 때문이다.


🖍 이미지 추출

도커의 이미지를 별도로 저장하거나 옮기기 위해 이미지를 단일 바이너리로 저장해야 할 때가 있다. 이미지를 추출, 로드하는 방법에 대해 알아보자.

# docker save -o ubuntu_14.04_.tar ubuntu:14.04

docker save 명령어를 사용하면 컨테이너의 커맨드, 이미지 이름, 태그 등의 이미지의 모든 메타데이터를 포함해 하나의 파일로 추출 가능하다.

# docker load -i ubuntu_14_04.tar

추출된 이미지는 load 명령어를 통해 다시 로드가 가능하다.

➕ save 와 load와 유사하게 export와 import 가 있다. 이는 컨테이너의 파일 시스템을 tar 파일로 추출하여 컨테이너 및 이미지에 대한 설정 정보를 저장하지 않는다.

# docker export -o rootFS.tar mycontainer
# docker import rootFS.tar myimage:0.0

‼️ 하지만 이미지를 단일 파일로 저장하는 것은 효율적이지 않다. 이는 레이어 구조가 아닌 단일 파일이기 떄문에 이미지 용량을 각각 차지 하게 된다.


🖍 이미지 배포

이미지 생성후 다른 도커 엔진에 배포하기 위해 save나 export 같은 방법으로 이미지를 배포하게 되면 비효율적이기 때문에 도커 허브나 사설 도커 레지스트리를 사용한다.

profile
여긴 어디 나는 누구?

0개의 댓글