Docker совет №6: Объединяйте RUN в Dockerfile
Nov 9, 2017 10:36 · 165 words · 1 minute read
Все выполняющиеся инструкции при сборке 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-образ станет меньшего размера и будет содержать в себе все необходимое (как и в первом варианте).