1. Место Docker в современной разработке

Docker используют для упаковки приложения вместе с его зависимостями в стандартную среду запуска. Такой подход помогает запускать один и тот же сервис на разных компьютерах и серверах с одинаковым результатом. Для разработки это удобно, для тестирования это предсказуемо, для сопровождения это экономит время на настройку среды.

Когда приложение запускается напрямую в операционной системе, его работа зависит от установленных библиотек, версий интерпретаторов, переменных окружения и системных настроек. Docker выносит эти зависимости в образ, после чего приложение стартует внутри контейнера в заранее подготовленном окружении.

2. Базовые понятия

Контейнер

Контейнер представляет собой запущенный экземпляр приложения в изолированной среде. У него есть собственная файловая система, собственный список процессов и собственные сетевые настройки в пределах выделенной среды.

Образ

Образ представляет собой шаблон, из которого создаются контейнеры. В образ обычно входят:

  • базовая система
  • нужные пакеты и зависимости
  • приложение
  • команда запуска

Образ можно сравнить с заготовкой, а контейнер с уже запущенной копией этой заготовки.

Docker Engine

Docker Engine является службой, которая управляет образами, контейнерами, сетями и томами. Пользователь отправляет команды через Docker CLI, а движок выполняет нужные действия.

Docker Hub

Docker Hub является онлайн-репозиторием готовых образов. Оттуда можно получить стандартные образы, например:

  • nginx
  • ubuntu
  • python
  • mysql

3. Принцип работы Docker

Работа с Docker обычно выглядит так:

  1. Пользователь выбирает готовый образ или собирает свой
  2. Docker загружает образ на компьютер
  3. На основе образа создаётся контейнер
  4. Контейнер запускает главный процесс
  5. Пользователь взаимодействует с контейнером через терминал, порт или файлы

Контейнер живёт до тех пор, пока работает его основной процесс. Если главный процесс завершился, контейнер останавливается.

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 (самый простой вариант)

  1. Скачать Docker Desktop:
    https://www.docker.com/products/docker-desktop

  2. Открыть .dmg и перетащить Docker в Applications

  3. Запустить Docker из Applications

  4. Дождаться запуска (иконка в меню)

  5. Проверить в терминале:

Ubuntu / Linux (через apt)

1. Обновить систему

sudo apt update

2. Установить зависимости

sudo apt install ca-certificates curl gnupg

3. Добавить ключ Docker

sudo install -m 0755 -d /etc/apt/keyrings
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. Добавить репозиторий

echo \
«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 update
sudo apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

6. Проверить

docker —version

Разрешение запуска без sudo (Linux)

Чтобы не писать sudo перед каждой командой:

sudo usermod -aG docker $USER

Перезайти в систему.

Windows

  1. Скачать Docker Desktop:
    https://www.docker.com/products/docker-desktop

  2. Установить (включить WSL2 при необходимости)

  3. Перезагрузить компьютер

  4. Открыть PowerShell и выполнить:

docker —version

Быстрая проверка после установки

docker run hello-world

Если выводится сообщение от 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″]