Ответы пользователя по тегу Docker
  • Почему не получается установить Docker?

    trapwalker
    @trapwalker
    Программист, энтузиаст
    --dry-run убери=)
    О в комментах уже ответили оказывается.
    Ну, короче, это такой флаг, который позволяет что-то проделать "пешим по-конному", так сказать. Типа всё скачает, всё проделает понарошку, выхлоп будет адекватный как по-настоящему, но без аффекта на реальной системе, без записи.
    Ответ написан
    Комментировать
  • Как преобразовать команду из консоли в yaml файл для docker?

    trapwalker
    @trapwalker
    Программист, энтузиаст
    А для чего? У вас много таких клманд и нужно их массово превращать в ямлы? Одну-две можно и руками мгновенно оформить.
    Где это вам в промышленных масштабах так надо ковертить?

    В общем, пробдема-то не большая. Такой скрипт можно написать легко, вопрос зачем? Он хоть и пишется не намного дольше самого ямла руками, но зачем?
    Ответ написан
    2 комментария
  • Какие преимущества у docker?

    trapwalker
    @trapwalker
    Программист, энтузиаст
    Основное, что дает докер - это изоляцию частей вашей системы друг от друга. За счет этого гораздо проще всё настраивать.
    - БД настраивается в отдельном докер-контейнере. В большинстве случаев вы используете стандартный образ и подаете ему только настройки.
    - nginx настраивается в отдельном контейнере вместе с certbot'ом, который будет обновлять вам сертификат ssl.
    - бэкенд поднимаетя в отдельном контейнере на стандартном порту (и порт не будет конфликтовать с другими бэкендами в других контейнерах на том же порту.
    - другие какие-то бэкенды и админки будут рядом сидеть в отдельны контейнерах и не будут конфликтовать друг с другом версиями библиотек. интерпретаторов и чего угодно
    - компиляция и сборка тоже делаются в контейнере, который не запускается в прод, но обеспечивает иоляцию этого процесса так, что другие разработчики легко приступят к работе без долгой и уникальной настройки своего рабочего места.

    Весь набор нужных контейнеров для проекта конфигурируется docker-compose файлом и в большинстве случаев при правильной настойке чтобы поднять дев-стенд или продакшн вам достаточно будет склонировать репу на комп и скомандывать docker-compose up.

    Про слои и переиспольование почитайте в документации к докеру. Докер-образы наследуются накладывая свои изменения слоями. Это экономит место на диске и упрощает всю систему минимизируя число возможных состояний.
    Вся файловая система контейнера не примонтированная извне будет стёрта и забыта при перезапуске контейнера. Так можно быть уверенным, что ваш бэкенд не оставляет лишних неучтенных побочных эффектив. Это упрошает отладку и поиск проблем.
    Ответ написан
    2 комментария
  • Где лучше хранить БД? В докере или нет?

    trapwalker
    @trapwalker
    Программист, энтузиаст
    Дополню немного ответ Dr. Bacon, поскольку мне кажется он не так понял ваш вопрос, а вы, возможно, не так поняли суть проблемы.
    Под БД, например постгрес, обычно понимают две разные вещи:
    1) сами данные в файловой системе,
    2) сервер базы данных, который реализует сетевой интерфейс для работы с БД и правильным образом кладёт и читает данные в файловой системе.

    Так вот, сервер можно развернуть ка кна хостовой машине (как вы сказали "локально"), так и в докер-контейнере.
    Файлы БД можно разместить как в файловой системе контейнера, так и в локальной файловой системе, примонтированной внутрь контейнера.
    И тут полно нюансов.
    Давайте начнём с того, как правильно.
    Правиьным будет взять стандартный докер-образ сервера БД, сконфигурировать его через компоуз-файл, а размещение файлов БД примонтировать в виде отдельного volume.

    Что имел в виду Dr. Bacon. Он имел в виду, что если не монтировать файлы БД в volume, то они будут лежать внутри контейнера, а значит при его перезапуске все данные будут стерты, поскольку состояние файловой системы контейнера не принято хранить. Это одно из преимузеств докера - сделал образ унаследовав его от других образов, а потом при запуске контейнера он какждый раз как новенький.
    Ответ написан
    Комментировать
  • У меня на удаленном VDS работает сайт НЕ в докере, могу ли я как-то удаленное окружение самостоятельно поместить в докер, и запустить локально?

    trapwalker
    @trapwalker
    Программист, энтузиаст
    Для пошагового гайда или даже более-менее полезного ответа вы не предоставили почти никаких данных.
    Смысл докера в изоляции отдельных сервисов и программ в отдельных контейнерах так, чтобы они не конфликтовали за ресурсы (порты, файловую систему, зависимости от библиотек) и никак не мешали друг другу.
    LAMP - это линукс, апач, mysql, php. Если всё делать в докере, то у вас будет отдельный контейнер для БД. Его можно без изменений брать с докерхаба стандартный.
    Не разбираюсь в этих ваших ПХП, но если бы бэк у меня был на питоне, я бы использовал nginx и тоже подняол бы его в отдельном контейнере. ьно бэкенд тоже поднимал бы в отдельном контейнере. Всё это оркестрировал бы докер-компоцзом.
    Вам следет пойти на гитхаб и поискать пример LAMPовых проектов, с компоуз-файлом. Какие-нибудь популярные, простые и звездатые. Там и подсмотрите как организовать всё.

    Просто брать всё что у вас на ВПС и пихать в один контейнер смысла нет.
    Ответ написан
    3 комментария
  • Как организовать docker-compose для микросервисов на локальной машине для разработки?

    trapwalker
    @trapwalker
    Программист, энтузиаст
    Основное отличие микросервисов от монолита в том, что они более автономны и изолированны друг от друга. Общаться между собой они, кстати, могут не только по http, чаще это происходит через очереди RMQ или кафку какую-нибудь.
    Если несколько микросервисов у вас будут хранить данные в одной БД или вообще в одной таблице, то это несколько ухудгает изоляцию и ваша микросервисаня архитектура снова начинает пахнуть монолитом, только затейливым таким монолитом, поскольку, возможно, вы на следующих этапах захотите вынести общий код из микросервисов в какие-то библиотеки, начнете импортировать одни и те же модели разными "микросервисами". И получите в итоге тот же монолит со всеми его недостатками, а достоинства микросервисной архитектуры потеряете, приобретя при этом её недостатки.

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

    Для разработки и отладки вы обычно изолированы в своём микросервисе, вам может быть достаточно для девелоперских нужд докер-компоуза, который поднимет вам БД, nginx, очереди и что вам там еще надо для нужд локальной отладки и тестирования.
    Ответ написан
    Комментировать
  • Как передать команду наружу из Docker контейнера?

    trapwalker
    @trapwalker
    Программист, энтузиаст
    А зачем вы это пытаетесь делать? Судя по всему вы просто не понимаете чего хотите.
    Докер у вас доступен в терминале хоста. Сам контейнер ничго про докер не знает и не должен знать.
    Очень странно хотеть из терминала контейнера пытаться что-то сделать с докером.
    Если отвечать на вопрос буквально, то можно сделать ssh-соединение с хостом, но после жтого вы уже в терминале хоста через ssh, а не в терминале контейнера непосредственно.
    Ответ написан
    3 комментария
  • Не могу приконектится к MySQL который Докере, при этом сам код отдельм проектом без докера, в чем проблема?

    trapwalker
    @trapwalker
    Программист, энтузиаст
    Много вопросов:
    - почему вы экспозите не тот же порт, который мапите наружу?
    - как сконфигурирована БД (database.env)? Может быть там порт не указан и сервер внтури контейнера слушает стандартный порт?
    - а БД в контейнере точно существует? Вы её инициализировали?
    Ответ написан
    Комментировать
  • Крупная БД на docker?

    trapwalker
    @trapwalker
    Программист, энтузиаст
    хорошая идея всё делать в докере. Во многом упрощает жизнь при развёртывании.
    Ответ написан
    Комментировать
  • Необходимо ли выносить docker окружение в отдельный репозиторий?

    trapwalker
    @trapwalker
    Программист, энтузиаст
    Правильно - хранить код в одном репозитории.
    На проде не требуется даже иметь гит или что там у вас в качестве системы контроля версий.
    Нужно настраивать CI/CD так, чтобы в контейнер на прод выкатывались только нужные файлы и каталоги, ничего лишнего.
    Очень удобно, когда в девелоперском окружении код работает без докера, но сопутствующие вещи вроде БД и прочих сервисов удобно держать в контейнерах и на девелоперской машине. Так проще развёртывать среду разработки и быстрее вводить сотрудников в процесс. Технически нет особых проблем, чтобы настроить удалённую отладку прямо внутри контейнера. так можно приблизить девелоперское окружение к продовой конфигурации.

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

    Храните всё, что нужно для CI/CD в том же репозитории где код. Там же у вас лежат тесты (не нужные в продакте), вспомогательные скрипты, артефакты тулинга и прочее.
    Поищите, в гитхабе есть много так называемых "КукиКаттеров". Это инструмент, для шаблонизации проектов на разных стеках. Как правило в созданной по такому шаблону заготовке проекта уже есть всё не обходимое для CI/CD.
    Ответ написан
    6 комментариев
  • Как организовать работу с mongodb и докером на локалке и сервере?

    trapwalker
    @trapwalker
    Программист, энтузиаст
    Ни в коем случае не пушить туда-сюда.
    • В идеальном случае ваш проект должен поддерживать миграции:
    • Каждая ревизия кода, которая нарушает совместимость с БД относительно предыдущей, должна содержать скрипт миграции. В этом скрипте создаётся структура, модифицируются старые данные, переименовываются поля и т.д. Иногда такие скрипты делают двунаправленными, чтобы поддерживать обратные миграции.
    • В БД нужно хранить версию или номер ревизии, которой соответствует текущее состояние БД.
    • При запуске приложения нужно проверять версию и выполнять цепочку миграций, необходимых для приведения версии к требуемому состоянию.

    Так вы можете добиться того, чтобы продуктовая БД была отдельно, тестовая отдельно, девелоперская отдельно. Очень плохая идея работать на девелоперской машине с данными из продовой базы. Так происходят утечки перс-данных.

    Монга - это schema less БД, которая толерантно относится структуре коллекций и не валится при запросе несуществущих полей. Нужно стараться писать код максимально толерантно к отсутствию наполнения БД.

    В любом случае у вас в БД есть обычно:
    1. структура (в случае монги, как я уже сказал, это не так важно)
    2. справочники
    3. пользовательские данные
    4. производные данные (кэш), которые можно безболезненно удалить, а затем они перегенерятся сами по мере запросов.

    Нужно писать код так, чтобы он всю структуру и технические справочники, отсутствующие в предоставленной БД и необходимые для работы, умел инициализировать сам. Или, на худой конец, сделайте команду или скрипт init_db.

    Если какие-то тестовые данные нужны для тестов или отладки, то можно сделать скрипт, который заполнит БД ими. Это называется фикстуры.

    Никогда не храните код в БД. Всякие хранимые процедуры и прочее в БД - это зло. Код должен быть в системе контроля версий, а БД к этому не приспособлены. Если уж нужны хранимки, то храните их в системе контроля версий и заливайте их в БД при инициализации или миграциями.
    Ответ написан
    2 комментария
  • Как организовать работу над проектами из любого места?

    trapwalker
    @trapwalker
    Программист, энтузиаст
    Вы, видимо, не так понимаете суть современных систем контроля версий.
    1. Вы настраиваете работающее окружение на работе и дома.
    2. Делаете клоны проекта на работе и дома.
    3. Работаете над проектом, каждое осмысленное изменение коммитите и время от времени отправляете в центральный репозиторий на гитхабе. Каждый раз приступая к работе обновляете локальный клон и продолжаете работать. Если фича требует много изменений, то вы можете сделать несколько коммитов в отдельную ветку и залить ветку на сервер. На другом компе вы тоже можете работать с этой веткой. Ветка лично ваша. У вас может быть много веток. Когда закочите работу над фичей - подольёте изменения в мастер.
    Ответ написан
  • Как запустить проект в docker?

    trapwalker
    @trapwalker
    Программист, энтузиаст
    Просто добавить в папку проекта Dockerfile и там прописать все?

    Забавно, но... ДА!
    Ответ написан
    Комментировать