Знакомство с Docker для веб-разработчика 🐳 | Установка и основы
В мире веб-разработки мы постоянно сталкиваемся с проблемой: «А у меня на компьютере все работает!». Код, который идеально функционирует у вас локально, вдруг выдает ошибки на сервере коллеги или, что хуже всего, на боевом сервере. Причина? Разные версии операционных систем, библиотек, баз данных, самого PHP… список можно продолжать бесконечно.
Раньше эту проблему пытались решать с помощью виртуальных машин, но они довольно «тяжелые» и ресурсоемкие. И тут на сцену выходит Docker — технология, которая позволяет «упаковать» ваше приложение вместе со всем его окружением (библиотеками, зависимостями, настройками) в легкий, переносимый контейнер. В этой статье я хочу познакомить вас с этим мощным инструментом и показать, как сделать первые шаги.
Что такое Docker простыми словами? Контейнеры vs Виртуальные машины
Если виртуальная машина — это полноценный виртуальный компьютер со своей операционной системой, то контейнер Docker — это скорее изолированный процесс, который работает поверх ядра вашей основной ОС. Он содержит только само приложение и его непосредственные зависимости.
Ключевые преимущества контейнеров:
- 💨 Легкость и скорость: Контейнеры запускаются за секунды (а не минуты, как ВМ) и потребляют значительно меньше ресурсов (RAM, CPU).
- 📦 Переносимость: Контейнер будет работать одинаково на вашем ноутбуке, на сервере коллеги или в облаке. «Упаковал один раз — запускай где угодно».
- ⚙️ Изоляция: Каждый контейнер работает в своем изолированном пространстве, не влияя на другие и на хост-систему.
Основные понятия Docker
- Образ (Image): Это шаблон, «чертеж» для создания контейнера. Он содержит операционную систему (минимальную версию), код вашего приложения и все необходимые зависимости. Образы строятся на основе инструкций в файле `
Dockerfile`. - Контейнер (Container): Это запущенный экземпляр образа. Вы можете запустить много контейнеров из одного образа.
- Dockerfile: Текстовый файл с инструкциями для Docker, как собрать образ (например, «взять Ubuntu», «установить PHP», «скопировать код»).
- Docker Hub: Публичный репозиторий образов (похож на GitHub для кода). Вы можете скачивать готовые образы (PHP, MySQL, Nginx) или делиться своими.
- Docker Compose: Инструмент для определения и запуска многоконтейнерных приложений. Например, ваш сайт может состоять из трех контейнеров: один для Nginx, второй для PHP-FPM (о нем я писал здесь), третий для MySQL. Docker Compose позволяет описать эту связку в одном файле `
docker-compose.yml` и запустить все одной командой.
Установка Docker Desktop
Для работы с Docker на Windows или macOS удобнее всего использовать Docker Desktop. Это программа, которая устанавливает сам Docker Engine, инструменты командной строки и предоставляет удобный графический интерфейс.
- Проверьте системные требования: Docker Desktop для Windows требует 64-битную Windows 10/11 Pro, Enterprise или Education и включенную виртуализацию в BIOS/UEFI (обычно она уже включена). Для работы он использует WSL 2 (Windows Subsystem for Linux).
- Скачайте установщик: Перейдите на официальный сайт Docker Desktop и скачайте версию для вашей ОС.
- Установка: Запустите установщик и следуйте инструкциям. Самый важный шаг — убедитесь, что установлен флажок «Install required Windows components for WSL 2». Может потребоваться перезагрузка.
- Запуск и проверка: После установки запустите Docker Desktop. В системном трее появится иконка кита 🐳. Откройте терминал (PowerShell или CMD) и выполните команду:
docker --version
Вы должны увидеть версию Docker. Затем выполните тестовый запуск:
docker run hello-world
Если все в порядке, Docker скачает небольшой образ и выведет приветственное сообщение.
Базовые команды Docker
Работа с Docker преимущественно происходит через командную строку. Вот несколько основных команд:
docker pull [имя_образа]:[тег]: Скачать образ с Docker Hub (например,docker pull php:8.3-fpm).docker images: Показать список скачанных образов.docker run [опции] [имя_образа] [команда]: Создать и запустить контейнер из образа.
Популярные опции
docker run-d: Запустить контейнер в фоновом режиме («detached»).-p [порт_хоста]:[порт_контейнера]: Пробросить порт из контейнера на ваш компьютер (например,-p 8080:80).-v [путь_хоста]:[путь_контейнера]: «Примонтировать» папку с вашего компьютера внутрь контейнера (для кода проекта).--name [имя_контейнера]: Дать контейнеру понятное имя.
docker ps: Показать список запущенных контейнеров.docker ps -a: Показать список всех контейнеров (включая остановленные).docker stop [имя_или_id_контейнера]: Остановить контейнер.docker start [имя_или_id_контейнера]: Запустить остановленный контейнер.docker rm [имя_или_id_контейнера]: Удалить остановленный контейнер.docker rmi [имя_или_id_образа]: Удалить образ.docker exec -it [имя_или_id_контейнера] [команда]: Выполнить команду внутри запущенного контейнера (например,docker exec -it my-php-container bashдля входа в консоль контейнера).
Пример: простой сайт на PHP + Nginx с Docker Compose
Давайте создадим мини-проект. Создайте папку my-docker-project. Внутри создайте папку src и в ней файл index.php:
<?php echo "Привет из Docker!"; ?>
Теперь в корне проекта (my-docker-project) создайте файл docker-compose.yml:
version: '3.8' # Версия формата файла
services:
# Сервис для PHP-FPM
php:
image: php:8.3-fpm # Используем официальный образ PHP 8.3-FPM
volumes:
- ./src:/var/www/html # Монтируем наш код в контейнер
# Сервис для Nginx
nginx:
image: nginx:latest # Используем официальный образ Nginx
ports:
- "8080:80" # Пробрасываем порт 80 контейнера на порт 8080 нашего компьютера
volumes:
- ./src:/var/www/html # Монтируем код
- ./nginx.conf:/etc/nginx/conf.d/default.conf # Монтируем конфигурацию Nginx
depends_on:
- php # Nginx зависит от PHP
И рядом создайте файл nginx.conf с базовой конфигурацией Nginx для работы с PHP-FPM:
server {
listen 80;
server_name localhost;
root /var/www/html;
index index.php;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
location ~ \.php$ {
fastcgi_pass php:9000; # Передаем запросы сервису 'php' на порт 9000
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
}
Теперь откройте терминал в папке my-docker-project и выполните команду:
docker-compose up -d
Docker Compose скачает образы (если их еще нет), создаст и запустит два контейнера в фоновом режиме. Откройте браузер и перейдите на http://localhost:8080. Вы должны увидеть «Привет из Docker!«.
Чтобы остановить и удалить контейнеры, выполните:
docker-compose down
Вывод: новый стандарт разработки и деплоя
Освоение Docker сначала может показаться сложным, но преимущества, которые он дает, огромны. Это инструмент, который решает извечную проблему «у меня работает», обеспечивает консистентность сред и значительно упрощает процесс развертывания приложений.
По моему мнению, инвестиция времени в изучение Docker — это одна из лучших инвестиций, которую может сделать современный веб-разработчик. Начните с малого, экспериментируйте с готовыми образами, попробуйте «докеризировать» свой текущий проект, и вы быстро ощутите всю мощь этой технологии.