Является ли хорошей практикой частое использование контейнера Docker?

Я использую WebSphere Liberty внутри. Поскольку WebSphere Liberty требует частого редактирования xml, что невозможно с командами Dockerfile. Время от времени мне приходится делать фиксацию контейнера в докере, чтобы другие могли использовать мои образы.

Команда такая:

docker commit -m "updated sa1" -a "Song" $id company/wlp:v0.1

Колледжи делают аналогичные вещи с образом, они продолжают докерить контейнер несколько раз в день.

Однажды мы собираемся развернуть образ на производстве.

Q1: Рекомендуется ли практика частых коммитов докеров?

Q2: Оставляет ли это какие-либо потенциальные проблемы позади?

Q3: Создает ли это дополнительный слой? Я прочитал документ docker-commit, в котором не упоминалось, создает ли он другой слой, я полагаю, это означает, что нет.


person Song    schedule 09.08.2018    source источник


Ответы (1)


Я бы не использовал фиксацию докера,

Это кажется действительно хорошей идеей, но вы не можете воспроизвести образ по своему желанию, как вы можете с Dockerfile, и вы также не можете изменить базовый образ после того, как это будет сделано, поэтому очень сложно зафиксировать, например, безопасность патч к базовому образу ОС.

Если вы используете полный подход Dockerfile, вы можете повторно запустить сборку docker, и вы снова получите тот же образ. И вы можете изменить базовое изображение.

Поэтому мое эмпирическое правило таково: если вы создаете временный инструмент и не заботитесь о повторном использовании или воспроизведении изображения по своему усмотрению, тогда коммит удобен в использовании.

Насколько я понимаю, Docker каждый образ контейнера состоит из двух частей: это группа слоев только для чтения, составляющих основную часть образа, а затем небольшой слой, доступный для записи, где фиксируются любые изменения.

Когда вы запускаете коммит, Docker создает новый образ, это базовый образ плюс внесенные вами изменения (созданный образ — это отдельный образ), он копирует код на тонкий доступный для записи слой. Таким образом, новый слой только для чтения не создается, он просто сохраняет дельты, которые вы делаете, в тонкий записываемый слой.

Не верьте мне на слово, возьмите Совет Redhat

Для ясности в статье на шаге 5 говорится:

5) Не создавайте образы из запущенных контейнеров. Другими словами, не используйте «docker commit» для создания образа. Этот метод создания изображения нельзя воспроизвести, и его следует полностью избегать. Всегда используйте Dockerfile или любой другой подход S2I (от источника к образу), который полностью воспроизводим, и вы можете отслеживать изменения в Dockerfile, если вы храните его в репозитории системы управления версиями (git).

person krystan honour    schedule 09.08.2018