PHP / Magento Dev Blog

  • Publikacje
  • O autorze
  • Kontakt

Docker Compose dla Magento 2 bez DDEV – własny stack PHP 8.4, MariaDB, Redis, OpenSearch

by Henryk Tews / sobota, 29 sierpnia 2026 / Opublikowano w Środowiska

DDEV to wygodne narzędzie ale nie jedyna droga. Własny stack Docker Compose daje pełną kontrolę: dokładnie te wersje usług których potrzebujesz, własna sieć, integracja z CI/CD, możliwość wdrożenia na dowolnym serwerze bez zmian. Pokażę minimalny ale kompletny stack dla Magento 2 z PHP 8.4, MariaDB 10.6, Redis, OpenSearch i nginx.

Struktura projektu

magento-docker/
  docker-compose.yml
  docker-compose.override.yml   # lokalne nadpisania (gitignore)
  .env                          # zmienne środowiskowe
  docker/
    nginx/
      default.conf              # konfiguracja nginx dla Magento 2
    php/
      Dockerfile                # PHP 8.4 + rozszerzenia
      php.ini
      php-fpm.conf
    mysql/
      my.cnf

docker-compose.yml

services:
  nginx:
    image: nginx:1.27-alpine
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - .:/var/www/html:cached
      - ./docker/nginx/default.conf:/etc/nginx/conf.d/default.conf:ro
      - ./docker/ssl:/etc/nginx/ssl:ro
    depends_on: [php]
    networks: [magento]

  php:
    build:
      context: ./docker/php
      args:
        PHP_VERSION: "8.4"
    volumes:
      - .:/var/www/html:cached
      - ./docker/php/php.ini:/usr/local/etc/php/php.ini:ro
    environment:
      PHP_IDE_CONFIG: "serverName=magento"
      XDEBUG_MODE: "${XDEBUG_MODE:-off}"
      XDEBUG_CLIENT_HOST: host-gateway
    extra_hosts:
      - "host-gateway:host-gateway"
    networks: [magento]

  db:
    image: mariadb:10.6
    environment:
      MARIADB_ROOT_PASSWORD: root
      MARIADB_DATABASE: magento
      MARIADB_USER: magento
      MARIADB_PASSWORD: magento
    volumes:
      - db_data:/var/lib/mysql
      - ./docker/mysql/my.cnf:/etc/mysql/conf.d/magento.cnf:ro
    ports:
      - "3306:3306"
    networks: [magento]

  redis:
    image: redis:7.2-alpine
    command: redis-server --maxmemory 512mb --maxmemory-policy volatile-lru
    ports:
      - "6379:6379"
    networks: [magento]

  opensearch:
    image: opensearchproject/opensearch:2.13.0
    environment:
      discovery.type: single-node
      DISABLE_SECURITY_PLUGIN: "true"
      OPENSEARCH_JAVA_OPTS: "-Xms512m -Xmx512m"
    volumes:
      - opensearch_data:/usr/share/opensearch/data
    ports:
      - "9200:9200"
    networks: [magento]

  mailpit:
    image: axllent/mailpit:latest
    ports:
      - "8025:8025"   # web UI
      - "1025:1025"   # SMTP
    networks: [magento]

volumes:
  db_data:
  opensearch_data:

networks:
  magento:
    driver: bridge

Dockerfile PHP

FROM php:8.4-fpm-alpine

ARG PHP_VERSION=8.4

RUN apk add --no-cache \
    freetype-dev libjpeg-turbo-dev libpng-dev \
    libzip-dev oniguruma-dev libxml2-dev \
    icu-dev git unzip

RUN docker-php-ext-configure gd --with-freetype --with-jpeg && \
    docker-php-ext-install -j$(nproc) \
        bcmath gd intl mbstring opcache pdo_mysql \
        soap sockets xml zip

RUN pecl install redis xdebug && \
    docker-php-ext-enable redis

COPY --from=composer:2 /usr/bin/composer /usr/bin/composer

WORKDIR /var/www/html

RUN addgroup -g 1000 magento && \
    adduser -u 1000 -G magento -s /bin/sh -D magento

USER magento

Komendy codziennej pracy

# Uruchom stack
docker compose up -d

# Shell PHP
docker compose exec php sh

# Magento CLI
docker compose exec php bin/magento cache:flush

# Composer
docker compose exec php composer require vendor/package

# Włącz Xdebug (przez override)
XDEBUG_MODE=debug docker compose up -d php

# Logi
docker compose logs -f php
docker compose logs -f nginx

# Zatrzymaj
docker compose down

Podsumowanie

Własny Docker Compose daje pełną kontrolę kosztem konfiguracji. DDEV robi to samo ale automatycznie – wybór zależy od potrzeb. Własny stack warto mieć gdy: używasz niestandardowych wersji usług, integrujesz z CI/CD (ten sam docker-compose.yml na dev i pipeline), lub potrzebujesz specyficznej konfiguracji sieci. DDEV wygrywa przy szybkim starcie i prostych projektach.

About Henryk Tews

Co możesz przeczytać następne

Varnish – VCL, cache tagging, ESI, invalidacja, DDEV setup
DDEV – lokalne Magento 2 w 10 minut, porównanie z XAMPP
Docker od zera – Dockerfile, nginx, docker-compose, Xdebug 3.x
  • Publikacje
  • O autorze
  • Kontakt

© 2026 Created by

GÓRA
Zarządzaj zgodą
Aby zapewnić jak najlepsze wrażenia, korzystamy z technologii, takich jak pliki cookie, do przechowywania i/lub uzyskiwania dostępu do informacji o urządzeniu. Zgoda na te technologie pozwoli nam przetwarzać dane, takie jak zachowanie podczas przeglądania lub unikalne identyfikatory na tej stronie. Brak wyrażenia zgody lub wycofanie zgody może niekorzystnie wpłynąć na niektóre cechy i funkcje.
Funkcjonalne Zawsze aktywne
Przechowywanie lub dostęp do danych technicznych jest ściśle konieczny do uzasadnionego celu umożliwienia korzystania z konkretnej usługi wyraźnie żądanej przez subskrybenta lub użytkownika, lub wyłącznie w celu przeprowadzenia transmisji komunikatu przez sieć łączności elektronicznej.
Preferencje
Przechowywanie lub dostęp techniczny jest niezbędny do uzasadnionego celu przechowywania preferencji, o które nie prosi subskrybent lub użytkownik.
Statystyka
Przechowywanie techniczne lub dostęp, który jest używany wyłącznie do celów statystycznych. Przechowywanie techniczne lub dostęp, który jest używany wyłącznie do anonimowych celów statystycznych. Bez wezwania do sądu, dobrowolnego podporządkowania się dostawcy usług internetowych lub dodatkowych zapisów od strony trzeciej, informacje przechowywane lub pobierane wyłącznie w tym celu zwykle nie mogą być wykorzystywane do identyfikacji użytkownika.
Marketing
Przechowywanie lub dostęp techniczny jest wymagany do tworzenia profili użytkowników w celu wysyłania reklam lub śledzenia użytkownika na stronie internetowej lub na kilku stronach internetowych w podobnych celach marketingowych.
  • Zarządzaj opcjami
  • Zarządzaj serwisami
  • Zarządzaj {vendor_count} dostawcami
  • Przeczytaj więcej o tych celach
Zobacz preferencje
  • {title}
  • {title}
  • {title}