2019년 5월 3일 금요일
이미 만들어진 docker image의 size를 줄이는 방법
이미 만들어놓은 docker image의 크기를 줄여야 할 필요가 있을 수 있습니다. 가령 지난번 posting 에서 docker image를 만들 때는 크기를 줄이는 것에 대한 고려는 전혀 없었습니다. 가령 docker build할 때 /tmp/temp 밑에 있던 임시 파일들을 지우지도 않았고, 또 RUN을 너무 많이 썼습니다. (저는 몰랐습니다만) docker image의 layer는 저런 RUN 1줄마다 따로 만들어진다는군요.
가령 dockerfile 안에 들어있는 아래와 같은 5줄은...
RUN apt-key add /tmp/temp/apt.key1
RUN add-apt-repository "deb [arch=ppc64el] https://download.docker.com/linux/ubuntu bionic stable"
RUN dpkg -i /tmp/temp/cuda-repo-ubuntu1604_9.0.176-1_ppc64el.deb
RUN apt-key add /tmp/temp/apt.key2 && apt-get update
RUN apt-get install -y `apt-cache pkgnames | grep cuda | grep -v qnx | grep -v armhf | grep -v aarch64 | grep 9-0`
아래와 같이 1줄로 줄이는 것이 전체 docker image size를 줄이는데 도움이 됩니다.
RUN apt-key add /tmp/temp/apt.key1 && add-apt-repository "deb [arch=ppc64el] https://download.docker.com/linux/ubuntu bionic stable" && dpkg -i /tmp/temp/cuda-repo-ubuntu1604_9.0.176-1_ppc64el.deb && apt-key add /tmp/temp/apt.key2 && apt-get update && apt-get install -y `apt-cache pkgnames | grep cuda | grep -v qnx | grep -v armhf | grep -v aarch64 | grep 9-0`
Docker image의 크기를 작게 만드는 것은 물론 만들 때부터 그런 점을 고려해서 작은 size로 만드는 것이 좋습니다. 그러나. 이미 만들어진 docker image의 크기를 줄이는 것도 가능합니다. export와 import를 사용하면 됩니다.
가령 아래의 image는 size가 8.19GB입니다.
ibm@uniac922:~/files/docker$ sudo docker images | grep cuda9-2_python368_pytorch1.01_ppc64le | grep latest
bsyu/ubuntu18.04_cuda9-2_python368_pytorch1.01_ppc64le latest b6695ad4cb7f 9 days ago 8.19GB
이 docker image를 run 시켜서 전에 못 지웠던 /tmp/temp도 지우고, apt autoremove로 필요없는 OS fileset들도 지운뒤 그 container를 commit하여 v0.5의 tag로 새로 이미지를 만들었습니다. 그러나 그 결과는 여전히 크기가 8.19GB입니다.
ibm@uniac922:~/files/docker$ sudo docker images | grep cuda9-2_python368_pytorch1.01_ppc64le | grep v0.5
bsyu/ubuntu18.04_cuda9-2_python368_pytorch1.01_ppc64le v0.5 a8552891b60a 13 seconds ago 8.19GB
실제로 docker image의 크기가 줄어들려면, 이걸 그냥 commit를 하면 안 되고, docker export로 저장해야 합니다.
ibm@uniac922:~$ sudo docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
f5880eb6e4f0 bsyu/ubuntu18.04_cuda9-2_python368_pytorch1.01_ppc64le:v0.4 "bash" 17 seconds ago Up 16 seconds 8888/tcp modest_golick
ibm@uniac922:~$ sudo docker export f5880eb6e4f0 > ubuntu18.04_cuda9-2_python368_pytorch1.01_ppc64le.v0.5.tar
이 export된 tar file의 크기는 5.7GB 정도입니다.
ibm@uniac922:~$ ls -ltr
total 5677172
-rw-r--r-- 1 ibm ibm 8980 May 2 17:27 examples.desktop
drwxrwxr-x 17 ibm ibm 4096 May 2 17:37 anaconda2
drwxrwxr-x 3 ibm ibm 4096 May 3 13:52 files
-rw-rw-r-- 1 ibm ibm 5813396992 May 3 15:20 ubuntu18.04_cuda9-2_python368_pytorch1.01_ppc64le.v0.5.tar
이걸 import 해보겠습니다.
ibm@uniac922:~$ cat ubuntu18.04_cuda9-2_python368_pytorch1.01_ppc64le.v0.5.tar | sudo docker import --change "ENV NVIDIA_VISIBLE_DEVICES=all" --change "ENV NVIDIA_DRIVER_CAPABILITIES compute,utility" - bsyu/ubuntu18.04_cuda9-2_python368_pytorch1.01_ppc64le:v0.6
이제 size를 보면 위의 tar file size처럼 새로운 image인 v0.6의 size는 5.7GB인 것을 보실 수 있습니다.
ibm@uniac922:~$ sudo docker images | grep cuda9-2_python368_pytorch1.01_ppc64le
bsyu/ubuntu18.04_cuda9-2_python368_pytorch1.01_ppc64le v0.6 5453478b0106 49 seconds ago 5.72GB
bsyu/ubuntu18.04_cuda9-2_python368_pytorch1.01_ppc64le v0.5 a8552891b60a 2 hours ago 8.19GB
bsyu/ubuntu18.04_cuda9-2_python368_pytorch1.01_ppc64le latest b6695ad4cb7f 9 days ago 8.19GB
피드 구독하기:
댓글 (Atom)
Hw 엔지니어를 위한 Deep Learning: 이미 만들어진 Docker Image의 Size를 줄이는 방법 >>>>> Download Now
답글삭제>>>>> Download Full
Hw 엔지니어를 위한 Deep Learning: 이미 만들어진 Docker Image의 Size를 줄이는 방법 >>>>> Download LINK
>>>>> Download Now
Hw 엔지니어를 위한 Deep Learning: 이미 만들어진 Docker Image의 Size를 줄이는 방법 >>>>> Download Full
>>>>> Download LINK