[docker 버전 : 1.12]


docker 를 빌드할 때, Dockerfile로 생성하는 단계가 있다. 


docker build -t google-sandbox -f Dockerfile .



docker history 커맨드를 보면, image 안에 여러 image id가 존재하는 것을 볼 수 있다. 즉 RUN 지시자로 정의된 항목마다 하나의 image id가 존재하는 것을 볼 수 있다.


$ docker history 9ee4b3d0f0b5

IMAGE               CREATED             CREATED BY                                      SIZE                COMMENT
9ee4b3d0f0b5        3 minutes ago       /bin/sh -c #(nop)  ENTRYPOINT ["/docker-entry   0 B
17e114f16e50        3 minutes ago       /bin/sh -c #(nop)  VOLUME [/data /log]          0 B
18e87f892df1        3 minutes ago       /bin/sh -c #(nop)  ENV TERM=xterm               0 B
df973dbe65e4        3 minutes ago       /bin/sh -c #(nop) COPY file:0939c051875b38702   30 B

ba77ab6a5bd4        8 minutes ago       /bin/sh -c cd /tmp && rm -rf *                  0 B

...




또한 docker push 할 때, image id 단위로 push되는 것을 볼 수 있다.




docker 이미지의 내부 구조를 살펴보면, read-only이면서 순차적인 layer로 구성되어 있다.

특히 docker 1.10부터는 암호화된 hash, 충돌이 나지 않는 hash key로 image id를 구성한다고 한다.




이런 구조의 장점은 기존 이미지의 재활용을 잘 한다는 점이다.

도커를 테스트해보니. 딱 필요한(수정한) 부분만 image id가 생성된다. 따라서 디스크 용량 이슈가 확실히 적어진다.

그래서 컨테이너도 효율적으로 관리할 수 있다. 





또한, 컨테이너를 실행할 때는 분리된 프로세스로 실행되기 때문에 문제 없이 잘 실행된다. 





참고 

* docker의 내부구조에 대한 설명 :
https://docs.docker.com/engine/userguide/storagedriver/imagesandcontainers/





Posted by '김용환'
,