Урок 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 придумывает их сам, если имя не указано. В следующем уроке научимся давать свои имена и убирать лишние контейнеры.

Мини-тест: проверьте себя

Закрепите урок: несколько вопросов, разбор ответов — в конце.

  1. Чем образ отличается от контейнера?

  2. Почему контейнер запускается быстрее виртуальной машины?

  3. Какая команда проверит, что Docker установлен и умеет запускать контейнеры?