Вопрос: Почему мы используем базовое изображение ОС с Docker, если в контейнерах нет гостевой ОС?


Я только начал изучать Докера, и есть кое-что, что меня довольно сбивает с толку. Поскольку я читал на веб-сайте Docker, контейнер отличается от виртуальной машины. Как я понял, контейнер - это просто песочница, внутри которой запущена целая изолированная файловая система.

Я также прочитал, что в контейнере не установлена ​​гостевая ОС. Вместо этого он полагается на базовое ядро ​​ОС.

Все это прекрасно. Я запутался в том, что есть изображения Docker, названные в честь операционных систем. Мы видим изображения, такие как Ubuntu, Debian, Fedora, CentOS и так далее.

Я хочу сказать: что это за изображения? Как это отличается от создания контейнера на основе образа Debian, чем создание виртуальной машины и установка Debian?

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

Кроме того, в примерах, которые я видел, когда мы это делаем docker run ubuntu echo "hello world", кажется, мы разворачиваем виртуальную машину с Ubuntu и заставляем ее запускать команду echo "hello world",

Точно так же, когда мы делаем docker run -it ubuntu /bin/bash, похоже, мы разворачиваем виртуальную машину с Ubuntu и получаем доступ к ней с помощью командной строки.

В любом случае, каковы эти образы, названные в честь операционных систем? Насколько отличается запуск контейнера с одним из этих изображений и поворот виртуальной машины с соответствующей гостевой ОС?

Является ли идея, что мы просто совместно использовать ядро ​​с ОС хоста (и, следовательно, у нас есть доступ к основным ресурсам аппаратного обеспечения, без необходимости виртуализации аппаратного обеспечения), но при этом использовать файлы и двоичные файлы каждой отдельной системы на контейнерах, чтобы поддерживать любое приложение, которое мы хотим бежать?


58
2018-02-11 16:39


Источник


На мой взгляд, ваши цели в виртуализации - это ключи. Если вам нужны библиотеки, языки и т. Д., То OS-контейнеры подходят именно вам. Но если ваша потребность - это только приложение в качестве компонентов, нет необходимости использовать ОС в качестве основного изображения. Я думаю, что эта статья может объяснить это ясно blog.risingstack.com/... - metamorph


Ответы:


Поскольку все дистрибутивы Linux работают одинаково (yup, это немного упрощено) ядро ​​Linux и отличаются только программным обеспечением userland, довольно легко имитировать другую среду распространения - просто установив это программное обеспечение userland и притворившись, что это другой дистрибутив. Конкретно, установка контейнера CentOS внутри Ubuntu OS будет означать, что вы получите пользовательское пространство от CentOS, при этом все еще выполняете одно и то же ядро, даже не один экземпляр ядра.

Так легкий Виртуализация подобна изолированным отсекам внутри одной ОС. Реальная виртуализация Au contraire имеет еще одну полноценную ОС внутри ОС хоста. Вот почему докер не может запускать FreeBSD или Windows внутри Linux.

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


52
2018-02-11 17:15



Поэтому я могу разместить свой скомпилированный код golang в пустом контейнере Scratch, потому что скомпилированный код нуждается только в ядре? - Francis Norton
Итак, как гостевая ОС знает, как использовать ядро ​​хост-системы (и как это сделать)? AFAIK, базы изображений докеров используют стандартные изображения ОС. В вашем примере это не так, как есть обычная сборка CentOS, которая знает, использовать ядро ​​родителя? Или это так же просто, как трюк файловой системы (aufs), где Docker перенаправляет гостевые (CentOS) чтения / загрузки на хост (Ubuntu)? В этом случае гость (CentOS) установит свою собственную копию / boot, но ее просто не прочитают? - James S


Контейнеры работают на одном ядре. Другими словами, все контейнеры имеют одно ядро ​​(Host OS). В то время как, с другой стороны, гипервизоры имеют несколько ядер. Каждая виртуальная машина работает на другом ядре.

И «docker run ubuntu» - это просто создание среды chroot.


1
2018-06-16 01:33