Я только начал изучать Докер, и меня это смущает. Как я читал на сайте 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 и обращаемся к ней с помощью командной строки.
В любом случае, как называются эти образы в честь операционных систем? Насколько отличается запуск контейнера с одним из этих образов и раскрутка виртуальной машины с соответствующей гостевой ОС?
Идея состоит в том, что мы просто разделяем ядро с хост-ОС (и, следовательно, у нас есть доступ к аппаратным ресурсам базовой машины, без необходимости виртуализации оборудования), но все еще используем файлы и двоичные файлы каждой отдельной системы в контейнерах для поддерживать любое приложение, которое мы хотим запустить?
источник
Ответы:
Поскольку все дистрибутивы Linux работают с одинаковым (да, немного упрощенным) ядром Linux и отличаются только пользовательским программным обеспечением, довольно легко смоделировать другую среду распространения - просто установив это пользовательское программное обеспечение и притворившись, что это другой дистрибутив. В частности, установка контейнера CentOS внутри ОС Ubuntu будет означать, что вы получите пользовательское пространство от CentOS, при этом продолжая работать с тем же ядром, а не с другим экземпляром ядра.
Таким образом, легкая виртуализация похожа на наличие изолированных отсеков в одной ОС. В отличие от настоящей виртуализации, в хост-системе установлена еще одна полноценная ОС. Вот почему Docker не может запускать FreeBSD или Windows в Linux.
Если это будет проще, вы можете подумать, что docker - это очень сложная и продвинутая среда chroot.
источник
Контейнеры работают на одном ядре. Другими словами, все контейнеры имеют одно ядро (Host OS). В то время как гипервизоры с другой стороны имеют несколько ядер. Каждая виртуальная машина работает на разных ядрах.
А «Docker Run Ubuntu» - это то же самое, что создание среды chroot.
источник