1. Место Docker в современной разработке
Docker используют для упаковки приложения вместе с его зависимостями в стандартную среду запуска. Такой подход помогает запускать один и тот же сервис на разных компьютерах и серверах с одинаковым результатом. Для разработки это удобно, для тестирования это предсказуемо, для сопровождения это экономит время на настройку среды.
Когда приложение запускается напрямую в операционной системе, его работа зависит от установленных библиотек, версий интерпретаторов, переменных окружения и системных настроек. Docker выносит эти зависимости в образ, после чего приложение стартует внутри контейнера в заранее подготовленном окружении.
2. Базовые понятия
Контейнер
Контейнер представляет собой запущенный экземпляр приложения в изолированной среде. У него есть собственная файловая система, собственный список процессов и собственные сетевые настройки в пределах выделенной среды.
Образ
Образ представляет собой шаблон, из которого создаются контейнеры. В образ обычно входят:
- базовая система
- нужные пакеты и зависимости
- приложение
- команда запуска
Образ можно сравнить с заготовкой, а контейнер с уже запущенной копией этой заготовки.
Docker Engine
Docker Engine является службой, которая управляет образами, контейнерами, сетями и томами. Пользователь отправляет команды через Docker CLI, а движок выполняет нужные действия.
Docker Hub
Docker Hub является онлайн-репозиторием готовых образов. Оттуда можно получить стандартные образы, например:
nginxubuntupythonmysql
3. Принцип работы Docker
Работа с Docker обычно выглядит так:
- Пользователь выбирает готовый образ или собирает свой
- Docker загружает образ на компьютер
- На основе образа создаётся контейнер
- Контейнер запускает главный процесс
- Пользователь взаимодействует с контейнером через терминал, порт или файлы
Контейнер живёт до тех пор, пока работает его основной процесс. Если главный процесс завершился, контейнер останавливается.
4. Преимущества Docker
Docker полезен в учебной и рабочей среде по нескольким причинам.
Единое окружение
У всех участников команды приложение запускается в одинаковой среде. Это сокращает число ситуаций, когда у одного человека всё работает, а у другого возникает ошибка из-за отличий в системе.
Быстрый запуск
Готовый образ позволяет поднять сервис за одну команду без долгой ручной установки.
Изоляция
Приложение работает в собственном контейнере и меньше влияет на систему хоста.
Удобство тестирования
Можно быстро запускать и удалять среду для проверки гипотез, тестов и конфигураций.
Переносимость
Контейнер удобно переносить между рабочей машиной, тестовым сервером и production-средой.
5. Отличие контейнера от виртуальной машины
Виртуальная машина включает целую гостевую операционную систему. Контейнер использует ядро основной системы и запускает приложение в изолированном пространстве. За счёт этого контейнер стартует быстрее, занимает меньше места и требует меньше ресурсов.
Сравнение выглядит так:
Виртуальная машина:
- отдельная ОС
- больше расход памяти и диска
- более тяжёлый запуск
Контейнер:
- общая работа через ядро хоста
- меньше расход ресурсов
- быстрый старт
6. Структура образа и слои
Docker-образ состоит из слоёв. Каждый слой хранит изменение относительно предыдущего состояния. Такой подход ускоряет сборку и экономит место, потому что одинаковые слои могут использоваться повторно.
Например, образ может содержать:
- базовый Linux-слой
- слой с Python
- слой с библиотеками
- слой с исходным кодом проекта
Если изменился только код приложения, остальные слои можно использовать повторно.
7. Основные команды Docker
Проверка версии
docker --version
Показывает установленную версию Docker.
Загрузка образа
docker pull nginx
Загружает образ nginx из репозитория.
Просмотр образов
docker images
Показывает список доступных образов на компьютере.
Запуск контейнера
docker run nginx
Создаёт и запускает контейнер из образа nginx.
Запуск в фоне с пробросом порта
docker run -d -p 8080:80 --name mynginx nginx
Здесь:
-dзапускает контейнер в фоне-p 8080:80связывает порт 8080 на компьютере с портом 80 внутри контейнера--name mynginxзадаёт имя контейнера
Просмотр контейнеров
docker ps
Показывает работающие контейнеры.
docker ps -a
Показывает все контейнеры, включая остановленные.
Просмотр логов
docker logs mynginx
Выводит журналы контейнера.
Вход внутрь контейнера
docker exec -it mynginx bash
Открывает терминал внутри контейнера, если в образе доступен bash.
Остановка контейнера
docker stop mynginx
Останавливает контейнер.
Удаление контейнера
docker rm mynginx
Удаляет контейнер после остановки.
Удаление образа
docker rmi nginx
Удаляет образ.
8. Порты, тома и сеть
Порты
Контейнеры часто запускают веб-сервисы. Чтобы открыть доступ к ним с основной системы, используют проброс портов.
Пример:
docker run -d -p 8080:80 nginx
После этого сайт будет доступен в браузере по адресу http://localhost:8080.
Томa
Том позволяет сохранить данные вне контейнера. Это особенно важно для баз данных, логов и пользовательских файлов.
Сеть
Docker создаёт собственные сети и позволяет контейнерам обмениваться данными между собой. Это удобно для многокомпонентных систем, где один контейнер работает как приложение, а другой как база данных.
9. Dockerfile
Dockerfile является текстовым файлом, который описывает сборку собственного образа. В нём задаются базовый образ, команды установки, копирование файлов и команда запуска.
Простой пример:
FROM python:3.11
WORKDIR /app
COPY . .
CMD ["python", "app.py"]
Такой файл говорит Docker:
- взять образ Python 3.11
- создать рабочую папку
/app - скопировать туда файлы проекта
- запустить
app.py
10. Сценарии применения Docker
Docker часто используют в следующих ситуациях:
- запуск учебных стендов
- тестирование приложений
- локальный запуск баз данных
- развёртывание веб-сервисов
- сборка и проверка CI/CD
- упаковка микросервисов
Для студентов это полезный инструмент, потому что он позволяет быстро получить рабочую среду без сложной ручной настройки.
11. Ограничения и правила аккуратной работы
Docker даёт удобство, но требует дисциплины:
- контейнеры стоит называть понятно
- лишние контейнеры и образы стоит удалять
- секреты и пароли стоит хранить отдельно
- проброс портов стоит выполнять осознанно
- данные, которые важны для сохранения, стоит выносить в тома
12. Итог по теме
Docker даёт способ запускать приложения в изолированной и повторяемой среде. Основные элементы этой системы:
- образ как шаблон
- контейнер как запущенный экземпляр
- Docker Engine как управляющий механизм
- Docker CLI как набор команд для пользователя
Для студента ключевой результат занятия состоит в умении распознать образ, запустить контейнер, просмотреть его состояние и понять, что приложение живёт внутри отдельной среды.
Практическая работа
Ход работы
Шаг 1. Проверка установки Docker
Выполнить команду:
docker --version
Ожидаемый результат: в терминале отображается версия Docker. Если нет, нужно его установить
macOS (самый простой вариант)
-
Скачать Docker Desktop:
https://www.docker.com/products/docker-desktop -
Открыть
.dmgи перетащить Docker в Applications -
Запустить Docker из Applications
-
Дождаться запуска (иконка в меню)
-
Проверить в терминале:
Ubuntu / Linux (через apt)
1. Обновить систему
2. Установить зависимости
3. Добавить ключ Docker
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg —dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg
4. Добавить репозиторий
«deb [arch=$(dpkg —print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] \
https://download.docker.com/linux/ubuntu \
$(. /etc/os-release && echo «$VERSION_CODENAME«) stable» | \
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
5. Установить Docker
sudo apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
6. Проверить
Разрешение запуска без sudo (Linux)
Чтобы не писать sudo перед каждой командой:
Перезайти в систему.
Windows
-
Скачать Docker Desktop:
https://www.docker.com/products/docker-desktop -
Установить (включить WSL2 при необходимости)
-
Перезагрузить компьютер
-
Открыть PowerShell и выполнить:
Быстрая проверка после установки
Если выводится сообщение от Docker — установка прошла успешно.
Шаг 2. Загрузка образа Nginx
Выполнить команду:
docker pull nginx
Ожидаемый результат: образ nginx загружается на компьютер.
Шаг 3. Просмотр списка образов
Выполнить команду:
docker images
Найти в списке образ nginx.
Шаг 4. Запуск контейнера
Выполнить команду:
docker run -d -p 8080:80 --name lesson-nginx nginx
Ожидаемый результат: Docker создаёт и запускает контейнер в фоне.
Шаг 5. Проверка работы контейнера
Выполнить команду:
docker ps
Найти контейнер lesson-nginx.
После этого открыть в браузере адрес:
http://localhost:8080
Ожидаемый результат: в браузере открывается стартовая страница Nginx.
Шаг 6. Просмотр журналов контейнера
Выполнить команду:
docker logs lesson-nginx
Посмотреть, появились ли записи о запуске сервера.
Шаг 7. Остановка контейнера
Выполнить команду:
docker stop lesson-nginx
Проверить результат командой:
docker ps -a
Ожидаемый результат: контейнер присутствует в списке и имеет статус остановленного.
Шаг 8. Удаление контейнера
Выполнить команду:
docker rm lesson-nginx
Проверить, что контейнер исчез из списка:
docker ps -a
[task_id id=»21470″]