Docker революціонізував процес розробки, дозволяючи створювати ізольовані середовища, ідентичні продакшену. У цій статті налаштуємо повноцінне Docker середовище для OpenCart.
Чому Docker?
- Консистентність — однакове середовище для всіх розробників
- Ізоляція — різні версії PHP для різних проектів
- Простота — один
docker-compose upзапускає все - Продакшен-ready — легко мігрувати на сервер
Структура проекту
opencart-docker/
├── docker/
│ ├── nginx/
│ │ └── default.conf
│ └── php/
│ └── Dockerfile
├── src/
│ └── (OpenCart files)
├── docker-compose.yml
└── .env
Docker Compose конфігурація
# docker-compose.yml
version: '3.8'
services:
nginx:
image: nginx:alpine
ports:
- "80:80"
volumes:
- ./src:/var/www/html
- ./docker/nginx/default.conf:/etc/nginx/conf.d/default.conf
depends_on:
- php
networks:
- opencart
php:
build:
context: ./docker/php
volumes:
- ./src:/var/www/html
environment:
- PHP_MEMORY_LIMIT=256M
networks:
- opencart
mysql:
image: mysql:8.0
environment:
MYSQL_ROOT_PASSWORD: ${DB_ROOT_PASSWORD}
MYSQL_DATABASE: ${DB_DATABASE}
MYSQL_USER: ${DB_USERNAME}
MYSQL_PASSWORD: ${DB_PASSWORD}
volumes:
- mysql_data:/var/lib/mysql
ports:
- "3306:3306"
networks:
- opencart
redis:
image: redis:alpine
ports:
- "6379:6379"
networks:
- opencart
mailhog:
image: mailhog/mailhog
ports:
- "1025:1025"
- "8025:8025"
networks:
- opencart
networks:
opencart:
volumes:
mysql_data:
PHP Dockerfile
# docker/php/Dockerfile
FROM php:8.2-fpm
# Встановлення залежностей
RUN apt-get update && apt-get install -y \
libpng-dev \
libjpeg-dev \
libfreetype6-dev \
libzip-dev \
unzip \
git \
&& docker-php-ext-configure gd --with-freetype --with-jpeg \
&& docker-php-ext-install -j$(nproc) \
gd \
mysqli \
pdo_mysql \
zip \
opcache
# Redis extension
RUN pecl install redis && docker-php-ext-enable redis
# Composer
COPY --from=composer:latest /usr/bin/composer /usr/bin/composer
# PHP конфігурація
RUN echo "memory_limit=256M" > /usr/local/etc/php/conf.d/opencart.ini \
&& echo "upload_max_filesize=50M" >> /usr/local/etc/php/conf.d/opencart.ini \
&& echo "post_max_size=50M" >> /usr/local/etc/php/conf.d/opencart.ini
WORKDIR /var/www/html
Nginx конфігурація
# docker/nginx/default.conf
server {
listen 80;
server_name localhost;
root /var/www/html;
index index.php;
location / {
try_files $uri $uri/ @opencart;
}
location @opencart {
rewrite ^/(.+)$ /index.php?_route_=$1 last;
}
location ~ \.php$ {
fastcgi_pass php:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
location ~* \.(jpg|jpeg|png|gif|ico|css|js)$ {
expires 30d;
}
}
mailhog для тестування email без реальної відправки. Веб-інтерфейс доступний на порту 8025.
Файл .env
# .env
DB_ROOT_PASSWORD=root_password
DB_DATABASE=opencart
DB_USERNAME=opencart
DB_PASSWORD=opencart_password
Запуск
# Побудова та запуск
docker-compose up -d --build
# Перегляд логів
docker-compose logs -f
# Зупинка
docker-compose down
# Видалення з volumes
docker-compose down -v
Docker — це не просто інструмент, це філософія розробки. "Works on my machine" більше не є виправданням.
— Solomon Hykes, творець Docker
Корисні команди
# Зайти в PHP контейнер
docker-compose exec php bash
# Виконати команду в контейнері
docker-compose exec php php -v
# MySQL консоль
docker-compose exec mysql mysql -u opencart -p
# Очистити все
docker system prune -a
Висновок
Тепер у вас є повноцінне Docker середовище для розробки OpenCart. Це однакове середовище можна використовувати на будь-якому комп'ютері та легко адаптувати для продакшену.