Знайомство з 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