MoreLean

docker 를 이해하기 위하여 #2 본문

Programmer/Docker

docker 를 이해하기 위하여 #2

judeKim' 2013. 8. 22. 16:21
반응형

어제에 이어 계속 정리합니다.



# Image ( http://docs.docker.io/en/latest/terms/image/ )


docker에서 앞서 언급한 read-only 레이어는 image라고 불린다. image는 결코 변하지 않는다.

docker가 Union File System을 사용한 이래로 프로세스들은 모든 파일 시스템들은 read-write 모드로 마운트 된다고 생각하게 된다.

하지만, 변경되는 모든것들은 쓰기가 가능한 가장 최상위 레이어로 이동하게 되고 그바로 아래에 있는 read-only image의 원본 파일은 변하지 않는다. image들은 바뀌지 않기 때문에 image는 상태를 가질 수 없다. 



Parent Image


각 image는 아래층을 형성한 더 많은 image에 따라서 의존적이다. 때론 하위 image가 상위 image의 부모 image라고 말하기도 한다.

Base Image

부모가 없는 image를 base image라고 한다.


# Container ( http://docs.docker.io/en/latest/terms/container/ )

Container

일단 docker 내부 image의 프로세스를 시작한다면, docker는 image와 부모 이미지를 fetch하고, base image에 도달할때까지 fetch 과정을 반복한다. 그때 union file system이 최상위에 read-write 레이어를 추가한다. 이때 생성된 read-write 레이어는 부모 image에 대한 정보와, unique id나 network 환경설정, 리소스 제한 등에 대한 몇가지 추가 정보들을 더하는데 이를 container라고 한다.

Container State

container들은 바뀔수 있고, 그러므로 당연히 상태를 가질 수 있다. container들은 실행되거나 종료되기도 한다.

container가 실행중일때, container의 아이디어는 호스트에서 실행중인 다른프로세스로부터의 분리 및 CPU에서 실행중인 프로세스 트리를 포함하고 있다.

container가 종료되었을때, 파일시스템의 상태와 종료 값들은 유지된다. 다시 실행할 수도 종료 및 재시작할 수도 있다. 프로세스들은 ( container내의 메모리 상태값을 유지하지 못한 상황 ) 스크래치 상태로 재시작하게 되지만, 파일 시스템은 단지 컨테이너가 종료되었을때의 그 상태 그대로 입니다.

하지만 docker의 commit 명령어를 통해 container를 image로 변경할 수 있다. 한번 image가 된다면 그것을 다른 컨테이너의 parent image로서 재사용할 수 있다.



여기서는 docker내부에서 사용하는 image 및 container의 의미에 대해서 설명하고 있다.

앞서의 내용과 거의 비슷하지만, 여튼 image는 read-only 레이어이고, container는 read-write한 레이어이며 container는 항상 최상단에 위치한다. container에 수정한 정보를 영구적으로 보관하고 싶다면 docker의 commit 명령어를 통해 image로 만들어야 한다. 재사용 하고 싶다면 docker commit 명령어를 통해 image로 만들어야 한다.

그렇지 않으면 재시작등을 할때 container에서 쓴 파일등은 모두 날라가게 된다. 

container등을 통해 만들어진 파일은 보존된다. 다만, 다른 container등에서 참조(docker cp 등을 통해 host에 복제후 사용)하기가 번거롭다.

이렇게만 이해하면 목표 달성.


반응형

'Programmer > Docker' 카테고리의 다른 글

Repositories in docker  (0) 2013.08.28
Commands of docker  (0) 2013.08.26
Installation of docker  (0) 2013.08.25
docker 를 이해하기 위하여 #1  (0) 2013.08.22
About Docker  (0) 2013.08.21