2014-11-18 4 views
2

У меня есть DockerFile, который строится из базового образа Ubuntu. Я также иметь следующую команду, которая инструктирует мой контейнер, чтобы сделать обновление:Репликация состояния базы данных докеров

RUN apt-get update 

Если я запускаю мой контейнер в разные моменты времени, я не могу гарантировать, что моя база Ubuntu изображения и соответствующие пакеты, обновляется каждый раз, когда при этом команда apt-get update будет одинаковой. Как я могу гарантировать, что он всегда остается прежним?

+1

Изображения в контейнере будут меняться только при их * создании * или фиксации изменений. Можете ли вы уточнить, хотите ли вы что-то менять каждый день (например, чтобы забрать исправления безопасности) или остаться неизменным в течение длительных периодов времени (чтобы избежать неожиданных несовместимостей, скажем) – Bryan

ответ

0

Эта команда выполняется только при создании изображения. Если вы хотите запускать команду каждый раз при запуске контейнера, вам следует использовать инструкцию CMD вместо RUN.

3

Вы должны запустить обновление RUN apt-get в собственном собственном изображении, а затем опубликовать/развернуть его на докер-хабе с помощью известного тега, например. дата сборки. Затем в ваших последующих изображениях вы можете сказать что-то вроде строки ниже. Таким образом, у вас никогда не будет обновлений зависимостей из-под вас, даже если вы вносите много изменений в свой файл Docker.

FROM me/ubuntu:18_11_2014 
+0

Должно ли '' быть 'из' в вашем примере? –

+0

Вы правы, старший момент там. –

1

Во-первых, важно отметить, что изображения будут обновляться только при запуске docker build, не docker run. Даже тогда Docker кэширует слои по умолчанию, а строка apt-get update будет повторно запускаться только в том случае, если что-то выше, или вы явно отключите кеширование.

Почти невозможно гарантировать, что ваши сборки производят точно такое же изображение все время, что является известной проблемой. Лучше всего передать номер версии в apt-get, например. apt-get install -y nautilus=2.2.4-1, который должен быть достаточно хорош для вас. Однако помните, что любые зависимости, вложенные установленным программным обеспечением, могут быть изменены (зависимости часто задаются как> = конкретная версия), что будет означать, что изображение все еще может измениться. Кроме того, помните, что в какой-то момент старые пакеты будут просто удалены из репозитория Debian.

Смежные вопросы