Docker. Как его применять на вебсервере?

Уважаемые девопсы и системные администраторы, нужна ваша помощь в понимании как работает и как настраивать Docker.

Например, моя ситуация: VDS c Debian, нужно поставить внутри MySQL(MariaDB), Python/Django, Nginx, Memcached, Sphinx Search.

Задачи, которую я хочу решить Докером:
  • разграничения по ресурсам некоторых особо прожорливых компонентов (швыряю булыжник в окно MySQL)
  • возможность немного поэксперементировать с версиями и настройками компонентов
  • если что-то не устроит на хостинге - взял свои контейнеры и пошел на другой


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

Основные вопросы, которые у меня остались:
1) т/к контейнеры стейтлес, а мне нужно все же хранить и создавать данные, как создавать, записывать и хранить изменения?
2) как автоматически стартовать контейнеры с изменениями, если какой-то пьяный дебил перерубил лопатой провод из ДЦ и все потухло? Т/е как стейтлес контейнеры превратить в стейтфул простыми способами. Т/е сервер падает, поднимается и все работает с того места где он упал.
3) Как лучше разбить на контейнеры мою обвязку сервера?
4) Как выбирать необходимые контейнеры приложений на Докерхабе?
5) Как и где хранить данные (например проекты Django), чтобы их не потерять, но вместе с тем удобно мигрировать на другой хост в случае чего
6) Из-за недопонинимания как все работает: как (и возможно ли вообще такое) не допустить утечки каких-либо чувствительных данных в докерхаб вместе с образом какого-нибудь моего контейнера?
  • Вопрос задан
  • 9508 просмотров
Пригласить эксперта
Ответы на вопрос 7
@pacahon
Вы читали кучу мануалов, но упустили самое главное - официальная документация. Как так? Там как раз и говорится как делать и почему. На вопросы уже поотвечали, но пройдусь ещё раз, раз столько времени на чтение ответов потратил :>
1) https://docs.docker.com/engine/userguide/dockervolumes/
2) https://docs.docker.com/engine/articles/host_integ...
3) Ответ простой - как хотите. Как лучше знаете только вы, звучит банально, но это так. Хотите хоть всё в один контейнер запихните, это ваше дело. Хотя рекомендуют 1 компонент на 1 контейнер. В этом есть своя логика - хочется обновить только mysql - обновляете этот контейнер и не думаете, поломался ли у вас uwsgi или nginx или ещё чего.
4) Напишите свой первый Dockerfile, станет куда яснее как выбирать. А пока доверяйте только официальным образам.
5) git? Этот вопрос - следствие непонимания вопроса 1)
6) Уже ответили. Самое простое, если не понимаете - не используйте dockerhub вообще. Или начните понимать. :) Или платите за приватные репозитории, чтобы не думать об этом.
Ответ написан
Комментировать
nazarpc
@nazarpc
Open Source enthusiast
1) data-only containers
2) решите задачу подъема самого сервера с запущенным Docker, в контейнерах задаете политику всегда перезапускаться - они вместе с самим Docker запустятся
3) в идеале по контейнеру на процесс либо логическую часть, к примеру MariaDB это один, Python сервер это второй и так далее
4) внимательно изучать внутренности, кроме официальных выбирать только те, которые имеют автоматические билды с отрытым Dockerfile и поддерживаются актуальными, иногда придется делать свои
5) ответ тот же что и 1) + резервное копирование/восстановление из томов
6) не встраивайте чувствительные данные в образы и не попадут

В качестве неплохого примера можете посмотреть мою разработку (правда, ориентирована на PHP, но суть та же, посмотрите как устроено): https://github.com/nazar-pc/docker-webserver
Ответ написан
Ernillew
@Ernillew
Администрирую *nix-системы с 1997 года
> Docker. Как его применять на вебсервере?

Никак. Docker — игрушечная технология не предназначенная для использования в реальных задачах. Ставя докер вы четко говорите себе «Мне плевать на обновления безопасности, они мне не нужны».
Если вам нужна контейнеризация, то есть lxc.
Ответ написан
Про уровень управления всей инфраструктурой. Сейчас много говорят про гугловый Kubernetes. Однако, лично мне больше понравился не такой раскрученный, но очень навороченный Rancher. Мне кажется, он вам подойдет хорошо. Он позволит:
а. Подключить в одну web(!)-консоль машины от разных облачных провайдеров.
b. Управлять большинством параметров как непосредственно контейнеров, так и более масштабных связок.
с. Управлять томами для хранения персистентных данных. Проблема переноса данных между хостами там можно решить подъемом в 3 клика кластера GlusterFS, например. Также есть своя разработка для синка -- Convoy.
d. Контролировать функционирование сервисов и хостов, автоматически запуская контейнеры на других хостах.
e. Поднять между хостами (напомню, что они могут быть размещены в разных ДЦ у разных провайдеров) свою приватную сеть, где все хосты и все сервисы смогут "видеть" друг друга.
f. Балансировать нагрузку между несколькими контейнерами на разных машинах.

Магии там нет. Все можно настроить и так. Однако, как стартовое решение, которое скроет кучу настроечных сложностей, должно подойти хорошо.
Ответ написан
Комментировать
dimonchik2013
@dimonchik2013
non progredi est regredi
вопросы 3,4,6 - для форума экстрасенсов

по первым же двум: раз и два и оттуда еще есть ссылки

мы, в том числе и поэтому, используем Мускуль вне контейнеров,
и, честно говоря, не знаю когда его нужно использовать внутри(разве что если вы хостер): если проект мелкий - он не жрет базу сильно, а если проект такой, что база гигабайтная - пропускать еще через прокладку-докер - это не заботиться о сохранности данных.

а вот nginxы и wsgi (с Джангами и Флесками) чувствуют себя в контейнерах превосходно
Ответ написан
foxmuldercp
@foxmuldercp
Системный администратор, программист, фотограф
Попробую на пальцах
базы данных - в нормальных контейнерах типа lxc/openvz или в отдельной впс. чисто потому что бекапы и репликация там в нормальном режиме с нормальным доступом, плюс опять же ip адрес статический, чего в докере нет и врядли будет.

докерные контейнеры - это повторимая виртуалка имени одного процесса. Тоесть, вы четко говорите в докерфайле что, зачем выполнять и что конкретно запускать в форграунде, т.е на первом плане, вариант service apache2 start не канает, контейнер остановится после ухода приложения в бекграунд, также почитайте про проблему docker pid 1 и почему это все запускается в обвязке из того же bash.

Докер очень сильно привязан к своему хабу и гиту, чтобы "git pull & start app одной кнопкой" на каком-то та внутреннем айпишнике из серой сети.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы