Я щойно почав вивчати Докера і є щось, що мене дуже бентежить. Як я читав на веб-сайті Docker, контейнер відрізняється від віртуальної машини. Як я зрозумів, контейнер - це лише пісочниця, всередині якої працює вся ізольована файлова система.
Я також читав, що в контейнері не встановлена гостьова ОС. Натомість він покладається на базове ядро ОС.
Все це добре. Мене бентежить те, що є зображення Докера, названі на честь операційних систем. Ми бачимо зображення на зразок Ubuntu, Debian, Fedora, CentOS тощо.
Моя думка: які насправді ті образи? Чим відрізняється створення контейнера на основі зображення Debian, ніж створення віртуальної машини та встановлення Debian?
Я думав, що в контейнерах не встановлена гостьова ОС, але коли ми створюємо зображення, ми базуємо їх на якомусь зображенні, названому на одній ОС.
Крім того, у прикладах, які я бачив, коли ми це робимо docker run ubuntu echo "hello world"
, здається, ми запускаємо VM з Ubuntu і змушуємо його запускати команду echo "hello world"
.
Таким же чином, коли ми це робимо docker run -it ubuntu /bin/bash
, здається, що ми закручуємо VM з Ubuntu і отримуємо доступ до нього за допомогою командного рядка.
У будь-якому разі, що це за зображення, названі на честь операційних систем? Наскільки відрізняється запуск контейнера з одним із цих зображень та спінінг VM з відповідною гостьовою ОС?
Це ідея, що ми просто ділимось ядром з хост-операційною системою (і, отже, ми маємо доступ до базових ресурсів апаратного забезпечення машини, не потребуючи віртуалізації обладнання), але все ж використовуємо файли та двійкові файли кожної різної системи на контейнерах для того, щоб для підтримки будь-якої програми, яку ми хочемо запустити?