-
[Docker] 도커 이미지컨테이너/도커 2021. 1. 2. 02:47
2.3 도커 이미지
도커는 기본적으로 도커 허브라는 중앙 이미지 저장소에서 이미지를 내려받는다(도커 허브는 도커가 공식적으로 제공하고 있는 이미지 저장소).
# docker search ubuntu
*docker search 명령어는 도커 허브에서 이미지를 검색하며, 도커 허브 이미지임을 명시하기 위해 docker.io/ubuntu와 같이 docker.io 접두어를 사용할 수 있다. 허나 일반적으로 최상위 접두어를 명시하지 않으면 도커 허브의 이미지를 의미한다.
2.3.1 도커 이미지 생성
1) 컨테이너 안에서 작업한 내용을 이미지로 생성
# docker run -i -t --name commit_test ubuntu:14.04 # docker commit \ -a "seho100" -m "my first commit" \ commit_test \ // 컨테이너 이름 commit_test:first // 생성되는 이미지 이름
▷ -a 옵션은 author를 뜻하며 이미지의 작성자를 나타내는 메타데이터를 이미지에 포함시킨다.
▷ -m 옵션은 커밋 메시지를 뜻한다.
2) 기존 이미지로 새로운 이미지를 생성
# docker run -i -t --name commit_test2 commit_test:first # docker commit \ -a "seho100" -m "my second commit" \ commit_test2 \ commit_test:second
2.3.2 도커 이미지 구조
도커 이미지는 layer라는 계층구조를 가지고 있다.
도커 이미지의 Layer 정보를 확인하려면 docker inspect 명령어로 확인할 수 있다.
# docker inspect ubuntu:14.04
여기서 의문이 드는 부분은 이미지를 생성할 때 마다 size가 188MB씩 늘어나는데 매번 commit 할 때마다 용량이 늘어나는 것인가?
# docker images REPOSITORY TAG IMAGE ID CREATED SIZE layer_test second 303124b8ac57 2 minutes ago 188 MB layer_test first 48f47ef8257d 2 minutes ago 188 MB docker.io/ubuntu 14.04 5dbc3f318ea5 4 weeks ago 188 MB
결론부터 말하자면 188MB 크기의 이미지가 3개 존재하는 것은 아니다.
이미지를 커밋할 때 컨테이너에서 변경된 사항만 새로운 레이어로 저장하고, 그 레이어를 포함해 새로운 이미지를 생성하기 때문에 전체 이미지의 실제 크기는 188MB + first파일의 크기 + second파일의 크기가 된다.
그럼 layer_test:second는 layer_test:first 기반으로 만들어진 이미지인데 layer_test:first가 삭제되면 layer_test:second는 어떻게 될까?
이 경우 layer_test:first를 부모로 두고 있는 자식 layer_test:second가 살아 있기 때문에 layer_test:first의 Layer 내용은 보존된 채로 layer_test:first라는 이미지 이름만 사라지게 된다.
2.3.3 이미지 추출
도커 이미지를 별도로 저장하거나 옮길 때 단일 바니어리 파일로 저장해야 할 때가 있다. docker save 명령어를 사용하면 컨테이너의 커맨드, 이미지 이름과 태그 등 이미지의 모든 메타데이터를 포함해 하나의 파일로 추출할 수 있다.
-o 옵션에는 추출될 파일명을 입력한다.
- save, load
# docker save -o ubuntu_14_04.tar ubuntu:14.04 // 이미지를 하나의 파일로 추출 # docker load -i ubuntu_14_04.tar // 이미지를 로드하여 도커 엔진에 의해 생성
- export, import : 이미지로 만든 컨테이너가 생성될 때 설정된 detached 모드, 컨테이너 커맨드와 같은 컨테이너의 설정 정보를 저장하지 않고 컨테이너의 파일시스템을 tar 파일로 추출한다.
# docker export -o rootFS.tar mycontainer # docker import rootFS.tar myimage:0.0
그러나 이미지를 단일 파일로 저장하는 것은 효율적이지 않다.
추출된 이미지는 Layer 구조의 파일이 아닌 단일 파일이기 때문에 여러 버전의 이미지를 추출할수록 이미지 용량을 각기 차지하게 된다.
'컨테이너 > 도커' 카테고리의 다른 글
[Docker] 도커 컴포즈 (0) 2021.01.13 [Docker] 이미지 배포 (0) 2021.01.06