Docker Compose Helpers
Порты
Старайтесь создавать порты по возрастание с интервалом в 10. Оставляйте свободные порты на будущее. Докер умеет присваивать автоматически незанятый порт если прописать 0
. Но я рекомендую прописывать вручную.
ENV VARS
Старайтесь хранить все переменные в отдельном .env (/assets/docker/s1/.env.intra) файле
Entrypoints
Некоторые контейнеры позволяют пробрасывать файлы для инициализации. В случае если нету entrypoint используйте command: "Ваша баш команда"
, но в этом случае команда будет срабатывать всегда при перезапуске контейнера, используйте баш проверки
volumes:
- entry_db:/docker-entrypoint-initdb.d
У postgress
можно заметить volume для создания стартовой точки. Если посмотретить доки она рассчитана на sh
файл или sql
. Я положил sql
файл который создает пользователя docker с правами на работу с базой intra
, необходимой для внутренних ресурсов. Чтобы в portainer volume добавить файлы, читайте в спойлере про docker agent
WARNING
Обратите внимание на название volume после создание стэка. Контейнеры имеют собственную привязку к volume!
Проверка здоровья
INFO
Если взглянуть на заготовку файла можно заметить весьма нестандартные вещи, крайне необходимые для наших приложений в проде, например параметр healthcheck.
У серверной части разработчики по идеи должны прописывать маршруты для проверки состояния. Самый простой это отправить запрос курлом в стиле /healthcheck и получить ответ OK
. Данный подход лучше, чем пинговать ресурс или отправить curl
на главную страницу (там нас ждёт лишний мусор в виде html, к тому же разработчики могут повесить проверки на внутренние сервисы и утилиты).
Однако это не гарантирует что все маршруты работают 100% исправно. Операции происходят ни только на сервере, но и у клиента в браузере. Проверять через определенные интервалы времени занятие весьма дорогое, поэтому большая часть тестов проводится каждый раз при сборке приложения (good
: слияние веток с основной или с best
: тестовой).
Под исключение попадает запросы к чужому API, их нужно прописывать к healthcheck (желательно на стороне разрабов). Такое API может оказаться недоступным в непредсказуемый момент.
Лимиты
Разработчики могут использовать ресурсы выше стандартных норм, однако это не всегда оправдано. Прожорливый контейнер может отразиться на работе других сервисов, старайтесь прописывать максимально значение
version: "3.4"
services:
node:
image: USER/Your-Pre-Built-Image
...Прочие опции
deploy:
resources:
limits:
cpus: '0.001'
memory: 50M
reservations:
cpus: '0.0001'
memory: 20M