Skip to content
algolia

Docker Compose Helpers

Кол-во слов
377 words
Время чтения
3 минуты

Порты

Старайтесь создавать порты по возрастание с интервалом в 10. Оставляйте свободные порты на будущее. Докер умеет присваивать автоматически незанятый порт если прописать 0. Но я рекомендую прописывать вручную.

ENV VARS

Старайтесь хранить все переменные в отдельном .env (/assets/docker/s1/.env.intra) файле

Entrypoints

Некоторые контейнеры позволяют пробрасывать файлы для инициализации. В случае если нету entrypoint используйте command: "Ваша баш команда", но в этом случае команда будет срабатывать всегда при перезапуске контейнера, используйте баш проверки

yaml
    volumes:
      - entry_db:/docker-entrypoint-initdb.d

У postgress можно заметить volume для создания стартовой точки. Если посмотретить доки она рассчитана на sh файл или sql. Я положил sql файл который создает пользователя docker с правами на работу с базой intra, необходимой для внутренних ресурсов. Чтобы в portainer volume добавить файлы, читайте в спойлере про docker agent

WARNING

Обратите внимание на название volume после создание стэка. Контейнеры имеют собственную привязку к volume!

Проверка здоровья

Если взглянуть на заготовку файла можно заметить весьма нестандартные вещи, крайне необходимые для наших приложений в проде, например параметр healthcheck.

У серверной части разработчики по идеи должны прописывать маршруты для проверки состояния. Самый простой это отправить запрос курлом в стиле /healthcheck и получить ответ OK. Данный подход лучше, чем пинговать ресурс или отправить curl на главную страницу (там нас ждёт лишний мусор в виде html, к тому же разработчики могут повесить проверки на внутренние сервисы и утилиты).

Однако это не гарантирует что все маршруты работают 100% исправно. Операции происходят ни только на сервере, но и у клиента в браузере. Проверять через определенные интервалы времени занятие весьма дорогое, поэтому большая часть тестов проводится каждый раз при сборке приложения (good: слияние веток с основной или с best: тестовой).

Под исключение попадает запросы к чужому API, их нужно прописывать к healthcheck (желательно на стороне разрабов). Такое API может оказаться недоступным в непредсказуемый момент.

Лимиты

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

yaml
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

Contributors

shalotts

Changelog

Last updated: