Cache
При сборке образа полезно использовать кэш
С его помощью можно значительно ускорить процесс сборки
Одна команда - один слой
Пример правильного Dockerfile'a
FROM alpine
RUN apk add --no-cache nginx && mkdir -p /run/nginx
EXPOSE 80
COPY custom.conf /etc/nginx/conf.d/
COPY . /opt/
CMD ["nginx", "-g", "daemon off;"]
Используется alpine потому что он легковесный (меньше размер - быстрее сборка)
Также видно что команды записано в порядке увеличения вероятности изменения
Потому что изменение в слое из середины или начала повлечет за собой пересборку всех последующих слоев
А мы понимаем что слой с установкой nginx мы вряд ли будем менять, а слой с копированием кода будет меняться при каждой сборке (иначе зачем еще пересобирать)
Учитывая это ставим слои в соотв. порядке
root@three:~/test# docker build -t test_size5 .
Sending build context to Docker daemon 5.632kB
Step 1/6 : FROM alpine
---> 49f356fa4513
Step 2/6 : RUN apk add --no-cache nginx && mkdir -p /run/nginx
---> Using cache
---> 55dac18b6a46
Step 3/6 : EXPOSE 80
---> Using cache
---> 813853058580
Step 4/6 : COPY custom.conf /etc/nginx/conf.d/
---> Using cache
---> 930e206c4054
Step 5/6 : COPY . /opt/
---> 890c5cc41dd3
Step 6/6 : CMD ["nginx", "-g", "daemon off;"]
---> Running in 42c07646cb68
Removing intermediate container 42c07646cb68
---> 70d894801010
Successfully built 70d894801010
Successfully tagged test_size5:latest
Выше пункты 2-4 были взяты из кэша, что здорово ускорило сборку
No Comments