Ответ 1
Стратегия контейнера:, это часто задаваемый вопрос. Это действительно зависит от того, что вы хотите делать с вашим приложением.
- Если ваше приложение будет иметь большое количество развертываний (например, если ваше приложение является SAAS и вы будете развертывать один новый экземпляр для каждого клиента), но эти развертывания, как ожидается, будут довольно небольшими, тогда вы можете захотеть поместить все в один контейнер, потому что развертывание будет намного проще.
- Если ваше приложение может быть значительно масштабировано (т.е. если вы ожидаете, что вам потребуется несколько фронтов, работников и т.д.), вы, вероятно, захотите разместить каждую службу в другом контейнере, чтобы вы могли масштабировать каждую услугу отдельно.
- Если ваше приложение будет иметь большое количество развертываний и должно масштабироваться, вам понадобится несколько контейнеров и убедитесь, что вы правильно используете ссылки: -)
Dockerfile: вам нужен один файл Docker для каждого изображения. Итак, если вы создаете контейнер "все-в-одном", это один файл Dockerfile; если вы разложите приложение в нескольких контейнерах с разными ролями (Redis, DB, Web...), которые так много разных файлов Docker.
Dev vs Prod:, это действительно зависит от языка/рамки/и т.д. что вы используете.
- Иногда вы можете работать на локальной машине и время от времени создавать контейнеры (и тестировать их) (немного похоже на то, что вы будете "тестировать, чтобы нажать на этап", за исключением того, что он намного быстрее).
Это хороший подход, если для создания новых контейнеров требуется некоторое время (например, если вы используете
ADD
, за которым следуют дорогие шаги сборки/зависимости). - Если сборки контейнеров бывают быстрыми, вы можете перестраивать + повторно развертывать новые контейнеры непрерывно, каждый раз, когда вы что-то меняете.
- Вы также можете использовать два немного разных Dockerfiles. Предположим, что ваш источник будет в
/myapp
. В разработке Dockerfile вы объявите/myapp
какVOLUME
, и разработчик должен будет привязать локальную копию источника к/myapp
. В файле Dockerfile вы будете использоватьADD
для копирования источника в/myapp
. Также будут незначительные различия в процессе сборки.
Последний метод не идеален (так как лучше, когда среды dev и prod максимально близки!), но в некоторых случаях (при создании нового контейнера очень много) это помогает много.