Зачем здесь Docker
Допустим, нам нужен веб-сервер Nginx. Без Docker пришлось бы отдельно его скачать, установить и настроить.
С Docker мы берём уже подготовленный набор с Nginx и запускаем его отдельно от остальных программ на компьютере.
Шаг 1. Запустите сайт
Откройте терминал, вставьте команду и нажмите Enter:
docker run --name my-site -d -p 8080:80 nginx:alpine
При первом запуске Docker может несколько секунд скачивать файлы. После этого откройте в браузере:
Адрес нужно открыть на том же компьютере, где запущен Docker. Если курс открыт на телефоне или планшете, введите адрес в браузере компьютера.
Если появилась страница Welcome to nginx!, всё получилось. Сейчас Nginx работает внутри Docker.
Если страница не открылась
Сначала выполните:
docker ps
В списке должна быть строка с именем my-site. Если терминал показал ошибку, не пытайтесь угадывать причину: сохраните её целиком и отправьте преподавателю.
Что сейчас произошло
Нам понадобились две вещи:
- Образ (image) — подготовленный набор с программой Nginx. Сам по себе он не работает.
- Контейнер (container) — запущенный экземпляр этого образа. Именно он сейчас показывает страницу.
Можно представить образ как сохранённую заготовку, а контейнер — как работающую копию этой заготовки. Из одного образа можно запускать несколько контейнеров.
Что написано в команде
Не нужно запоминать всё сразу. Сейчас важны только четыре части:
| Часть | Простыми словами |
|---|---|
docker run | Запусти контейнер. |
--name my-site | Назови его my-site, чтобы потом легко найти. |
-p 8080:80 | Открой сайт на нашем компьютере по адресу с портом 8080. |
nginx:alpine | Используй подготовленный образ Nginx. |
-d просто оставляет контейнер работать в фоне, чтобы терминал не был занят.
Шаг 2. Остановите и верните сайт
Остановите контейнер:
docker stop my-site
Обновите страницу. Она перестанет открываться, потому что программа больше не работает.
Запустите тот же контейнер снова:
docker start my-site
Обновите страницу ещё раз. Сайт вернулся.
Теперь самостоятельно
Создайте второй контейнер. Измените в первой команде:
- имя
my-siteнаmy-second-site; - порт
8080:80на8081:80.
До запуска ответьте: по какому адресу откроется второй сайт?
Показать решение
docker run --name my-second-site -d -p 8081:80 nginx:alpine
Второй сайт откроется по адресу http://localhost:8081. Оба контейнера используют один образ, но работают отдельно.
Три коротких вопроса
Объясните своими словами
Закончите фразу: «Образ — это…, а контейнер — это…»
Как это сказать на собеседовании
«Образ — это подготовленный неизменяемый шаблон приложения и его зависимостей. Контейнер — запущенный экземпляр образа. Из одного образа можно создать несколько независимых контейнеров».
Эту формулировку пока не нужно заучивать. Сначала важно уверенно объяснять разницу своими словами.
Урок пройден, если
- Вы увидели страницу Nginx в браузере.
- Вы остановили контейнер и запустили его снова.
- Вы можете своими словами отличить образ от контейнера.
Основной источник: Docker Docs: What is a container?. Если команда не сработала или объяснение осталось непонятным, отправьте вопрос преподавателю вместе с тем, что увидели на экране.
Убрать учебные контейнеры после занятия
docker rm --force my-site my-second-site