Docker, PHP 8.4, Composer, Nginx 및 MariaDB를 사용한 간단한 환경 만들기

발행: (2026년 2월 3일 오전 09:40 GMT+9)
6 분 소요
원문: Dev.to

Source: Dev.to

이 플랫폼에서 첫 번째 기사 – 간단하고 실용적이며 따라하기 쉬운 내용을 목표로 합니다.

PHP 확장 설치, Nginx 설정, 혹은 로컬 데이터베이스 구축에 어려움을 겪어본 적이 있다면, Docker가 여러분의 삶을 훨씬 더 편리하게 만들어 줄 수 있습니다.
이 가이드에서는 단 한 번의 명령으로 실행되는 현대적이고 최소한의 개발 스택을 구축해 보겠습니다.

스택

  • PHP 8.4 (FPM)
  • Composer
  • Nginx
  • MariaDB
  • Docker & Docker Compose

모든 서비스는 하나의 명령으로 함께 시작됩니다.

폴더 구조

root-folder/
├── docker/
│   ├── nginx/
│   │   └── default.conf
│   └── php/
│       └── Dockerfile
├── src/
│   └── index.php
├── docker-compose.yml
└── composer.json
폴더책임
docker/php커스텀 PHP 이미지 및 확장
docker/nginxNginx 설정
src애플리케이션 소스 코드

1. PHP Dockerfile

docker/php/Dockerfile 생성:

# Base image with PHP 8.4 and FPM
FROM php:8.4-fpm

# Install system dependencies and PHP extensions
RUN apt-get update && apt-get install -y \
    git \
    unzip \
    libzip-dev \
    && docker-php-ext-install pdo pdo_mysql zip

# Install Composer from the official image
COPY --from=composer:2 /usr/bin/composer /usr/bin/composer

# Set the working directory
WORKDIR /var/www/html

동작 설명

  • PHP 8.4‑FPM 사용(Nginx와 이상적인 조합).
  • 일반적인 도구(git, unzip)를 설치.
  • 필수 확장(pdo, pdo_mysql, zip)을 활성화.
  • 수동 다운로드 없이 Composer를 추가.

2. Nginx 구성

Create docker/nginx/default.conf:

server {
    listen 80;
    index index.php index.html;
    root /var/www/html;

    location / {
        try_files $uri $uri/ /index.php?$query_string;
    }

    location ~ \.php$ {
        fastcgi_pass php:9000;
        fastcgi_index index.php;
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    }
}

핵심 포인트

  • 포트 80에서 수신 대기합니다.
  • /var/www/html에서 파일을 제공합니다.
  • .php 요청을 FastCGI를 통해 PHP 컨테이너로 전달합니다.

3. Docker‑Compose 파일

프로젝트 루트에 docker-compose.yml 파일을 생성합니다:

version: '3.9'

services:
  php:
    build: ./docker/php
    container_name: php84
    volumes:
      - ./src:/var/www/html
    depends_on:
      - mariadb

  nginx:
    image: nginx:latest
    container_name: nginx
    ports:
      - "8080:80"
    volumes:
      - ./src:/var/www/html
      - ./docker/nginx/default.conf:/etc/nginx/conf.d/default.conf
    depends_on:
      - php

  mariadb:
    image: mariadb:11
    container_name: mariadb
    environment:
      MYSQL_ROOT_PASSWORD: root
      MYSQL_DATABASE: app
      MYSQL_USER: app
      MYSQL_PASSWORD: app
    ports:
      - "3306:3306"
    volumes:
      - mariadb_data:/var/lib/mysql

volumes:
  mariadb_data:

설명

서비스목적
php커스텀 PHP 8.4 이미지를 빌드하고, src/를 마운트하여 변경 사항이 즉시 반영되며, MariaDB가 시작될 때까지 대기합니다.
nginx공식 Nginx 이미지를 사용하고, 호스트 포트 8080 → 컨테이너 포트 80을 매핑하며, 동일한 코드 볼륨을 공유하고, 커스텀 설정을 로드합니다.
mariadbMariaDB 11을 실행하고, 시작 시 데이터베이스와 사용자를 생성하며, 포트 3306을 노출합니다(선택 사항). 데이터는 명명된 볼륨(mariadb_data)에 저장됩니다.
volumesmariadb_data는 컨테이너 재시작 시에도 데이터베이스를 유지합니다.

4. 샘플 PHP 애플리케이션

src/index.php 파일을 생성합니다:

 PDO::ERRMODE_EXCEPTION,
            PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
        ]
    );

    echo "PHP is running and connected to MariaDB successfully!";
} catch (PDOException $e) {
    echo "Database connection failed: {$e->getMessage()}";
}
  • PDO를 사용합니다 (PHP에서 데이터베이스와 통신하는 권장 방법).
  • 서비스 이름 mariadb를 통해 MariaDB에 연결합니다.
  • 연결이 성공하면 성공 메시지를 출력하고, 그렇지 않으면 오류를 표시합니다.

5. Composer 구성

composer.json 생성:

{
  "name": "example/docker-php",
  "require": {}
}

컨테이너 내부에서 Composer 실행

docker compose run --rm php composer install

이렇게 하면 Docker에 정의된 동일한 PHP 환경을 사용하므로 로컬 PHP 버전 문제를 피할 수 있습니다.

6. 전체 실행하기

프로젝트 루트에서:

docker compose up -d --build

브라우저를 열고 다음 주소에 접속하세요:

http://localhost:8080

다음과 같은 메시지가 표시됩니다:

PHP is running and connected to MariaDB successfully!

이 메시지가 나타나면 PHP, Nginx, MariaDB가 정상적으로 통신하고 있는 것입니다. 🎉

제공 내용

  • PHP 8.4 개발 준비 완료
  • Composer 완전 통합
  • Nginx 경량 웹 서버
  • MariaDB 영구 데이터 제공
  • 깨끗하고 격리된 개발 환경

이는 순수 PHP 프로젝트와 API를 위한 견고한 시작점입니다.

오늘은 여기까지, 여러분!

Back to Blog

관련 글

더 보기 »

AI가 당신에게 뺨을 때릴 때

AI가 당신을 뺨 때릴 때: Adama에서 Claude가 생성한 코드 디버깅 AI에게 복잡한 기능을 “vibe‑code”하게 맡겨본 적이 있나요? 그 결과 미묘한 버그를 디버깅하느라 몇 시간을 보내게 됩니다.