Email or username:

Password:

Forgot your password?
nonsense :twittercheck:

Я нихуя не понимаю. В чём разница между ОС, запущенной в докере и ОС, запущенной в VirtualBOX?

На уровне чуйки я понимаю, что разница есть, но в чём конкретно? ChatGPT написал какую-то поеботу. Что значит "используют общую операционную систему хоста"? Как это понять?

40 comments
def 🇬🇪 #nowar

@nonsense

виртуалбокс - эмулятор, он эмулирует железо, запускает полноценную систему

- - -
докер это интерфейс к механизму контейнеризации ядра линукс.

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

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

@nonsense

виртуалбокс - эмулятор, он эмулирует железо, запускает полноценную систему

- - -
докер это интерфейс к механизму контейнеризации ядра линукс.

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

nonsense :twittercheck:

@dettlaff хм, ядро от хостовой системы? Но ведь в контейнере может быть любая ОС, даже винда.

def 🇬🇪 #nowar

@nonsense я рассматриваю конкретно линуксовые, какая там поебота с виндой творится я не представляю))

nonsense :twittercheck:

@dettlaff бля ну в каждом контейнере может быть разная ОС, не обязательно Alpine жеж

def 🇬🇪 #nowar

@nonsense а где я говорил что только Alpine?

я говорю про любой линукс дистро

nonsense :twittercheck:

@dettlaff что значит "используется ядро от хостовой системы" тогда?

def 🇬🇪 #nowar

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

программы в твоей докерной системе посылают сусколы ядру от хост системы.

nonsense :twittercheck:

@dettlaff у меня допустим Ubuntu 22.04 а я в контейнере запускаю Ubuntu 12.04.

def 🇬🇪 #nowar

@nonsense ну, твоя вторая система работает с твоим новым ядром, по обратной совместимости

hardworm ☭

@nonsense @dettlaff может быть почти любой linux. Базовый набор любого дистрибутива одинаковый - ядро linux, базовое gnu окружение + софт.

Вот docker это по сути cli для управления контейнером, в котором будет общее ядро и базовый Gnu набор + новый nameSpace, сеть, точки монтирования... и софт от образа другого дистрибутива.

По сути это chroot на стеройдах...

hardworm ☭

@nonsense @dettlaff нет не может быть любая ос. Только linux

nonsense :twittercheck:

@hardworm @dettlaff

1. А это что тогда hub.docker.com/_/microsoft-win

2. Даже с linux непонятно - могут быть разные версии - alpine там и прочие, с разными ядрами и какими-то ещё различиями

hardworm ☭

@nonsense @dettlaff 1. заигрывание MS с openSource
> It is only available with Windows Server 2022 release.
> The Hyper-V role must be installed on the host first

по сути с помощью буханки, клея и чего-то там сделали тролейбус. Который как контейнер, но не контейнер из-за Hyper-V.... короче занесли docker денег и сделали как там.

2. > могут быть разные версии - alpine там и прочие, с разными ядрами и какими-то ещё различиями

нет. Базовый api ядра не особо меняется. В контейнере везде одно и то же ядро, но разный софт.

Смотри на скрин... вот в docker образ php-8.2... на alpine рабочий текущего проета. Прошу показать ядро. А потом прошу показать ядро свою хост систему... опачки кастомное ядро xanmod

@nonsense @dettlaff 1. заигрывание MS с openSource
> It is only available with Windows Server 2022 release.
> The Hyper-V role must be installed on the host first

по сути с помощью буханки, клея и чего-то там сделали тролейбус. Который как контейнер, но не контейнер из-за Hyper-V.... короче занесли docker денег и сделали как там.

nonsense :twittercheck:

@hardworm @dettlaff

1. так что же получается, если у меня докер под виндой, и не wsl а через Hyper V, то это уже не контейнеризация, а ближе к полноценной виртуальной машине? т.е. конкретно в этом случае можно назвать работающий докер-контейнер виртуалкой?

2. С версией ядра всё ещё непонятно. Т.е. ты постулируешь, что ядро у контейнера и хостовой ОС - общее? Даже если в контейнере alpine с 3.19 а на хосте 4.14?

hardworm ☭

@nonsense @dettlaff 1. Не совсем... в винде насколько помню 2 механизма работы Hyper-V и wsl. Первая реализация была вроде на Hyper-V - поэтому docker на windows сильно проседал по производительности. Потом вроде перешли на wsl и жизнь наладилась... но это не точно. Мне похуй что-там на windows, я просто наблюдал как страдают коллеги.

2. Да общее ядро (и часть окружения типа mv, cp... ). Или с твоих хостовым linux или с тем псевдохостовой linux в windows wsdl или macOs

D:\side\

@nonsense

1. Скорее всего, дистрибутив докера запустит в Hyper-V какую-то свою линуксовую виртуалку с демоном докера и собственным ядром, и линуксовые контейнеры будет запускать на ней.
2. В контейнере не будет своего ядра. Совсем. Ядро не просто общее – оно хостовое. Все контейнеры в рамках контейнерного демона (про подман пока забудем) пользуются им.

@hardworm @dettlaff

hardworm ☭

@nonsense @dside @dettlaff это вот и лезут артефакты общего ядра.

centOS 6 ... на нем еще динозавры хостились. Вот мир млекопитающих не совместим с миром ящеров.

А с virtualbox такой херни нет - хоть OS\2 запускай.

nonsense :twittercheck:

@hardworm @dside @dettlaff это да, но херня в том, что контейнер при запуске даже не мяукнул, что несовместимость там какая-то может быть. Как это блять отслеживать то.

hardworm ☭ replied to nonsense

@nonsense @dside @dettlaff никак. Если запускать древнее говно - то виртуализация нужна типа KVM.

В контейнерах такие лютые глюки могут вылезти, что офигеешь. Мы в ВИ несколько месяцев воевали за стабильность kafka... а потом выяснилось, что это глюки библиотеки из-за запуска ее на более древнем ядре. Пришлось везде host систему обновлять с ubuntu 20.04 на что-то свежее.

hardworm ☭

@nonsense @dettlaff было видео про основы основ что-то типа "пишем свой docker на с++" но оно утонуло в тонные говно видео "курс по docker".

Там за стандартные 40 минут показывали на C++\C основы контенеризации.. namespace и сgroup.

Мя :sparkles_lesbian:

@nonsense нет, ты прост не сможешь запустить виндовый контейнер под линуксом)

@dettlaff

D:\side\

@dettlaff в целом да, две поправки:
- изолированные контейнеры для процессов *и сетевых интерфейсов*
- специального инита в контейнерах, как правило, нет, за ненадобностью, т. к. в контейнере не полноценная система, поэтому де-факто инит-процессом может служить прямо то, что в контейнере стартует (entrypoint) – и я что-то не припомню, чтобы можно было использовать инит хоста, и не представляю, как бы это выглядело (что, впрочем, не значит, что это невозможно)

@nonsense

@dettlaff в целом да, две поправки:
- изолированные контейнеры для процессов *и сетевых интерфейсов*
- специального инита в контейнерах, как правило, нет, за ненадобностью, т. к. в контейнере не полноценная система, поэтому де-факто инит-процессом может служить прямо то, что в контейнере стартует (entrypoint) – и я что-то не припомню, чтобы можно было использовать инит хоста, и не представляю, как бы это выглядело (что, впрочем, не значит, что это невозможно)

Digitual :ablobcatwave:

@nonsense наверное в виртуаке сплошная изоляция от хоста

Сумеречный Кот

@nonsense в виртуалка, в теории, система не имеет ни малейшего понятия, что она виртуальная, так как достигается эмуляция полностью рабочего железа (в случае qemu возможна даже эмуляция другого процессора (архитектуры то есть)). В случае же контейнера система имеет общие ресурсы с хостом, общее железо, допустим. Разница в основном только в области памяти, которое выделяет ядро твоего хоста.

Ещё раз. Виртулка - полная изоляция системы от хоста, включая железо
Контейнер же изолирует в основном лишь область памяти

Это если взять по тому, что успел узнать за время учебы и могу быть не прав

@nonsense в виртуалка, в теории, система не имеет ни малейшего понятия, что она виртуальная, так как достигается эмуляция полностью рабочего железа (в случае qemu возможна даже эмуляция другого процессора (архитектуры то есть)). В случае же контейнера система имеет общие ресурсы с хостом, общее железо, допустим. Разница в основном только в области памяти, которое выделяет ядро твоего хоста.

DELETED

@nonsense виртуалбокс предоставляет тебе виртуальное железо, на которое ты ставишь ос.
Докер это chroot с нормальной изоляцией. У тебя ядро линукса общее для всех, и грубо говоря меняется только root раздел оси. Он свой для каждого контейнера

nonsense :twittercheck:

@alex так погоди, как ядро линукса может быть общим, если в каждом контейнере может быть разная ОС?

DELETED

@nonsense не может.

hub.docker.com/_/microsoft-win

>Windows requires the host OS version to match the container OS version. If you want to run a container based on a newer Windows build, make sure you have an equivalent host build. Otherwise, you can use Hyper-V isolation to run older containers on new host builds. You can read more on Windows Container Version Compatibility in our Container Docs.

Для "любой" ос тебе надо подключать виртуализации, конкретно тут Hyper-V

nonsense :twittercheck:

@alex ну то есть, по факту, в этом случае уже нет никакой разницы между контейнером и виртуалкой?

DELETED

@nonsense я не настоящий сварщик, чтоб все механизмы знать. Но докер это типа chroot с cgroop файловой системой с мерджем и прочим. Там нет ничего, что хостовое ядро и систему заменит. Это просто набор ограничений в текущей ос. И емнип из-за такого косяки бывает вылезают, когда ос там, где контейнер собирали и где запускают изрядно разные.

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

nonsense :twittercheck:

@alex получается, что если ОС "изрядно разные", то докер тебе даже не маякнёт об этом? И просто контейнер не будет работать как надо?

Мя :sparkles_lesbian:

@nonsense ОС ≠ ядро. ОС это пакет программ, ядро лишь является частью ОС. Докер позволяет тебе использовать другой пакет программ, но с тем же ядром

@alex

Who Let The Dogs Out 🐾

@nonsense chatGPT - пиздит как сивый мерин.

У Слёрма был весьма неплохой курс с упором на практику.

Слёрм Базовый (вечерняя школа) / Что такое Docker. Основные команды cli, образ, Dockerfile (13.04.2020)

Презентация: github.com/southbridgeio/slurm

### Домашнее задание
1. Посмотреть тома Docker(dockervolume)
2. Познакомится ближе с механизмами контейнеризации (unshare, netns, systemd-cgls)
3. Как ограничить ресурсы контейнеру (cpu/ram)?

### Полезные ссылки
[docker-volumes](docs.docker.com/storage/volume)
[memory-inside-linux-containers](fabiokung.com/2014/03/13/memor)
[resource_constraints](docs.docker.com/config/contain)
[Механизмы контейнеризации: namespaces](habr.com/ru/company/selectel/b)

Где-то у меня есть конспекты этого курса.

@nonsense chatGPT - пиздит как сивый мерин.

У Слёрма был весьма неплохой курс с упором на практику.

Слёрм Базовый (вечерняя школа) / Что такое Docker. Основные команды cli, образ, Dockerfile (13.04.2020)

Презентация: github.com/southbridgeio/slurm

Go Up