도커 이미지란?
도커 이미지란 컨테이너를 생성하기 위해 필요한 설계도 개념입니다. 도커 컨테이너와 이미지의 관계는 마치 디스크에 저장된 프로그램과 이를 실행했을때 메모리에 상주하게 되는 프로세스 관계와 비슷하며, 객체지향 언어에서의 클래스와 이를 가지고 생성된 인스턴스인 객체와의 관계와도 흡사합니다.

이미지에는 베이스 이미지 라는게 있는데, 배포판 리눅스에서 유저랜드(User Land)만을 포함하는 파일을 말합니다. 이러한 베이스 이미지는 직접 만들 수도 있으며, 리눅스 배포판 유저랜드에 mysql, wordpress 등의 어플리케이션까지 포함되는 베이지 이미지도 있습니다. 즉 도커 이미지는 베이스 이미지에 필요한 어플리케이션 및 라이브러리등을 포함시킨 것을 의미합니다.


그러나 이러한 여러가지 요소들을 포함하여 이미지를 만들면 구성요소를 조금씩만 다르게 하여 이미지를 제작하고 싶어도 요소들이 중복되어 이미지 크기가 커질거라고 생각할 수 있습니다. 그러나 도커 이미지는 바뀐 부분만을 이미지로 생성하고 실행시점에 베이스 이미지를 바뀐 부분과 조합하기 때문에 바뀐 이미지의 크기는 많이 커지지 않습니다.



도커 이미지 의존 관계
도커 이미지는 컨테이너를 생성하기 위한 파일입니다. 도커의 이미지는 형상관리 툴인 Git에 비유되곤 하는데, 다음의 구조를 보면 더욱 비슷하게 느낄 수 있습니다. 이미지들간의 관계는 마치 Git의 브랜치와 같이 트리구조로 분기되어지는 형태를 가집니다.

이미지는 아래에 보이는 것처럼 16진수 ID값으로 구분되어지며, 각각의 이미지는 서로에게 독립적으로 존재합니다. 예를들어 8896kbi6sa8a 이미지는 Ubuntu14.05 이미지이며, 그아래 adasd372e3gs 이미지는 Ubuntu14.05 이미지를 가지고 컨테이너를 생성한 뒤, 그곳에 mysql같은 응용프로그램을 추가로 설치한 후에 그것을 다시 도커 이미지로 생성한 것입니다.


즉 Ubuntu + 응용프로그램들이 들어있는 컨테이너를 생성할 수 있는 이미지인 것입니다. 그러나 adasd372e3gs 이미가 통째로 모든것을 가지고 있는것이 아니고 추가로 바뀐 부분(응용프로그램)만을 포함하고 나머지는 부모 이미지를 참조하는 방식으로 동작됩니다. 즉 Ubuntu + mysql 이미지는 56asd755w1za, l0d9x8fll5cx, 8896kbi6sa8a 이미지까지 참조하여 함께 동작하는 이미지입니다. 도커에서는 이러한 것을 레이어 라고 합니다.




도커 이미지 원격저장소 Docker Hub
도커는 가상머신과 다르게 이미지를 관리할 수 있는 기능들을 제공합니다. Git 원격 저장소인 GitHub에서 소스를 관리하듯이 도커에서는 이미지를 Docker Hub(https://hub.docker.com/)라는 중앙 저장소에서 관리하며, 이미지 버전 관리 기능까지 제공합니다. Git과 마찬가지로 이미지를 Push(업로드), Pull(다운로드) 할 수 있으며, 다양한 어플리케이션을 이미지로 제공하고 있습니다. 물론 Git과 마찬가지로 유료 저장소 또한 제공됩니다.

위에서 얘기했든 이미지들은 서로 필요한 부모이미지를 참조하며, 이미지를 원격 저장소에 올리거나 내려받을 때 의존하는 부모 이미지가 존재한다면 이또한 함께 올리거나 내려받습니다.

또한 하나의 이미지만 있으면 서버가 몇대가 되든 여러개의 컨테이너 생성이 가능합니다.



연관글
블로그 이미지

도로락

IT, 프로그래밍, 컴퓨터 활용 정보 등을 위한 블로그

댓글을 달아 주세요! 질문 환영합니다!