Ответы пользователя по тегу Docker
  • Стоит ли использовать Docker в продакшене для нескольких сайтов на одной VPS?

    saboteur_kiev
    @saboteur_kiev
    software engineer
    Для сайтов - нет смысла.
    Докер для развертывания удобен в случае различных кастомных настроек, установки плагинов и так далее. А банальный nginx+php разворачивается на любой ОС очень быстро.

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

    Кто мешает выделить отдельный volume для базы данных без всяких докеров?
    Это может быть какой угодно volume - раздел, виртуальный диск, рейд, что угодно.

    Либо использовать Докер только в крупных проектах которые размещаются на отдельных VPS.

    IMHO докер вообще для сайтов не лучшее решение. А самое крутое преимущество докер получает вместе с оркестрацией типа kubernetes/openshift, когда десятки и сотни приложений/микросервисов.
    Ответ написан
    Комментировать
  • Зачем образу докера операционная система?

    saboteur_kiev
    @saboteur_kiev Куратор тега Системное администрирование
    software engineer
    Нет, докер не работает с системой на которой установлен. Он использует ее ядро, а дальше - зависит от докер образа.
    Ответ написан
    Комментировать
  • Какие существуют подходы при организации загружаемых пользователями файлов с использованием Docker, но без сторонних сервисов (таких как AWS Bucket)?

    saboteur_kiev
    @saboteur_kiev
    software engineer
    Странные рассуждения.

    например Nginx. Так как в случае с Docker это не означает покупку ещё одного сервера,

    И без докера, это не обязательно означает покупку еще одного сервера.

    Вы юзаете докер не очень обособленно. Видимо просто чтобы запускать каждое приложение в контейнере без установки его на целевом VPS. Но если вы оперируете именно понятием VPS, то можно и без докера.

    На сегодня Docker чаще это просто промежуточный кирпичик по пути в оркестрацию контейнерами кубером или опенщифтом. А в этом плане, гораздо лучше все-таки отталкиваьтся от бест практик, а именно S3 бакет.
    Можно рамдиск для аплоад папки из которой отдельный процесс будет перекладывать в s3 с какими-то промежуточными действиями (регистрация в базе, проверка антивирусом, проверка формата файлов, чтобы не битый был)

    Собственно именно использование сервисов (s3/nexus/artifactory), а не дисков/волумом и позволяет не ковыряться в настройках виртуалки/инфраструктуры, потому что вы для всего пользуетесь именно сервисами, а не кусками инфраструктуры и железа.
    Ответ написан
    Комментировать
  • Что такое Docker простыми словами?

    saboteur_kiev
    @saboteur_kiev
    software engineer
    Надо тебе запустить три-четыре процесса (веб сервер, базу, какой-нить бот, какой-нить брокер и логер). Они могут требовать разные зависимости.

    Можно разработку вести так, чтобы все компоненты запускались в одном окружении и следить за этой совместимостью.
    А можно просто каждый процесс запустить на отдельной виртуалке только для этого процесса, и если вдруг что, каждый можно переносить, апгрейдить и оптимизировать для него окружение независимо.

    Ядро операционной системы умеет делать "контейнер", и процесс внутри этого контейнера думает что он в этой "операционке" единственный, сразу после ядра.
    Ему подсовывается виртуальная файловая система, сетевые интерфейсы, дерево процессов коротенькое, он не видит ничего и думает что он запущен в отдельной виртуальной машине.

    А технически - ядро одно на все процессы плюс виртуализация файловой и сетевой подсистемы, что гораздо дешевле чем еще одна целая виртуальная машина с целой операционкой для каждого процесса.
    Ответ написан
    Комментировать
  • Как запустить php и nginx в одном контейнере?

    saboteur_kiev
    @saboteur_kiev
    software engineer
    Приложение же состоит из одного файлика index.php и выводит текст "Hello World!".


    php не умеет выводить текст в браузер. Это значит что в первом докерфайле уже устанавливается какой-то веб сервер, возможно httpd

    можно конечно просто установку nginx-а в первый докерфайл перенести, но надо разобраьтся как его состыковать с php-fpm.

    А еще проще найти готовый. связка nginx с php достаточно стандартная сборка, уверен есть официальный образ, еще и не один от разных вендоров.
    Ответ написан
    5 комментариев
  • Docker в Windows, Linux переводы строк, как правильно?

    saboteur_kiev
    @saboteur_kiev Куратор тега Windows
    software engineer
    непонятна ваша проблема.
    Переводы строк в линукс виде - совершенно корректно.
    Логи нормальные, что именно не так, где именно проблема - не указано.
    Виндовый блокнот не умеет в линукс перевод строк?
    Какая винда? у меня под блокнот нормально все делает
    Ну или открывай не блокнотом
    Ответ написан
    Комментировать
  • Как сжать базу данных в mongodb?

    saboteur_kiev
    @saboteur_kiev Куратор тега Ubuntu
    software engineer
    можно чистить коллекции командой compact, может немного просесть перформанс, поэтому лучше выбрать время когда поменьше нагрузки

    коннектишься к монге, выбираешь базу, выбираешь коллекцию и вперед

    use mybase
    db.runCommand( { compact: "mycollectionname" })
    Ответ написан
    Комментировать
  • Почему служба Jenkins занимает порт, но не запускается?

    saboteur_kiev
    @saboteur_kiev Куратор тега Linux
    software engineer
    service jenkins start

    вот на этом моменте нужно найти старт-скрипт дженкинса или его unit файл, и посмотреть что внутри происходит.
    Подозреваю, что там тупо лажа с определением как найти запущенный дженкинс. МОжет связано с путаницей местоположения PID файла, или просто кривой скрипт.
    Ответ написан
  • Как поставлять ssl сертификаты для docker image nginx в gitlab ci?

    saboteur_kiev
    @saboteur_kiev
    software engineer
    Сертификаты не должны быть частью docker image, и должны монтироваться снаружи. Тогда обновление сертификата не будет требовать нового билда продукта.
    Прокидывать снаружи их можно через mount
    Тогда обновил сертификат на маунте и перезапустил контейнер.
    Если жить в кубере/опенщифте - там сертификат можно в секрете хранить и монтировать как файл.
    Ответ написан
    Комментировать
  • Что лучше для Jenkins: использовать ECS в качестве слейвов или на мастере использовать docker image?

    saboteur_kiev
    @saboteur_kiev
    software engineer
    На самом деле лучшего тут нет - надо всегда адаптироваться под ваши задачи и ваш проект.
    Поднимать дополнительные слейвы в ECS имеет смысл, если у вас много билдов, много тестов, и они стоят денег.

    В сложном проекте конфигурация может выглядеть так:
    Мастер крутится в своем более-менее стабильном контейнере и рулит исключительно задачами, воркеров не запускает.
    Есть несколько видов подготовленных контейнеров для слейвов - для сборки и для тестов, с разной конфигурацией. В некоторых случаях можно даже тут сделать разные контейнеры для сборки nodejs, сборки питона, тестов, и например контейнер для performance тестов.
    Во время пайплайна нужные шаги выполняются на нужном слейве, а слейвы динамически поднимаются, если очередь вырастает и также автоматически уничтожаются, когда они не нужны. Например если контейнер поднимается за 1-2 минуты, то при простое в 20-30 минут его можно тушить. Так вы и сократите время билдов, когда их много, и сэкономите деньги на ресурсах, когда они простаивают.

    А в простом проекте, где у вас все может собираться и тестироваться на одном и том же контейнере, а билды длятся не часы а десяток минут максимум, можно и не усложнять и не заниматься оверинженерингом, все клепать на нескольких мастер воркерах.
    Ответ написан
    Комментировать
  • Docker: принято ли ставить на продакшене?

    saboteur_kiev
    @saboteur_kiev
    software engineer
    Что значит "принято". Это зависит от проекта и ваших предпочтений.
    Нет явных общепринятых решений, так как одинаковых проектов немного.

    Если у вас единственное приложение, то под него можно просто настроить сервер и без докера и с докером.
    Если компонентов очень много, то чистый докер уже будет мало и сложно, нужно использовать оркестратор (кубернетес или опенщифт). Но можно и просто виртуалки/железки настроить.
    Докер налагает свои моменты, но упрощает поддержку на будущее.
    Ответ написан
    Комментировать
  • Как в докер установить ubuntu?

    saboteur_kiev
    @saboteur_kiev Куратор тега Ubuntu
    software engineer
    докер это контейнер для запуска конкретного приложения в определенной среде, а не для запуска операционной системы. Что система будет делать в контейнере? Какой конкретно процесс от системы вы хотите запустить в докере?

    Для запуска операционной системы есть виртуальные машины, а докер - в принципе суть заключается в том, что запускается конкретный процесс, в изолированной среде, в текущей ОС.
    Ответ написан
    Комментировать
  • Как сделать readinessProbe по тексту файла?

    saboteur_kiev
    @saboteur_kiev Куратор тега Linux
    software engineer
    вам не нужен cat и ненужный pipe - просто
    grep -q "app start" /app/log

    Но вы уверены, что это нормально - просматриивать целый лог файл каждую итерацию рединесс пробы?
    Может быть все-таки лучше в программу добавить дополнительный ендпоинт и проверять ее через http пробу?
    Ответ написан
    2 комментария
  • Правильно ли так организовывать docker?

    saboteur_kiev
    @saboteur_kiev
    software engineer
    И второй попутный вопрос: правильно ли что dev и prod работают на одном и том же контейнере?

    Вы имеете ввиду из того же докер образа? Так и надо делать. Чтобы тестировать и запускать в продакшене одно и тоже.
    Енвайрнмент-зависимые вещи настраиваются извне и прокидываются (сертификаты, креденшелы для баз данных, и т.п.)

    А так - если вас решение устраивает, если вам оно понятно и в случае чего вы его можете легко модифицировать как вам нужно - да, вполне нормально.
    Ответ написан
    1 комментарий
  • Docker - как его понять новичку?

    saboteur_kiev
    @saboteur_kiev
    software engineer
    Docker работает только под Линукс, потому что он работает благодаря namespace и cgroups фич, встроенных в ядро Линукс.
    В винде запускается виртуальная машина с Линукс, в которой уже запускается докер.

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

    Так как разные Линуксы все равно юзают тоже ядро, то в образах и указано что именно установлено в Линукс, и образ PHP обозначает, что там будет образ линукса с установленным PHP
    Ответ написан
    4 комментария
  • Архитектура (оркестрация?) сервисов в Docker - как правильно?

    saboteur_kiev
    @saboteur_kiev
    software engineer
    балансеров может быть больше, чем один.
    Глобальный балансер - раскидывает по датацентрам, более мелкий - по инстансам внутри датацентра.

    В случае кубера - внешний балансер раскидывает по кластерам, внутренний сервис внутри кластера - уже по подам
    Ответ написан
  • Как делать ci/cd нескольких сервисов?

    saboteur_kiev
    @saboteur_kiev
    software engineer
    У каждого сервиса свой репо, свои джобы, свои деплои, зачастую не связанные друг с другом.

    Монорепа/мультирепа

    Это вопрос для девелоперов, как вам удобнее. Монорепа используется обычно тогда, когда у ваших сервисов реально есть общий код. Если же нет, то проще в отдельных репозиториях.
    Многие CI/CD можно настроить на пуш в определенные подкаталоги, и тогда разные сервисы в монорепе будут триггерить свои собственные джобы (teamcity например)

    Версионирование

    На усмотрение разработчиков. В мейвене есть плагины для автоматического semantic версионирования. Или можно руками. Самое простое - это мажорную версию проставляешь руками, а ci просто номер билда дописывает и/или хеш коммита в версию.

    Откат

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

    Как обновить 2+ сервиса одновременно.

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

    У него есть такие понятия как конфиг и секрет, но они монтируются в образ как файлы, что не всегда удобно.

    И конфиги и секреты можно маунтить и как файлы и как переменные окружения. Дочитайте документацию.
    Ответ написан
  • Правильно ли под каждый микросервис запускать сервер базы данных?

    saboteur_kiev
    @saboteur_kiev
    software engineer
    База - сама по себе, микросервис - сам по себе.
    У базы может быть свой кластер с репликацией базы по своим нодам. У микросервиса - свой кластер, со своими контейнерами. В результате и база и сервис можно горизонтально масштабировать, в зависимости от того, что работает недостаточно быстро.

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

    А непосредственно балансировщик - это вообще часть функционала кластера или сетевой подсистемы, а не непосредственно контейнера.
    Ответ написан
    Комментировать
  • Возможно ли установить контейнер как сервер?

    saboteur_kiev
    @saboteur_kiev
    software engineer
    Так слой докера почти ничего к нагрузке не добавляет, если вы не используете оркестраотр, то это вообще просто окружение. Проще уж само приложение тогда вынести. Но вся суть контейнеров в том, что если приложение написано правильно, с возможностью горизонтального масштабирования, докер контейнер очень быстро запускается на разных хостах.
    Ответ написан
    1 комментарий
  • Как автоматически монтировать каталог в docker-контейнере при его монтировании в хосте?

    saboteur_kiev
    @saboteur_kiev
    software engineer
    Если взять директорию, положить в нее файл, затем на эту (не пустую) директорию что-то замаунтить.
    Если ты уже вышел из директории, файл будет недоступен по пути - на этом месте уже будет новый бинд. Но после отмонтирования, там снова будет доступен файл.

    Так что маунт в папку - это не создание поддиректории, поэтому если в одном контейнере ты что-то маунтишь, другой контейнер этого видеть не будет.

    Маунты хранятся в /proc, а именно в /proc/mounts, и следовательно так как каждый контейнер хранит свой собственный /proc, если что-то перемаунтилось, другие контейнеры об этом "не знают".
    Ответ написан
    Комментировать