SebWeo.com
В мире веб-разработки мы постоянно сталкиваемся с проблемой: «А у меня на компьютере все работает!». Код, который идеально функционирует у вас локально, вдруг выдает ошибки на сервере коллеги или, что хуже всего, на боевом сервере. Причина? Разные версии операционных систем, библиотек, баз данных, самого PHP… список можно продолжать бесконечно.
Раньше эту проблему пытались решать с помощью виртуальных машин, но они довольно «тяжелые» и ресурсоемкие. И тут на сцену выходит Docker — технология, которая позволяет «упаковать» ваше приложение вместе со всем его окружением (библиотеками, зависимостями, настройками) в легкий, переносимый контейнер. В этой статье я хочу познакомить вас с этим мощным инструментом и показать, как сделать первые шаги.
Если виртуальная машина — это полноценный виртуальный компьютер со своей операционной системой, то контейнер Docker — это скорее изолированный процесс, который работает поверх ядра вашей основной ОС. Он содержит только само приложение и его непосредственные зависимости.
Ключевые преимущества контейнеров:
Dockerfile`.docker-compose.yml` и запустить все одной командой.
Для работы с Docker на Windows или macOS удобнее всего использовать Docker Desktop. Это программа, которая устанавливает сам Docker Engine, инструменты командной строки и предоставляет удобный графический интерфейс.
docker --version
Вы должны увидеть версию Docker. Затем выполните тестовый запуск:
docker run hello-world
Если все в порядке, 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 для входа в консоль контейнера).
Давайте создадим мини-проект. Создайте папку 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 — это одна из лучших инвестиций, которую может сделать современный веб-разработчик. Начните с малого, экспериментируйте с готовыми образами, попробуйте «докеризировать» свой текущий проект, и вы быстро ощутите всю мощь этой технологии.
На заре моей карьеры веб-разработчика все было относительно просто: установил локальный сервер (помните Denwer?), положил…
Если вы когда-либо интересовались, как ускорить свой сайт на WordPress, вы, наверное, слышали о "кешировании".…
Когда мы говорим о веб-разработке, первое, что приходит на ум — это HTML и CSS.…
В мире SEO есть фраза, которую повторяют так часто, что она уже стала клише: "Content…
Создание бизнеса — это как рождение ребенка. Вы вкладываете в него душу, время и деньги.…
Когда вы только начинаете работать с PHP, кажется, что все просто: вы пишете код, веб-сервер…