Во-первых, обычно рекомендуется разделять проблемные области, используя одну услугу на контейнер. Так что для wordpress, mysql etc
лучше использовать несколько сервисов.
Но эти сервисы используют одно или несколько изображений, это полностью зависит от вашего сценария.
Фактически, вы можете поместить все вещи в один собственный образ и указать разные команды в образе для разных сервисов docker-compose. Э.Г.
services:
db:
image: your_own_solo_image
command: the command to start db
wordpress:
image: your_own_solo_image
command: the command to start wordpress
depends_on:
- db
Недостаток использования одного изображения:
Может быть, одному контейнеру просто нужно небольшое базовое изображение, например, Alpine, другому контейнеру требуется Ubuntu, но с унифицированным образом (скажем, Ubuntu), когда два контейнера запускаются, все они будут использовать Ubuntu, возможно, некоторые дополнительные потери памяти, так как Ubuntu будет потреблять больше ресурсов по сравнению с Alpine.
Вы можете столкнуться с конфликтом библиотек, например, для container1 (service1) требуется lib.so.1
, а для container2 (service2) может потребоваться lib.so.2
, вам, возможно, придется самостоятельно обрабатывать LD_LIBRARY_PATH
. Если вы разделяете изображения, здесь нет проблем.
Преимущество использования одного изображения:
- Иногда вам может потребоваться разделить службу (команду) на разные контейнеры, но две команды действительно очень зависят от одного и того же исходного кода одного проекта, и среда все одинакова, поэтому нет необходимости использовать разные изображения для разных контейнеров ( другой сервис в сочинении). Одним из примеров является проект django, вы можете запустить wsgi в одном сервисе, но также можете запустить работника celery в другом сервисе, но при этом использовать тот же код вашего проекта django.