Docker — как его понять новичку?

Приветствую!

Никогда не пользовался докером, но при этом довольно часто пользовался различными виртуальными машинами и вроде понимаю суть виртуализации. Также пользовался и "песочницами".
Очень часто слышу упоминания докера, почитал о нём, очень заинтересовало, теперь пытаюсь разобраться.

Если я правильно понял, то докер это как "умная" виртуальная машина, т.е. если у тебя хост на Windows 10 и ты устанавливаешь в контейнер тот же Windows 10, то он не будет полностью устанавливать всю систему и занимать уйму места на диске, а будет запускать в изолированном контейнере, при этом используя системные файлы с системы хоста. Подобие "песочницы". Т.е. можно например, установить три такие системы, и при этом, в отличие от виртуальных машин - это будет занимать очень мало места, т.к. сохраняться будут только отличающиеся файлы.

Вроде всё выглядит просто, логично и понятно, но... если у меня на хосте Windows а в докере я хочу Ubuntu – так нельзя? Тогда нужна виртуальная машина с Ubuntu, и в неё нужно устанавливать докер?

Зашел в чудесное хранилище образов - hub.docker.com и совсем погряз в вопросах.

Я ожидал увидеть там "готовые образы виртуальных машин" для каких-либо задач, но кроме всего прочего, я увидел, например "phpmyadmin" - это ведь не ОС, не окружение, а всего-то набор php скриптов! Что в этом образе? Ведь для phpmyadmin нужна настроенная ОС, нужен сконфигурированный вебсервер, нужен интерпретатор php, нужна база данных. Я понимаю, что всё это "где-то" должно быть, но где? Все это скачается огромным образом целой ОС? Или все это должно быть на хосте? Или в докере, в родительском контейнере? Почему тогда не указаны какие-то зависимости, или не указано что будет скачиваться вместе с phpmyadmin?

Есть вообще образ для всего одного файла: "adminer" (аналог phpmyadmin, состоящий всего из одного php файла). Зачем нужен целый образ для одного php файла? Он используется как частица для других образов? Т.е. как зависимость, а не как полноценный рабочий образ?

Объясните пожалуйста, ничего не понимаю. Почему в образах с неким софтом не указывается какая нужна ОС и какое окружение? Или целая ОС со всем окружением будет скачиваться как зависимость?
  • Вопрос задан
  • 1911 просмотров
Пригласить эксперта
Ответы на вопрос 5
karabanov
@karabanov Куратор тега Docker
Системный администратор
Docker - это не виртуализация. Это построенная на базе линуксовых namespace и cgroups средство изоляции процессов.
Под Windows и Mac нет линуксовых namespace и cgroups поэтому приходится запускать контейнеры в виртуальной машине, что и создаёт путаницу.
Ответ написан
> Почему в образах с неким софтом не указывается какая нужна ОС
Потому что сам образ строится на основе ОС.
Т.е. для этого "некоего софта" может быть несколько образов, на базе Ubuntu, Debian или (если образ правильный : ) на Alpine.
Только ОС в контейнере, как правило, сильно обрезанная. И да, ядро используется хостовой машины.

> если у меня на хосте Windows а в докере я хочу Ubuntu
Соответственно, берите абсолютно любой образ на основе Ubuntu.

> если у меня на хосте Windows
только имейте в виду, что (как минимум, до недавнего времени) Docker под Windows работал настолько через ..., что я, например, для работы с Docker-контейнерами, сидя под Win 10, таки поднимаю виртуалку с Alpine, и там уже поднимаю Docker.
Ответ написан
@CHtommy
Супер-мега-быстрый гайд для джунов.
Есть канал на ютубе = СЛЁРМ. Маст-хев для начинающих с их школой. Там прям все по полочкам разложено. Хочу помочь тебе обратить ВНИМАНИЕ на dockerfile - т.к на нем создается весь конфиг твоего будущего стека. Соответственно можешь загуглить и посмотреть, как он создается. А после его внедрения он получит тот же phpmyadmin, linux, php,js и т.д (ИМЕННО DOCKERFILE(DOCKER-COMPOSE) СЛУЖИТ НАСТРОЙКОЙ ВСЕХ БУДУЩИХ КОМПОНЕНТОВ)
И ты там спрашивал про то, что все компоненты скачиваются с ОС - не совсем, там урезанная версия OC, которая будет запускать только основные компоненты, а остальное ты сам дополняешь через dockerfile. Например тот же alpine весит не больше 15 мб,а остальная движуха по типу htop - ты уже сам закидываешь в dockerfile.

Если еще короче, то: Все, что ты делал ранее на линуксе и настраивал под себя - нужно закинуть в dockerfile. Вдруг ты хочешь свапнутся на другой пк, а у тебя линукс стоит вообще хз где, ты dockerfile забираешь с собой и на другом пк ставишь docker и все. Все действия, которые ты делал на протяжении 3-6 часов компилятся автоматически за тебя и ты получаешь свою ОС с настройками и движухой.

НО по мимо dockerfile, если вы в проде мутите "движуху "- скорее всего понадобится docker-compose. Просто загугли чем отличается одно от другого и там будет вся доступая инфа.

Далее... docker-hub. Это как маркет с приложениями. Уже все готово и если ты не хочешь разворачивать LAMP & WAMP, то просто скачиваешь один из пакетов и все запускается за 2 минуты.

И последнее...Если ты например для дома все это делаешь или тебе нужна вторая ОС для твоих задач, а не просто запустить сервер и готово, то есть WSL2 (привет win10). Туда же можно поставить ubuntu&debian&alpine и т.д

Как по мне...Докер для форточки - это мусор никому не нужный. Что там запускать и тестить - я не знаю. Разве что девопсам опыт получать дома...

UPD: Все твои вопросы описанные в теме - все они относятся к dockerfile. Там и ОС, там и стек, там и настройки.
Ответ написан
Комментировать
saboteur_kiev
@saboteur_kiev
software engineer
Docker работает только под Линукс, потому что он работает благодаря namespace и cgroups фич, встроенных в ядро Линукс.
В винде запускается виртуальная машина с Линукс, в которой уже запускается докер.

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

Так как разные Линуксы все равно юзают тоже ядро, то в образах и указано что именно установлено в Линукс, и образ PHP обозначает, что там будет образ линукса с установленным PHP
Ответ написан
@PATRI0T
посмотрите видос https://www.youtube.com/watch?v=QF4ZF857m44
Очень неплохое объяснение основ
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы