Допустим, мой собственный образ Docker основан на образе Debian, и я устанавливаю Apache с помощью RUN apt-get.
Когда базовый образ будет обновлен, мне нужно удалить контейнер и создать новый. Это можно автоматизировать, например со Сторожевой Башней.
Но как я могу поддерживать приложение внутри контейнера (Apache в моем примере) в актуальном состоянии? Базовый образ не меняется только потому, что была устранена проблема безопасности в одном пакете, который не поставлялся с базовым образом. Когда я создаю новый контейнер с моим Dockerfile, Apache по-прежнему не обновляется благодаря кешу изображений Docker.
Как я могу обрабатывать обновления приложений так же просто, как если бы я установил Apache на хосте с помощью диспетчера пакетов?
Вы можете использовать правильное управление конфигурацией с такими системами, как SaltStack, Chef, Ansible или Puppet. Они позволяют точно управлять версиями программного обеспечения, установками, обновлениями и управлять фактическими файлами конфигурации.
Процедура заключается в следующем:
--pull --no-cache
параметры, которые также обновляют базовый образ. docker-compose pull && docker-compose up -d
. С Swarm вы можете запустить docker stack deploy -c compose.yml --with-registry-auth
последняя версия будет извлечена из реестра начиная с версии 17.06. Если вы позвоните docker run
вручную, тогда вам нужно будет позвонить в соответствующий docker pull
сначала (чтобы вытащить образ из реестра), а затем удалите / воссоздайте свой контейнер.Чтобы автоматизировать все это, для выполнения всех этих шагов будет использоваться инструмент CI-CD, такой как Jenkins, GoCD, Drone.io и т. Д.
Запустите свою «сборку докеров» с помощью «--no-cache --pull», чтобы убедиться, что она всегда использует свежий базовый образ и не пытается повторно использовать кешированные слои для обновлений пакетов.
Вы можете установить комментарий «cache buster» на полпути к вашему Dockerfile (например, в строке, где вы выполняете apt-get), чтобы он всегда работал. Например:
Dockerfile:
ARG CACHEBUST=1
RUN apt-get update && apt-get upgrade # $CACHEBUST
при сборке установите buildarg, например, на текущий PID или $ RANDOM, чтобы всегда строить перестроение из этой строки:
docker --build-arg CACHEBUST=$$
или перестраивать раз в день
docker --build-arg CACHEBUST=`date +%Y%m%d`