Задача у меня такая: хочу поднять десяток-другой псевдо-виртуалок, множество которых будет обозначено двумя-тремя ролями. На данный момент думаю LEMP и NS -серверы. Требования просты: вход по ssh не под рутом, sudo, для веба - поддержка ftp (смотрю в сторону pure-ftpd с поддержкой mysql). Было бы также неплохо, если бы все хосты получали айпишник от внутреннего DHCP-сервера. Рулиться все хосты должны с ansible
Начал изучать докер - сплошные разочарования: и служба в контейнере одна, а для добавления второй нужно compose линковать, и по умолчанию служба работает на хосте, надо номер порта указать - а с полноценным сетевым стеком всё не так просто. И контейнеры не предназначены для длительного хранения, для логов и данных нужно отдельные папки монтировать. И задумался я, не проще ли LXC для таких целей использовать? Ибо минусов я нашёл много, а плюсы пока не столь явные (для меня по крайней мере). Но может я чего-то не понимаю или ещё что-то не прочёл? Может есть иные средства?
И ещё такой вопрос -могут ли плейбуки ansible брать данные для хостов из mysql?
И ещё такой вопрос -могут ли плейбуки ansible брать данные для хостов из mysql?
Емнип, плейбуки пишутся на питоне, так что никто не запрещает на питоне такую логику дописать.
Начал изучать докер - сплошные разочарования: и служба в контейнере одна, а для добавления второй нужно compose линковать, и по умолчанию служба работает на хосте, надо номер порта указать - а с полноценным сетевым стеком всё не так просто.
И контейнеры не предназначены для длительного хранения, для логов и данных нужно отдельные папки монтировать. И задумался я, не проще ли LXC для таких целей использовать? Ибо минусов я нашёл много, а плюсы пока не столь явные (для меня по крайней мере). Но может я чего-то не понимаю или ещё что-то не прочёл? Может есть иные средства?
Не особо разбираюсь в LXC, но кмк, для деплоя приложений такая логика (1 контейнер на приложение) как раз отлично подходит.
Но в таком кейсе требования
вход по ssh не под рутом, sudo, для веба - поддержка ftp (смотрю в сторону pure-ftpd с поддержкой mysql).
Выполнить не получится, тк в таком случае:
1. Никакого входа под SSH на конкретную "виртуалку" (тк вся настройка должна происходить в Dockerfile, а деплой - через api докера)
2. Никакого ftp для загрузки кода (для этого есть docker images)
3. mysql - внешний сервис (который можно поставить на отдельный хост)
4. Никакого ansible для настройки внутренностей "виртуалок" (тк для этого предназначен Dockerfile)
для логов и данных нужно отдельные папки монтировать.
Обычно для логов заводят отдельный сервис (loki например), а приложение логи все свои пишет в stdout
надо номер порта указать - а с полноценным сетевым стеком всё не так просто
Не особо разбираюсь в docker swarm, но вроде как-то можно автоматически назначать порты, а потом на стороне edge router-а всё разруливать.
Докер вам не нравится потому что вы хотите виртуалку, а не докер.
Глупо ожидать от докера чего то, если вы его не хотите и проекты под него не затачиваете.
А так лучше конечно брать квм, оно все таки работает получше чем lxc
Да, спасибо. Хотел убедиться, что всё правильно понимаю.
Кстати, и докер, и LXC прекрасно работают в виртуалке. Проверено.
Не KVM, конечно, а XCP-ng, но думаю, так же будут работать и в VMWare, и в Hyper-V, и в bhyve
Исходя из ваших требований, docker действительно не подходит, тк он про создание индивидуальных изолированных контейнеров под каждое приложение, а не про виртуалки.
Я бы рассмотрел возможность поменять требования и процесс, чтобы он нормально ложился на логику докера:
1. Конфигурировать приложение через DockerFile и переменные окружения
2. Логировать в stdout, и его потом перенаправлять в Loki, и просматривать в grafana
3. Деплоить через docker swarm
4. MySQL как отдельный сервис на внешнем хосте, а не индивидуально под каждый контейнер
5. И никакого захода по ssh - всё нужно делать через докеровский же API
Но если нет - придётся пилить что-то поверх LXC или использовать полновесную виртуализацию
Спасибо. Задачу я ставил сам себе для изучения Docker + Ansible но столь глобальный пересмотр требований мне не подходит. Однако понимание принципов - даёт.
На данный момент у меня недостаточно скиллов чтобы придумать практическую задачу, для которой я мог бы использовать контейнеры docker (то есть реализовать принцип "одно приложение - один контейнер").
Сергей Сахаров, на самом деле практически любое приложение можно свести к такой идее.
А Ansible тут пригодится для того, чтобы изначально настроить всю докеровскую шнягу на хосте.
Василий Банников, использовать ansible для одного хоста, конечно, можно... Но - неинтересно.
У меня была идея, чтобы ansible настраивал разные хосты, используя данные из mysql
Чтобы научиться, надо пощупать инструмент, понять для чего он и как с ним работать.
Я в принципе понял, для чего нужен Docker и как с ним работать, но пока ещё не понял - зачем.
Однако уверен - в процессе дальнейшей учёбы я с этим тоже определюсь.
Сергей Сахаров, вот по этому поводу ...ansible настраивал разные хосты,... - в докере на самом деле вовсе нет никаких хостов а есть контейнеры которые есть завуалированные деплойменты отдельных приложений а не хосты вовсе
У меня была идея, чтобы ansible настраивал разные хосты, используя данные из mysql
Ну так вы и можете так делать - несколько хостов, на каждом из которых надо настроить докер или поднять что-то ещё.
А приложения из докерфайла настраиваются, тк это ответственность разработчика.
lxc - полноценная виртуалка, с паравиртуализацией (нет тратит ресурсы на аппаратную виртуализацию) идеальная для простых задач изоляции сетевых запросов (без них хватило бы и простого chroot), осторожно
lxc не полноценно изолирует окружения, т.е. если внутри такой виртуалки злоумышленник будет иметь root то он сможет выйти в хост систему.
VladlenO, куда выйти?
Запуск контейнера lxc-start
Останов lxc-stop
вход в консоли (не по ссщ) lxc-entry вроде
А внутри он как полноценная ВМ - ставишь проги, sudo mc и прочая...
Одного-двух ядер хватит на 4-5 гостевых хостов. Хотя они явно будут не для высокой нагрузки.