Урок 1 из 8 · 15 мин · обновлено
Зачем нужен Docker: образ, контейнер и установка
Какую проблему решает Docker, чем образ отличается от контейнера, а контейнер — от виртуальной машины, как установить Docker и проверить его.
Проблема «у меня работает»
Разработчик написал программу. На его ноутбуке всё работает. Он отдаёт её тестировщику — а там ошибка: другая версия языка, не хватает библиотеки, иначе настроена система. Полдня уходит на выяснения, а потом всё повторяется на сервере.
Docker решает это так: программа упаковывается вместе со всем, что ей нужно, — нужной версией языка, библиотеками, настройками. Такую упаковку можно запустить на любом компьютере с Docker, и она будет работать одинаково.
Образ и контейнер
Два главных понятия Docker:
- Образ — неизменяемый шаблон: программа и её окружение. Как установочный диск.
- Контейнер — запущенный экземпляр образа. Как программа, установленная с этого диска и работающая прямо сейчас.
Из одного образа можно запустить сколько угодно контейнеров — например, три одинаковых веб-сервера. Образы хранятся в реестрах; главный публичный реестр называется Docker Hub. Там лежат готовые образы почти любых программ: веб-серверов, баз данных, языков программирования.
Контейнер и виртуальная машина
Похоже на виртуальную машину, но это другое:
| Виртуальная машина | Контейнер | |
|---|---|---|
| Что внутри | целая операционная система | только программа и её окружение |
| Размер | гигабайты | обычно десятки или сотни мегабайт |
| Запуск | минуты | секунды |
| Изоляция | полная | достаточная для большинства задач |
Контейнер использует ядро операционной системы компьютера, на котором запущен, и не тащит за собой свою систему целиком. Поэтому на одном ноутбуке спокойно работают десятки контейнеров.
Установка
- Windows — Docker Desktop. Для работы ему нужна подсистема WSL 2: установщик предложит её включить.
- Mac — Docker Desktop. Выберите версию под свой процессор: Apple или Intel.
- Linux — Docker Engine из официального репозитория для вашего дистрибутива.
Docker Desktop бесплатен для личного использования, обучения и небольших компаний. После установки откройте терминал и проверьте:
docker version
Команда покажет версии клиента и сервера Docker. Теперь первый контейнер:
docker run hello-world
Hello from Docker!
This message shows that your installation appears to be working correctly.
Docker скачал крошечный образ hello-world, запустил по нему контейнер, тот напечатал приветствие и завершился. Всё работает.
Попробуйте сами. Установите Docker, проверьте версию и запустите hello-world. Затем запустите его ещё раз и выполните docker ps -a — посмотрите, сколько контейнеров теперь в списке.
Решение и что вы увидите
docker version
docker run hello-world
docker run hello-world
docker ps -a
docker ps -a покажет два остановленных контейнера, созданных из одного образа hello-world. Каждая команда docker run создаёт новый контейнер — это наглядно показывает разницу между образом и контейнером. Во второй раз образ не скачивался: он уже лежал на компьютере.
У контейнеров будут случайные имена вроде nostalgic_pare: Docker придумывает их сам, если имя не указано. В следующем уроке научимся давать свои имена и убирать лишние контейнеры.
Мини-тест: проверьте себя
Закрепите урок: несколько вопросов, разбор ответов — в конце.
-
Чем образ отличается от контейнера?
Образ можно сравнить с установочным диском, контейнер — с установленной и запущенной программой. Из одного образа запускают сколько угодно контейнеров.
-
Почему контейнер запускается быстрее виртуальной машины?
Виртуальная машина загружает полноценную операционную систему. Контейнер — изолированный процесс на ядре хоста, поэтому стартует за секунды.
-
Какая команда проверит, что Docker установлен и умеет запускать контейнеры?
hello-world скачивает крошечный образ и запускает контейнер, который печатает приветствие. Если оно появилось — всё работает.