Знакомство с 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, инструменты командной строки и предоставляет удобный графический интерфейс.

  1. Проверьте системные требования: Docker Desktop для Windows требует 64-битную Windows 10/11 Pro, Enterprise или Education и включенную виртуализацию в BIOS/UEFI (обычно она уже включена). Для работы он использует WSL 2 (Windows Subsystem for Linux).
  2. Скачайте установщик: Перейдите на официальный сайт Docker Desktop и скачайте версию для вашей ОС.
  3. Установка: Запустите установщик и следуйте инструкциям. Самый важный шаг — убедитесь, что установлен флажок «Install required Windows components for WSL 2». Может потребоваться перезагрузка.
  4. Запуск и проверка: После установки запустите 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 — это одна из лучших инвестиций, которую может сделать современный веб-разработчик. Начните с малого, экспериментируйте с готовыми образами, попробуйте «докеризировать» свой текущий проект, и вы быстро ощутите всю мощь этой технологии.

 

Recent Posts

Зачем веб-разработчику виртуальная машина (VM) 🖥️

На заре моей карьеры веб-разработчика все было относительно просто: установил локальный сервер (помните Denwer?), положил…

1 день ago

Что такое OPcache: ⚡ Ускоряем PHP и WordPress

Если вы когда-либо интересовались, как ускорить свой сайт на WordPress, вы, наверное, слышали о "кешировании".…

2 дня ago

Что такое XML: невидимый инструмент для вашего сайта и SEO 📄

Когда мы говорим о веб-разработке, первое, что приходит на ум — это HTML и CSS.…

3 дня ago

Что такое качественный контент 📝 и как его распознать?

В мире SEO есть фраза, которую повторяют так часто, что она уже стала клише: "Content…

4 дня ago

Как зарегистрировать торговую марку в Украине ⚖️ | Пошаговая инструкция

Создание бизнеса — это как рождение ребенка. Вы вкладываете в него душу, время и деньги.…

5 дней ago

Что такое FastCGI и PHP-FPM 🚀 | Как работает современный PHP

Когда вы только начинаете работать с PHP, кажется, что все просто: вы пишете код, веб-сервер…

6 дней ago