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, здається, що все просто: ви пишете код, веб-сервер…