Ответы пользователя по тегу Docker
  • Как пофиксить ошибку 502 Bad Gateway в nginx?

    @Akela_wolf
    Extreme Programmer
    Ну, очевидно, проблема именно в том что back падает. Нужно исправить, чтобы не падал.
    А почему и как именно он падает - надо смотреть в его логи, вы про этот сервис рассказали ровным счетом ничего.
    Ответ написан
    5 комментариев
  • Как перезапустить nginx.conf?

    @Akela_wolf
    Extreme Programmer
    docker-compose up --force-recreate

    RTFM
    Ответ написан
    Комментировать
  • Где хранить документы сертификаты при использовании докера?

    @Akela_wolf
    Extreme Programmer
    Вы можете любой файл смонтировать внутрь контейнера. У меня так конфиг nginx "проброшен".
    Так что положите их где-нибудь рядом с docker-compose.yaml (в одну из папок) и пробрасывайте контейнеру.
    Ответ написан
    Комментировать
  • Могу ли я подключить docker к проекту spring (и вообще к любым проектам) после окончания его разработки?

    @Akela_wolf
    Extreme Programmer
    Неважно. В любой момент вы можете собрать ваш проект в docker image и далее использовать его любым угодным вам образом.

    В случае spring (и вообще java/kotlin), см. jib-gradle-plugin или jib-maven-plugin в зависимости от используемой системы сборки.
    Ответ написан
    Комментировать
  • Правильно ли я понимаю принцип контейнера в docker?

    @Akela_wolf
    Extreme Programmer
    Да. Но соль в том, что если кто-то внесет изменения эту БД, а затем перезапустит контейнер - изменения потеряются.

    В некоторых случаях это может быть удобно. Например, так работает testcontainers - запускается контейнер с БД (в нашем случае - с готовым образом именно нашей БД), на нем выполняются тесты, затем контейнер убивается. Таким образом, тесты всегда выполняются в "чистом" окружении.

    Если же речь идет о том, чтобы кто-то мог вносить изменения в БД, то есть использовать её именно как БД - то храниться файлы БД должны не в контейнере, а снаружи от него (например на docker volume). А это означает что в передаваемом контейнере их не будет.

    Как вариант решения этой проблемы - выполнять скрипты, заполняющие БД нужными таблицами и данными при старте контейнера.
    Ответ написан
    Комментировать
  • Можно ли давать людям сервера на docker?

    @Akela_wolf
    Extreme Programmer
    Docker != VPS

    Главное отличие: VPS - это сервер к которому пользователь имеет полный доступ и может устанавливать и запускать любые программы. Docker - это инструмент для запуска единственного процесса в определенном окружении.

    Чтобы раздавать другим людям серверы нужен гипервизор. Чтобы установить гипервизор нужен полноценный сервер, а не VDS.
    Ответ написан
    Комментировать
  • Подойдет ли Docker для следующих задач?

    @Akela_wolf
    Extreme Programmer
    Ваш выбор - виртуалка. Из конкретных реализаций посмотрите Vagrant (обертка над VirtualBox). В частности умеет пересборку виртуалки с новыми версиями софта.
    Ответ написан
    Комментировать
  • Как перезапустить контейнер в докере с новыми параметрами?

    @Akela_wolf
    Extreme Programmer
    Это криво, но можно сделать docker commit, который запишет состояние контейнера в новый образ: https://docs.docker.com/engine/reference/commandli...

    Конкретно сейчас это вашу проблему решит, но вообще такая ситуация что после перезапуска контейнера данные пропадают - это использование контейнеров не по назначению. Контейнеры созданы чтобы быть stateless, то есть умирать и запускаться в любой момент (допустим оркестратор, такой как кубер, может запускать новые и останавливать существующие контейнеры в любой момент времени, в зависимости от множества условий). Поэтому лучше переделайте контейнер по фен-шую.
    Ответ написан
    Комментировать
  • Большой размер приложений в докере норм?

    @Akela_wolf
    Extreme Programmer
    Вы не очень понимаете что такое образ докера. Образ докера содержит всё для запуска приложения, кроме ядра ОС (ядро используется из хост-системы). А в зависимости от того как собирали образ - может быть и что-то лишнее, нафиг не нужное для запуска приложения. Но автору образа было лень это выпиливать из него (или он на это забил). Собственно вот и вся разница. И те библиотеки, которые у вас уже есть в системе (и которые вы не учитываете при расчетах занимаемого им места) - докер притащит с собой (это наверняка будут другие версии библиотек, но факт в том что он их с собой притащит). Например, если вы говорите о Java-приложении, в системе наверняка есть JVM. И вы увидите только размер jar-файла и каких-то обвязок вокруг него. А в докере это будет плюс JVM, плюс библиотеки для JVM, плюс, плюс, плюс... Вот и набегает размер образа.

    Общий размер образов докера можно сократить, если все образы будут использовать одну и ту же базу (в терминах докера layer). Но это отдельная тема, в которую я сейчас углубляться не буду.
    Ответ написан
    6 комментариев
  • Компьютер с какими характеристиками нужен для нормальной работы докер десктоп в винде?

    @Akela_wolf
    Extreme Programmer
    Зависит от того сколько планируется запускать контейнеров и каких
    Но из общих соображений - больше ядер процессора (8 ядер/16 потоков), больше оперативки (16 и более гигабайт)
    Ответ написан
    Комментировать
  • Как убедить докер создавать каталоги с правильными правами?

    @Akela_wolf
    Extreme Programmer
    1. Использовать volume
    2. Либо убедиться что каталог существует: mkdir -p <directory> && docker ...
    3. Либо назначить нужного владельца каталога:
    mkdir -p <directory> && chown 1000:1000 <directory> && docker ...

    Если это запускается не рутом - в п.3 потребуется использовать sudo.
    Ответ написан
    1 комментарий
  • Какой подход правильный в описании docker-compose?

    @Akela_wolf
    Extreme Programmer
    1. По ситуации. Иногда это более чем оправданно. Не стал бы возводить это в абсолют
    2. Опять же - по ситуации. Иногда требуется.
    3. Вопрос с обновлением этого самого кода. Если он лежит на volume, то обновить не проблема (в том числе и изнутри контейнера). Если он в контейнере - то потребуется пересобрать контейнер.
    4. Этого вопроса не понял.
    Ответ написан
  • Является ли Multistage build Docker образов заменой CI Pipeline?

    @Akela_wolf
    Extreme Programmer
    Тут главная идея в том, чтобы получать как можно большое обратной связи от каждого stage
    Вот, скажем, сломался у нас build - мы должны узнать об этом как можно раньше и со всеми подробностями: где, как и почему сломался.
    Аналогично lint - где, как и почему у нас нарушается code guideline.
    Аналогично test - какой тест и как именно рухнул.

    Если build docker даст вам такую же точную диагностику где что и как сломалось - собственно почему бы и да? Но лично я бы разделил на отдельные шаги, по принципу unix way. Так проще всем этим управлять будет.
    Ответ написан
    Комментировать
  • Как синхронизироваться с файлами на vps при локальной смене ветки git?

    @Akela_wolf
    Extreme Programmer
    А зачем вам гит на vps? Должен быть какой-то один "источник правды".

    Мне кажется что история должна быть такой: git server (github/gitlab/etc) -> local repository -> rsync to vps -> volume to docker

    Соответственно, когда вы меняете ветку в локальном репозитории - rsync видит изменения файлов и синхронизирует их с vps, который ничего про гит не знает - для него это просто набор файлов.
    Ответ написан
    1 комментарий
  • Как лучше запустить несколько node workers в Docker?

    @Akela_wolf
    Extreme Programmer
    Как вариант - выдать каждому воркеру свой докер-контейнер. А общий для них node_modules смонтировать как volume (я так подозреваю можно даже смонтировать как read-only).
    Ответ написан
  • Как скопировать данные с одного volume на другой?

    @Akela_wolf
    Extreme Programmer
    1. Написать Dockerfile в котором будет доступна команда cp (или взять любой подходящий)
    2. Запустить, примонтировать в него оба volume
    3. docker exec -it cp -R
    Ответ написан
    Комментировать
  • Как сделать deploy без простоя?

    @Akela_wolf
    Extreme Programmer
    Принцип следующий:
    1. Делаете контейнер с фронтом-балансировщиком (nginx или что-то подобное).
    2. Запускаете второй контейнер с бэком, содержащий новую версию.
    3. Новый контейнер подключается к балансировщику. Тут дальше возможны варианты - балансировщик автоматически начинает переводить траффик на новую версию. Или в каком-то соотношении. Или только тестовый трафик. Или переключаете балансировщик на новый контейнер вручную. Или... (в общем вариантов тут много). Идея в том, чтобы перейти в целевое состояние - запросы обрабатывает новый бэкэнд. На этом этапе старая и новая версия бэкэнда должны уметь работать параллельно, то есть часть запросов может обрабатываться старой версией, часть новой, что налагает на новую версию требование сохранения обратной совместимости со старой версией (в частности это ограничивает возможные изменения структуры БД). В любой момент, если новая версия заработала как-то не так, можно "вертать всё взад", то есть опустить контейнер с новой версией и вернуть весь трафик на старую.
    4. Убедившись что новая версия работает стабильно, переводите с балансировщика весь трафик на новую и опускаете контейнер со старой версией, оставляя контейнер с новой единственным.

    Не очень понимаю что вы подразумеваете под контейнером с фронтендом, если это просто веб-сервер, который раздает SPA-приложение (HTML/CSS/JS), то в принципе аналогично.

    Схема такого апгрейда не слишком проста в реализации, поэтому такой апгрейд (zero-downtime upgrade) применяется в энтерпрайзе, в котором никак нельзя допустить простоя в обслуживании. Поэтому смотрите сами - насколько те несколько секунд (максимум минут) простоя за которые запускается новый контейнер стоят этой возни. Если такой апгрейд действительно нужен, то советую вместо docker compose посмотреть в сторону kubernetes.
    Ответ написан
    2 комментария