Info
Content

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
Back to top