Ответы пользователя по тегу Docker
  • Как сохранить свои изменения во взятом Docker-образе для последующего повторного использования?

    Несмотря на возможность сделать docker commit, то, что Вы получите в результате, будет чёрным ящиком, который непонятно каким образом создан. Хорошая практика в данном случае заключается в том, чтобы описать все изменения, которые Вы производите в контейнере, с помощью Dockerfile-а. Этот Dockerfile можно будет сохранить в системе контроля версий, провести его ревью, модифицировать, воспроизвести в сборочном конвеере.

    Да, под капотом на каждую строчку в Dockerfile-е происходит вызов docker commit, но важно то, что в этом случает сохраняется источник этих изменений.

    Не знаю, как точно настраивается FreePBX, но Вам может понадобиться, например, использовать envsubst для применения переменных окружения, с которыми запущен контейнер, к конфигурационным файлам. А может потребоваться сделать стартовый .sh-скрипт, который при запуске произведёт нужные
    конфигурационные действия.

    В случае использования переменных окружения также очень полезно в скрипте запуска проверить, заданы ли они, и если нет - упасть с осмысленным сообщением об ошибке:
    echo MY_ENV_VAR "${MY_ENV_VAR?MY_ENV_VAR is required!}"
    Ответ написан
    Комментировать
  • Подойдет ли docker для сложного приложения?

    Docker Compose, как писали в комментариях, решает проблему запуска всего этого в определённой конфигурации на одной машине.

    В продакшене у Вас будет несколько машин. MongoDB, вероятно, будет отдельно. Можно использовать Docker Swarm или Kubernetes. На вкус и цвет. Для Сворма конфг очень похож на конфиг для Docker Compose, только значения, специфичные для окружения, будут другими. Kubernetes тоже конфигурируется YAML или JSON описаниями разнообразных сущностей. Если есть Kubernetes-как-сервис - берите, не пожалеете. А можно вообще обойтись конфигурациями SystemD, которые будут запускать нужные контейнеры. Тогда всё это можно будет описать в unit-файлах SystemD и положить в правильные папочки на Линуксе.

    С версионированием всё просто.

    Во-первых, нужно определиться с репозиторием Докер-образов. Можно и свой развернуть из доступных вариантов (и родной Docker Registry, и Atomic Registry, и Nexus, и GitLab - это всё Open Source). А можно воспользоваться сервисами Docker Hub, Google Container Registry, Quay.io или Amazon.

    Во-вторых, после очередного коммита можно с помощью CI-движка собирать новый образ, присваивать ему тег с очередным номером версии, а в лейблы записывать, из какого коммита он собран.

    Дальше достаточно поправить декларативное описание вашего окружения - там фигурируют образы с тегами. И - вот она, новая версия. И новый файл для Docker Compose.

    Резюме: с Докером эту проблему решить гораздо проще, чем как-либо иначе. То есть, можно с таким же успехом упаковать всё это в несколько полновесных виртуалок, но память имеет свойство заканчиваться.
    Ответ написан
    Комментировать
  • Как отслеживать состояние внутри Docker контейнера?

    Вам следует создавать Docker-контейнер таким образом, чтобы в нём работал один ключевой процесс (у которого будет PID 0), завершение которого означает завершение работы контейнера. Код выхода этого процесса будет кодом выхода контейнера. Вы сможете увидеть его в выводе `docker ps --all`. Подробнее здесь: each-container-should-have-only-one-concern. Это не означает, что в контейнере должен быть всего один процесс, но должен быть один такой процесс, жизненный цикл которого неразрывно связан с жизненным циклом контейнера.

    Логи этот процесс должен писать в STDOUT и STDERR - тогда Вы их сможете увидеть с помощью `docker logs ` и перенаправить куда надо с помощью драйвера логирования, настроенного в Докер-демоне. Подробнее здесь: View a container's logs
    Ответ написан
    Комментировать