LINUX.ORG.RU
ФорумAdmin

Можно ли с помощью vagrant docker запускать полновесные дистры с инитом аналогично vagrant lxc?

 , ,


1

1

Например, как запустить контейнеры из этого списка?

https://app.vagrantup.com/boxes/search?utf8=✓&sort=downloads&provider...

Пробовал, как предложено в сообщении: https://github.com/hashicorp/vagrant/issues/8769#issuecomment-316113114

Но это без инита, просто tail как в обычных легковесных контейнерах с одним процессом.

А как запустить с обычным для Linux OS инитом, чтобы потом можно было залогиниться через vagrant ssh и чтобы внутри работали все сервисы? Такое возможно с помощью LXC, например:

https://app.vagrantup.com/visibilityspots/boxes/almalinux-8.x-minimal

root@kube:/utils/custom/vagrant/alma# vagrant ssh
Last login: Mon Apr 24 19:47:25 2023 from 10.0.3.1
[vagrant@vagrant-base-almalinux-8-x86_64 ~]$ pstree
systemd─┬─NetworkManager───2*[{NetworkManager}]
        ├─5*[agetty]
        ├─crond
        ├─dbus-daemon
        ├─dhclient
        ├─firewalld───{firewalld}
        ├─polkitd───5*[{polkitd}]
        ├─rsyslogd───2*[{rsyslogd}]
        ├─sshd───sshd───sshd───bash───pstree
        ├─sssd─┬─sssd_be
        │      └─sssd_nss
        ├─systemd───(sd-pam)
        ├─systemd-journal
        ├─systemd-logind
        └─tuned───5*[{tuned}]
[vagrant@vagrant-base-almalinux-8-x86_64 ~]$ 

Ответ на: комментарий от sanyo1234

Похоже ради этого:

Host VM

If the system cannot run Linux containers natively, Vagrant automatically spins up a «host VM» to run Docker. This allows your Docker-based Vagrant environments to remain portable, without inconsistencies depending on the platform they are running on.

Vagrant will spin up a single instance of a host VM and run multiple containers on this one VM. This means that with the Docker provider, you only have the overhead of one virtual machine, and only if it is absolutely necessary.

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

https://www.activelamp.com/blog/devops/docker-with-vagrant

The latest version of Vagrant ships with a Docker provider built-in, so that you can manage Docker containers via the Vagrantfile. The Vagrant Docker integration was a turn off to me initially because it didn't seem it was very Docker-esque. It seemed Vagrant was just abstracting established Docker workflows (specifically Docker Compose), but in a Vagrant syntax. However within the container Vagrantfile, I saw you can also build images from a Dockerfile, and launch those images into a container. It didn't feel so distant from Docker any more.

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

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

Что-то не нашел примеров с запуском инита внутри контейнеров distrobox. Это фича самого distrobox или какие-то дополнительные наработки типа таких:

https://github.com/gdraheim/docker-systemctl-replacement

https://github.com/robertdebock/docker-alpine-openrc/blob/master/Dockerfile

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

https://lwn.net/Articles/676831/

    FROM fedora
    RUN yum -y install httpd; yum clean all; systemctl enable httpd;
    CMD [ "/sbin/init" ]

такое тоже не работает :(

по крайне мере для образа roboxes/rocky8

Вот что получается внутри контейнера, если зайти туда командой:

docker exec -it rocky_default_1682449997   bash -l

[root@ceed99d1c01f ~]# ps aux
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root         1  0.0  0.1  89180  4052 ?        Ss   12:13   0:00 /sbin/init
root        21  0.2  0.1  15900  3216 pts/0    Ss   12:15   0:00 bash -l
root        79  0.0  0.1  47632  2248 pts/0    R+   12:16   0:00 ps aux
sanyo1234
() автор топика
Ответ на: комментарий от sanyo1234

Пока думаю, что lxc лучше подходит для имитации полновесных виртуалок с инитом внутри контейнеров, чем docker/podman.

И Vagrant boxes в lxc провайдере работают сразу из коробки :) как обычная виртуалка.

А для докера (или любых OCI) контейнеров нужно искать специальные образы, которые содержат в себе костыли для запуска инита, в то время как для lxc образов это по умолчанию. Просто легче найти подходящие образы?

sanyo1234
() автор топика

Можно ли с помощью vagrant docker запускать полновесные дистры с инитом аналогично vagrant lxc?

Docker по своей задумке не предназначен для запуска полновесных коробочных дистров. Зачем вам это??? Просто пользуйтесь виртуальными машинами, ну или lxc если так уж приспичило.

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

Docker по своей задумке не предназначен для запуска полновесных коробочных дистров.

Так я и не спорю, но что мешает его или хотя бы Podman так использовать? Примеры ведь есть?

Зачем вам это???

Мне удобнее, чтобы образы контейнеров были стандартными OCI, а не какими-то там Vagrant boxes и т.п.

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

… но что мешает его или хотя бы Podman так использовать? Примеры ведь есть?

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

Ну а не используют контейнеры для этого дела, просто потому что особо никому это не нужно. Не используется это в production-среде - там другой подход. Cтало быть, и разработчикам на своих компах не имеет смысла заморачиваться - логичнее использовать Docker Compose.

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

Ну а не используют контейнеры для этого дела,

Да ладно ...

просто потому что особо никому это не нужно.

Серьезно ?

Не используется это в production-среде - там другой подход.

А как же OpenNebula LXD и Proxmox LXC ?

И чем Podman хуже LXC для запуска полновесных виртуалок с общим ядром?

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

Да ладно …

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

А как же OpenNebula LXD и Proxmox LXC ?

Ну так и пользуйтесь )

И чем Podman хуже LXC для запуска полновесных виртуалок с общим ядром?

Не интересовался такими тонкостями. Полновесные виртуалки, вроде как, требуют всяких привилегий, весьма нежелательных для докерного подхода.

А что конкретно вы собираетесь хранить в docker-образах?

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

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

Мне не нужна эластичность инфры в рамках нашей дискуссии.

Ну так и пользуйтесь )

Так хотелось бы OCI контейнеры вместо LXC.

А что конкретно вы собираетесь хранить в docker-образах?

В контексте обсуждения в этой ветке тестовые виртуалки на хостинге, где нет даже тормозного nested virtualization.

sanyo1234
() автор топика
Последнее исправление: sanyo1234 (всего исправлений: 1)
Ответ на: комментарий от sanyo1234

Так хотелось бы OCI контейнеры вместо LXC

У меня есть большие подозрения, что OCI архитектра не особо рассчитана на эти самые «полновесные» виртуалки - больше, как раз, на эластичность и запуск отдельных сервисов в отдельных контейнерах. Соответственно, туда могут быть «зашиты» более жесткие ограничения по сравнению с LXC. Ну а конвертировать образы туда-сюда наверняка можно.

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

Хотелось бы таблицу с отличиями LXC от Podman именно в контексте технической возможности осуществлять виртуализацию полной оси (без своего dedicated ядра ессно, т.е. с shared ядром хоста).

А то обычно общие слова, мол LXC лучше подходит для виртуалок, docker лучше для отдельных процессов. И на этом все заканчивается, без каких-либо детальных разъяснений.

sanyo1234
() автор топика
Последнее исправление: sanyo1234 (всего исправлений: 2)
Ответ на: комментарий от sanyo1234

Хотелось бы таблицу с отличиями LXC от Podman …

Гугл вам в помощь )
Хотя одно существенное отличие могу указать: в докеровских контейнерах используется специфичная рутовая файловая система - соответственно, всякие возможности монтирования чего-то еще в процессе работы контейнера могут быть ограничены. По крайней мере, и в Docker и в Kubernetes все, что нужно подмонтировать, указывается именно в спецификации контейнера.

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

Гугл вам в помощь )

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

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

Что мешает смонтировать mutable каталоги через volumes и изредка сохранять контейнер через docker commit вероятно аналогично distrobox?

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

Что мешает смонтировать mutable каталоги через volumes …

Ну так это уже противоречит понятию «полновесной виртуалки». Вам придется как-то кастомизировать коробочные образы - менять всю systemd-требуху

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

Ну так это уже противоречит понятию «полновесной виртуалки».

В виртуалках нет shared каталогов?

Вам придется как-то кастомизировать коробочные образы - менять всю systemd-требуху

Из-за того, что я смонтирую /home на хосте или хранилище?

Спешу удивить, у меня даже некоторые целые хосты даже bare-metal работают через NFS и iSCSI в т.ч. для корневого раздела.

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

В виртуалках нет shared каталогов?

В докеровском контейнере скорее всего не работает команда mount.

Собственно, в чем проблема? - возьмите готовый ISO-образ deban, отконвертируйте в docker и запустите контейнер с systemd в качестве главного процесса. Ну и посмотрите, что получится…

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

возьмите готовый ISO-образ deban,

запустите контейнер с systemd в качестве главного процесса.

Это как?

На ISO образе инстолятор или рабочая корневая с /sbin/init ?

Если LiveCD конечно можно попытаться, но IMHO проще уж взять образ для LXC.

Я ищу готовые образы для докера, а не приключений по их изготовлению.

sanyo1234
() автор топика
Последнее исправление: sanyo1234 (всего исправлений: 1)
Ответ на: комментарий от sanyo1234

Я ищу готовые образы для докера, а не приключений по их изготовлению.

Ну так я вам про то и толкую, что хрен вы их найдете ))) Поскольку не использует такое никто, а возможно, и сделать-то такое невозможно для, типа, «полновесных виртуалок»

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

ну вот видите - когда захотелось, так сразу и нашли

Способ нашел еще вчера:

Можно ли с помощью vagrant docker запускать полновесные дистры с инитом аналогично vagrant lxc? (комментарий)

Готовую коллекцию типа https://fleet.linuxserver.io/ пока не нашел, у них хоть и с S6 init, но все же узкоспециализированные образы.

Правда, это не полновесный образ - типа Debian.

В каком смысле неполновесный?

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

если чисто для себя и только самому крутить - то пофиг

Привилегированные контейнеры чреваты всякими окольными проникновениями в host-систему.

vinvlad ★★
()
Последнее исправление: vinvlad (всего исправлений: 1)
Ответ на: комментарий от vinvlad

А непривилегированные не чреваты? :)

Даже для true виртуалок активно обсуждают эксплойты типа escape from guest, различные буткиты и т.п. А нужно было всего лишь использовать непривилегированные контейнеры, и тогда сразу в дамки? LOL

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

Еще раз хочу отметить, что у меня нет проблем с созданием собственных полновесных образов для Docker.

Проблема в том, что не могу найти коллекцию готовых.

sanyo1234
() автор топика
Последнее исправление: sanyo1234 (всего исправлений: 1)