Да что такое этот ваш Docker и контейнеры?! Хэй! Возможно, ты сидишь рядом с коллегами у кулера и слышишь: «доки», «контейнеры», «оркестрация» — и понимаешь ровно столько же, что я, когда впервые это услышал. Но давай разберёмся: это не магия, это просто инструменты DevOps, и Docker — один из них.
Почему не просто виртуалки
Представь такую ситуацию: твой коллега пишет приложение на каком-то странном языке, загружает миллион зависимостей, запускает его на своём Linux-дистрибутиве… и как теперь ты, на своём компьютере, запустишь этот код?
Обычная виртуалка (VM) — решение, но тяжелое. Ведь каждая VM имеет свою ОС, и запуск нескольких таких — ресурсоёмкий.
Docker — альтернатива: вместо виртуализации железа, он виртуализирует операционку, используя ядро хоста. Это значит: меньше оверхеда, но изоляция приложений сохраняется.
Основные компоненты Docker
Три главных элемента, которые нужно понять:
- Dockerfile — текстовый файл с инструкциями: как собрать образ, что туда положить и как настраивать.
- Image (образ) — результат сборки: приложение + библиотеки + всё, что нужно для запуска.
- Container (контейнер) — запущенный экземпляр образа: «работающий» Docker-экземпляр.
Взаимодействие: из Dockerfile создаётся образ → из образа запускается контейнер.
Пример Dockerfile
Допустим, мы хотим запустить nginx:
FROM ubuntu:20.04
RUN apt-get update
RUN apt-get -y install nginx
EXPOSE 80/tcp
CMD ["/usr/sbin/nginx", "-g", "daemon off;"]
Пояснения:
FROM ubuntu:20.04— берём Ubuntu 20.04 как базу.RUN— шаги установки зависимостей (apt, nginx).EXPOSE— говорим, что контейнер будет слушать порт 80.CMD— что будет запущено, когда контейнер стартует (nginx в «фореграунд» режиме).
Когда файл готов — делаем docker build, и Docker создаёт образ. Затем docker run — запускает контейнер. Можно открыть localhost в браузере и увидеть nginx — просто, как код работает везде одинаково.
Registry и Docker Hub
Образы можно не только собирать самому, но и брать готовые. Для этого есть Docker Registry — хранилище образов. Самый популярный — Docker Hub.
- Ты можешь
docker pull nginx— и запустить nginx без своего Dockerfile. - Или собрать свой образ, запушить его в registry и делиться с командой.
Перманентность данных и контейнеры
Важно знать: изменения в контейнере по умолчанию не сохраняются после его остановки — всё, что делалось внутри, умрёт вместе с ним. Поэтому, если нужно хранить данные — используют volume’ы, монтирование, базу и т.п.
Работа с несколькими контейнерами — docker-compose
Когда у тебя не просто один контейнер, а всё приложение из микросервисов — один nginx, БД, кеш и т.д., — docker-compose приходит на помощь.
В docker-compose.yml ты описываешь все сервисы, их связи, сети, тома — и запускаешь всё командой:
docker-compose up
Плюсы:
- Поднимаешь всё одним махом.
- Чёткая конфигурация в одном файле.
- Легче поддерживать зависимости между сервисами.
Оркестрация контейнеров
Если контейнеров много, их надо оркестровать: управлять жизненным циклом, масштабировать, балансировать нагрузку и следить за здоровьем. Здесь на сцену выходит:
- Docker Swarm — встроенный инструмент Docker для оркестрации.
- Kubernetes — хит DevOps-мира, более мощный и гибкий.
Многие команды используют именно Kubernetes, потому что он даёт больше контроля и возможностей.
Итог
Docker — это не просто строка в резюме (хотя, да, это тоже), но и реально крутой инструмент:
- Автоматизирует запуск приложений
- Делает приложения консистентными (работают одинаково везде)
- Экономит ресурсы
- Хорошо сочетается с микросервисами и оркестрацией
Вопрос к знатокам: если Docker такой огонь, почему виртуалки всё ещё используются? В каких сценариях без виртуалки никак не обойтись?
