반응형
Dockerfile을 사용할 때 좋은습관이라는 것이 있습니다.
RUN apt-get install A \
B \
C \
위처럼 역슬래쉬로 나눠서 가독성을 높이거나,
.dockerignore 파일을 작성해 불필요한 파일을 빌드 컨텍스트에 포함하지 않는 것이 있습니다.
Dockerfile을 아무렇게나 작성하면 저장 공간을 불필요하게 차지하는 이미지나 레이어가 너무 많은 이미지가 생성될 수 있습니다.
[root@localhost dockerfile]# vi dockerfile
FROM ubuntu:18.04
RUN mkdir /test
RUN fallocate -l 100m /test/dummy
RUN rm /test/dummy
fallocate 명령어로 100MB 크기의 파일을 가상으로 만들어 /test/dummy 에 할당한 후 rm으로 삭제하는 내용입니다.
일반적으로 생각하면 ubuntu:18.04 이미지와 크기가 동일해야 합니다.(100MB 파일을 결국 지웠으니까요)
[root@localhost dockerfile]# docker build . -t falloc_100mb:0.0
Sending build context to Docker daemon 2.048kB
Step 1/4 : FROM ubuntu:18.04
...
...
...
Successfully built eadb7ca6c589
Successfully tagged falloc_100mb:0.0
[root@localhost dockerfile]#
[root@localhost dockerfile]# docker images | grep falloc
falloc_100mb 0.0 eadb7ca6c589 12 seconds ago 168MB
[root@localhost dockerfile]# docker images | grep ubuntu
ubuntu 18.04 81bcf752ac3d 2 weeks ago 63.1MB
빌드 후 두 개의 이미지를 비교해보면 100MB 정도 차이가 나는것을 확인할 수 있습니다.
이는 컨테이너를 이미지로 생성할 때 변경된 사항만 새로운 이미지 레이어로 생성하는 방식의 단점 중 하나입니다.
RUN rm /test/dummy 명령어로 파일을 삭제하더라도 "삭제했다" 는 변경사항으로서의 레이어로 새롭게 저장됩니다.
즉, 실제 100MB 크기의 파일은 이전 레이어에 남아있습니다.
실제로 사용하지 못하는 파일이 이미지 레이어로 존재하기 때문에 저장 공간은 차지하지만 실제로 의미없는 공간이 됩니다.
RUN mkdir /test && \
fallocate -l 100m /test/dummy && \
rm /test/dummy
RUN이 하나의 이미지 레이어가 된다는 것을 생각해보면 위처럼 역슬래쉬로 하나로 묶으면 방지할 수가 있습니다.
반응형
'docker' 카테고리의 다른 글
도커 컨테이너 다루기(11) - 도커데몬[2] (0) | 2021.06.08 |
---|---|
도커 컨테이너 다루기(10) - 도커데몬[1] (0) | 2021.06.05 |
도커 컨테이너 다루기(8) - 도커파일(Dockerfile)[2] (1) | 2021.06.03 |
도커 컨테이너 다루기(8) - 도커파일(Dockerfile)[1] (1) | 2021.06.01 |
도커 컨테이너 다루기(7) - 도커 이미지(Image) (0) | 2021.05.31 |