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



댓글 1개:

  1. 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

    답글삭제