Article
Docker Compose로 PHP 개발 환경 완벽하게 구축하기
Docker로 PHP 개발 환경을 빠르게 준비하기
전통적인 방식으로는 로컬에 WAMP나 XAMPP를 설치하고, 프로젝트마다 PHP, MySQL, Redis 등의 버전을 맞춰야 하는 번거로움이 있습니다. Docker를 사용하면 이 모든 과정을 yml 파일 하나로 자동화할 수 있습니다. 팀의 모든 개발자가 정확히 동일한 환경에서 작업할 수 있고, 프로덕션 환경과의 차이도 제거할 수 있습니다.
왜 Docker를 써야 할까요
기존 방식의 문제점을 먼저 살펴보겠습니다.
로컬 설치 방식의 문제들:
- PHP, MySQL, Redis를 각각 설치하고 설정하는 과정이 복잡합니다
- 팀원마다 다른 설정으로 인한 ‘내 컴퓨터에서는 되는데’ 현상 발생
- 프로젝트마다 다른 버전 요구사항이 충돌할 수 있습니다
- 개발 환경과 프로덕션 환경이 달라서 배포 후 예기치 않은 문제 발생
Docker 기반 솔루션:
- 모든 의존성을 컨테이너에 격리하여 버전 충돌 제거
- yml 파일만 공유하면 팀원 모두 동일한 환경 구성 가능
- 개발 환경 = 프로덕션 환경, 배포 후 놀라운 일이 없습니다
- 프로젝트 시작을 위한 세팅 시간을 몇 시간에서 5분으로 단축
구축할 환경 구성 요소
이 가이드에서 설정할 스택은 다음과 같습니다:
- PHP 7.2 이상: PHP-FPM 실행 엔진과 필수 확장 모듈
- NGINX: 웹 서버이자 PHP-FPM의 리버스 프록시
- MySQL 5.7: 데이터베이스 (기본 계정: homestead/secret)
- Redis: 캐싱 및 세션 스토리지
- Memcached: 추가 캐싱 레이어
이들을 하나의 docker-compose.yml로 통합 관리합니다.
프로젝트 디렉토리 구조
여러 프로젝트를 한 Docker Compose로 관리하는 구조를 추천합니다:
root-folder/
├── docker-compose.yml
├── nginx.conf
├── project1/
│ └── (Laravel 프로젝트)
├── project2/
│ └── (다른 PHP 프로젝트)
└── project3/
└── (또 다른 프로젝트)
NGINX의 /var/www 디렉토리를 호스트의 root-folder에 바인딩하면, 모든 프로젝트에 접근할 수 있습니다.
Docker Compose 설정 파일 작성
프로젝트 루트에 docker-compose.yml 파일을 생성합니다:
version: '3.8'
services:
php:
image: php:7.2-fpm
container_name: php-fpm
volumes:
- ./:/var/www
networks:
- php-network
environment:
- MYSQL_HOST=mysql
- MYSQL_DATABASE=homestead
- MYSQL_USER=homestead
- MYSQL_PASSWORD=secret
nginx:
image: nginx:latest
container_name: nginx
ports:
- "80:80"
- "443:443"
volumes:
- ./:/var/www
- ./nginx.conf:/etc/nginx/nginx.conf:ro
depends_on:
- php
networks:
- php-network
mysql:
image: mysql:5.7
container_name: mysql
environment:
MYSQL_ROOT_PASSWORD: secret
MYSQL_DATABASE: homestead
MYSQL_USER: homestead
MYSQL_PASSWORD: secret
ports:
- "3306:3306"
volumes:
- mysql-data:/var/lib/mysql
networks:
- php-network
redis:
image: redis:latest
container_name: redis
ports:
- "6379:6379"
networks:
- php-network
memcached:
image: memcached:latest
container_name: memcached
ports:
- "11211:11211"
networks:
- php-network
volumes:
mysql-data:
networks:
php-network:
driver: bridge
실제 사용 명령어
컨테이너를 시작합니다:
docker-compose up -d
실행 상태 확인:
docker-compose ps
로그 확인 (실시간):
docker-compose logs -f
컨테이너 종료:
docker-compose down
Docker Compose 사용의 장점 정리
환경 일관성: 팀의 모든 개발자가 정확히 같은 버전 사용 빠른 구성: 단 한 번의 명령으로 완전한 스택 구성 격리된 환경: 프로젝트 간 의존성 충돌이 없음 쉬운 확장: 새로운 서비스 추가가 간단함 프로덕션 호환: 개발과 배포 환경이 동일함
주의할 사항
Windows 사용자는 WSL2를 사용하면 성능이 크게 개선됩니다. MySQL 데이터는 반드시 volume으로 관리하여 컨테이너 삭제 후에도 데이터를 보존하세요. 프로덕션 배포 전에는 추가 보안 설정(방화벽, SSL 인증서, 강력한 비밀번호)을 반드시 적용하세요.
마치며
Docker Compose는 PHP 개발 환경 설정의 복잡도를 획기적으로 줄여줍니다. 이제 새로운 팀원이 프로젝트에 참여할 때 마주했던 ‘환경 차이’라는 골치 아픈 문제를 완전히 제거할 수 있습니다. 이 yml 파일을 버전 관리 시스템에 저장해두면, 누구나 같은 명령어 하나로 동일한 개발 환경을 구성할 수 있습니다.
댓글