Docker совет №6: Объединяйте RUN в Dockerfile

Nov 9, 2017 10:36 · 165 words · 1 minute read docker

Все выполняющиеся инструкции при сборке docker-образа влекут за собой увеличение его размера. Как можно оптимизировать размер docker-образов еще на этапе сборки? Давайте разберемся!

Существует множество способов уменьшить docker-образы, в том числе использование встроенных механизмов кэширования Docker (при этом не только уменьшается размер docker-образа, но и быстрее осуществляется сборка).

Например, при сборке образа нам необходимо выполнить три вещи:

  • Скачать zip-архив с помощью wget;
  • Распаковать скачанный архив в определенный каталог;
  • Удалить скачанный архив Это может выглядеть в Dockerfile таким образом:
...
RUN wget -O archive.tar.gz http://example.com/archive.tar.gz
RUN tar -xvf archive.tar.gz -C /usr/src/myapp
RUN rm archive.tar.gz
...

Это создаст три слоя в вашем docker-образе, причем архив archive.tar.gz останется частью вашего образа (в качестве слоя), несмотря на то, что вы его удаляете.

Вместо трех инструкций лучше использовать одну, например:

...
RUN wget -O archive.tar.gz http://example.com/archive.tar.gz \
    && tar -xvf archive.tar.gz -C /usr/src/myapp \
    && rm archive.tar.gz
...

Так будет создан всего один слой, docker-образ станет меньшего размера и будет содержать в себе все необходимое (как и в первом варианте).

tweet Share