[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/