Могут ли контейнеры иметь общую структуру?

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

1 ответ

Решение

Да, вы можете, что вы обычно делаете

Альтернатива А:

создайте образ busybox и скопируйте ваш фреймворк, выставьте местоположение как том VOLUME /opt/framework/

FROM alpine
COPY framework /opt/framework
VOLUME /opt/framework
COPY busyscript.sh /usr/local/bin/busyscript
RUN chmod +x /usr/local/bin/busyscript
CMD ["busyscript"]

В то время как busyscript.sh похоже

#!/bin/sh
#set -x

pid=0

# SIGTERM-handler
term_handler() {
  if [ $pid -ne 0 ]; then
    kill -SIGTERM "$pid"
    wait "$pid"
  fi
  exit 143; # 128 + 15 -- SIGTERM
}

# setup handlers
# on callback, kill the last background process, which is `tail -f /dev/null` and execute the specified handler
trap 'kill ${!}; term_handler' SIGTERM

echo "Started code"
# wait forever
while true
do
  tail -f /dev/null & wait ${!}
done

Добавьте это изображение в качестве службы в ваш docker-compose.yml, как, скажем, "framework", а затем в службах, которые вы хотите, чтобы они потребляли, вы добавляете

volume_from
  - framework:ro

Плюсы:

  • Вы можете скомпилировать, собрать и развернуть Framworks Soley
  • для выполнения этого дополнительного контейнера более или менее отсутствуют накладные расходы

Против:

  • размер изображения (альпийский, 30 МБ)

Альтернатива B Вы используете один из своих сервисов в качестве "основы фреймворка", скажем, сервис A, что означает, что вы копируете фреймворк в этот сервис (один из двух, использующих его), а также снова используете VOLUME /opt/framework выставить его как объем

в сервисе B, так же, монтируешь том

serviceB:
  volume_from
    - serviceA:ro

Pro:

  • без дополнительного контейнера

Против:

  • фреймворк должен быть развернут с помощью serviceA, независимо от того, требуется ли обновление службы A
    • у вас есть зависимость от A, нужно ли обновление A, все остальные контейнеры должны быть воссозданы из-за общего ресурса
Другие вопросы по тегам