LINUX.ORG.RU

Docker: использовать один контейнер или много?

 , , ,


0

2

Предположим есть несколько сайтов, работающих с использованием php, php-fpm и nginx. Для всех сайтов требуется одинаковое окружение. СУБД, допустим, можно вынести в отдельный контейнер. Как «правильно» сделать: разместить каждый сайт в своем контейнере или использовать один контейнер для всех сайтов?

В первом случае получается неоправданно большое потребление памяти. Даже если создавать php-fpm воркеров динамически, то все равно потребляется память для мастер процесса php-fpm и nginx + понадобится все тот же nginx или haproxy как фронтенд.
Во втором случае получается как-то не труъ. Настройки придется хранить для всех сайтов в куче + для каждого сайта подключать data-контейнеры. Также при деплое лежать будут все сайты, а не только тот который деплоится.

Как должно быть правильно?

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

one117 ★★★★★
()

Зависит от сайтов. Если что-то высоконагруженное или архитектурно сложное - в контейнер. Если просто сайты-бложеки какие-то, то на одном хосте.

PS. А почему docker а не OpenVZ например какой-то?

dvrts ★★★
()
Ответ на: комментарий от dvrts

PS. А почему docker а не OpenVZ например какой-то?

Модно :) Ну и есть всякие Dockerfile для сборки образов, а также уже не мало понаписанно готовых докерфайлов - можно брать и пользоваться. OpenVZ нет в ядре, а docker (lxc, cgroups) есть в ядре.

Black_Roland ★★★★
() автор топика

В первом случае получается неоправданно большое потребление памяти.

Ядро с uksm-патчами?

greenman ★★★★★
()

Docker немного не для этого.
Юзай чистый lxc.

Правильно - каждый сайт в своем контейнере.

tazhate ★★★★★
()
Ответ на: комментарий от tazhate

Docker немного не для этого.

А для чего? Dependency hell?

Юзай чистый lxc.

Но ведь Docker проще.

Правильно - каждый сайт в своем контейнере.

При этом как-то можно сократить потребление памяти (без лишнего бубна), или это утопия?

Black_Roland ★★★★
() автор топика
Ответ на: комментарий от Black_Roland

Но ведь Docker проще.

нет. одна фигня.

А для чего? Dependency hell?

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

При этом как-то можно сократить потребление памяти (без лишнего бубна), или это утопия?

Зачем? У тебя так мало памяти, чтоли? lxc считай вапще её не использует. Этож тот же chroot на стероидах.

tazhate ★★★★★
()
Ответ на: комментарий от tazhate

Docker немного не для этого.

А немного для чего?

dvrts ★★★
()
Ответ на: комментарий от tazhate

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

Согласен. Но еще удобно то, что используется одно и тоже окружение и во время разработки и на продакшене. К тому же где в современном дистре сейчас найти PHP 5.3, а оно нужно.

Зачем? У тебя так мало памяти, чтоли? lxc считай вапще её не использует. Этож тот же chroot на стероидах.

lxc не использует, а например nginx и php внутри контейнеров используют. Будет запущено нжинксов и пхп столько же сколько и сайтов.
Но вариант с отдельными контейнерами для каждого сайта не так уж и плох. Сайты будут максимально изолированы друг от друга и от хост системы. Но ведь где-то такая изоляция не нужна.

У тебя так мало памяти, чтоли?

VPS за 3 копейки с 512 МБ памяти. При этом хочется поиграться и сделать как у больших дяденек.

Black_Roland ★★★★
() автор топика
Ответ на: комментарий от greenman

Неплохой мануал
http://vasilisc.com/lxc-1-0-first-ubuntu-container

Я уже как-то давно баловался с LXC. С сетью все сложно - нужно порты самому пробрасывать, интерфейсы поднимать. В Docker можно контейнеры «соединять» и всякие переменные окружения сами подставятся, а тут все руками надо делать. Для некоторых приложений есть готовые докерфайлы. Тот же Gitlab можно легко развернуть не заморачиваясь с сисадминством.

Black_Roland ★★★★
() автор топика
Ответ на: комментарий от Black_Roland

VPS за 3 копейки с 512 МБ памяти. При этом хочется поиграться и сделать как у больших дяденек.

Тогда просто забудь.
У больших дядек разные сайты на разных виртуалках.

tazhate ★★★★★
()
Ответ на: комментарий от roman77

man zram

Уже. Только когда я запущу кучу сайтов в отдельных контейнерах, то 512 МБ даже с zram не хватит. Кстати в основном все съедает MySQL.

Вообще сам вопрос был скорее теоретический. Если мне правда по делу понадобится пользоваться Докером, то можно и побольше VPS'ку арендовать. Но если есть возможность и Docker использовать и за VPS не переплачивать, то почему бы и нет.

Black_Roland ★★★★
() автор топика
Ответ на: комментарий от roman77

Сами ж поднимаются оО по крайней мере eth0.

Виртуальные же (бриджи). Можно и в конфиг прописать, только не удобно.

Black_Roland ★★★★
() автор топика
Ответ на: комментарий от Black_Roland

Кстати в основном все съедает MySQL.

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

MrClon ★★★★★
()
Ответ на: комментарий от MrClon

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

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

Black_Roland ★★★★
() автор топика
Ответ на: комментарий от dvrts

А почему docker а не OpenVZ например какой-то?

Docker и OpenVZ — это тёплое с мягким. С OpenVZ нужно сравнивать LXC, которым пользуется Docker. А последний — это платформа для всяких PaaS и т.п.

KRoN73 ★★★★★
()
Ответ на: комментарий от Black_Roland

Юзай чистый lxc.

Но ведь Docker проще.

Мне идея Docker показалась очень интересной. Кинулся осваивать и... так и не нашёл применения под свои задачи :) Как только с Hello-world'ов дело доходит до реальных задач с персистентными контейнерами, так сразу работа с Docker усложняется настолько, что сравнима становится с чистым LXC или даже сложнее последнего. В итоге каждый раз оказывается, что поднять честный отдельный LXC-контейнер проще, надёжнее и удобнее. Вопрос конфигурации решается хранением эталонной копии настроенного под типовую задачу LXC-контейнера и lxc-clone. Единственный минус — занимаемое место. Но в наше время потеря 200-400Мб дискового пространства на контейнер, всё же, обычно не критична.

В итоге Docker у меня так и не прижился, хотя LXC-контейнеров крутится десятка два на трёх машинах.

KRoN73 ★★★★★
()
6 декабря 2014 г.
Ответ на: комментарий от KRoN73

Docker мне видится полезным для деплоймента какой-то комбинации ПО в нестандартной конфигурации. Это может быть, например, какой-то веб сервис, который требует Tomcat или RoR или WSGI с кучей кастомных модулей, с перекомпиленным nginx, с какими-то экзотическими либами. В результате, вместо того чтобы прочитать на офф.сайте этой софтины, выполните (методом копи-паст) вот этот мануал на 100 шагов, ты просто можешь скачать их официальный docker и запустить. Легко же его потом будет и обновить и перезапустить. Если оно требует доступа к ФС чтоб хранить свои файлы или доступа к mysql чтоб хранить DB — это легко прокинуть внутрь докера.

Bers666 ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.