PHP 애플리케이션 Docker화
PHP와 Nginx용 Docker 이미지를 만들고 Docker Compose로 오케스트레이션합니다.
PHP 애플리케이션 Docker화은(는) CoddyKit의 무료 PHP Academy 강의입니다. 이것은 4개 중 4번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 PHP Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. PHP Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
PHP에 Docker를 사용하는 이유
Docker는 애플리케이션과 의존성을 이식 가능한 컨테이너 이미지로 패키징합니다. 동일한 이미지가 개발, CI 및 운영 환경에서 똑같이 실행되므로 ‘내 컴퓨터에서는 되는데’ 문제를 없앨 수 있습니다.
기본 PHP Dockerfile
PHP + Nginx 애플리케이션을 위한 최소한의 Dockerfile입니다.
# Dockerfile
FROM php:8.3-fpm-alpine
# Install extensions
RUN docker-php-ext-install pdo pdo_mysql opcache
# Install Composer
COPY --from=composer:2 /usr/bin/composer /usr/bin/composer
WORKDIR /app
COPY composer.json composer.lock ./
RUN composer install --no-dev --optimize-autoloader
COPY . .
RUN chown -R www-data:www-data /app/storage /app/bootstrap/cache다단계 빌드
최종 이미지 크기를 작게 유지하려면 다단계 빌드를 사용하십시오. 한 단계에서 빌드 도구를 설치하고, 최종 이미지에는 산출물만 복사하십시오.
# Stage 1: builder
FROM composer:2 AS builder
WORKDIR /app
COPY composer.json composer.lock ./
RUN composer install --no-dev --optimize-autoloader
# Stage 2: runtime
FROM php:8.3-fpm-alpine
WORKDIR /app
COPY --from=builder /app/vendor ./vendor
COPY . .docker-compose.yml
Docker Compose로 여러 서비스(PHP-FPM, Nginx, MySQL, Redis)를 오케스트레이션하십시오.
# docker-compose.yml
services:
app:
build: .
volumes:
- .:/app
nginx:
image: nginx:alpine
ports: ["80:80"]
volumes:
- .:/app
- ./docker/nginx.conf:/etc/nginx/conf.d/default.conf
mysql:
image: mysql:8
environment:
MYSQL_DATABASE: myapp
MYSQL_ROOT_PASSWORD: secret
volumes:
- db_data:/var/lib/mysql
redis:
image: redis:alpine
volumes:
db_data:Nginx 컨테이너 구성
사용자 지정 Nginx 구성을 마운트하여 PHP-FPM 요청을 프록시하십시오.
# docker/nginx.conf
server {
listen 80;
root /app/public;
index index.php;
location / { try_files $uri /index.php?$query_string; }
location ~ \.php$ {
fastcgi_pass app:9000; # service name from docker-compose
fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
include fastcgi_params;
}
}환경 변수
환경 변수를 컨테이너에 전달하십시오. 이미지에 보안 비밀을 절대 포함하지 마십시오.
# docker-compose.yml:
services:
app:
env_file: .env
# or explicit:
environment:
- APP_ENV=production
- DB_HOST=mysqlLaravel Artisan 명령
컨테이너 내부에서 Artisan 명령을 실행하십시오.
$ docker compose exec app php artisan migrate
$ docker compose exec app php artisan config:cache
$ docker compose exec app php artisan queue:work상태 확인
오케스트레이터(Kubernetes, ECS)가 컨테이너가 준비된 시점을 알 수 있도록 상태 확인을 추가하십시오.
# Dockerfile:
HEALTHCHECK --interval=30s --timeout=5s \
CMD curl -f http://localhost/health || exit 1이미지 빌드 및 푸시
이미지를 레지스트리(Docker Hub, ECR, GHCR)에 빌드하고 푸시하십시오.
$ docker build -t myorg/myapp:1.0.0 .
$ docker push myorg/myapp:1.0.0Kubernetes 배포
Kubernetes에서는 이미지를 사용하는 Deployment 및 Service 리소스를 정의하십시오. kubectl set image를 사용하거나 YAML을 수정하여 적용함으로써 새 버전을 배포하십시오.
운영 환경 강화
운영 환경의 Docker 관행으로는 루트가 아닌 사용자 사용, 읽기 전용 루트 파일 시스템, 최소 기반 이미지(Alpine), 개발 의존성 제외, 이미지 태그 고정, docker scout를 사용한 CVE 검사 등이 있습니다.
요약
PHP-FPM + Composer용 Dockerfile을 만드십시오. Nginx, MySQL 및 Redis 서비스와 함께 로컬 개발에 docker-compose를 사용하십시오. 운영 환경에서는 다단계 빌드를 사용하고, 환경 변수를 주입하며, Kubernetes 또는 ECS로 실행하십시오.
빠른 확인
다단계 Docker 빌드의 가장 큰 이점은 무엇입니까?
자주 묻는 질문
“PHP 애플리케이션 Docker화” 강의는 무료인가요?
네 — “PHP 애플리케이션 Docker화” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 PHP Academy 강의 전체를 잠금 해제할 수 있습니다. PHP Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
“PHP 애플리케이션 Docker화”에서 뭘 배우나요?
PHP와 Nginx용 Docker 이미지를 만들고 Docker Compose로 오케스트레이션합니다. 브라우저에서 직접 실행하는 실습 코드로 PHP Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.
PHP Academy을(를) 시작하는 데 경험이 필요한가요?
사전 경험은 필요하지 않습니다. CoddyKit의 PHP Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 4번째 강의입니다.
“PHP 애플리케이션 Docker화” 강의는 얼마나 걸리나요?
대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.
이 PHP Academy 강의에서 코드를 작성하고 실행할 수 있나요?
네. 모든 PHP Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.
이 강의의 모든 강의
- Nginx 및 PHP-FPM 설정
- 환경 변수 및 .env 파일
- GitHub Actions로 배포하기
- PHP 애플리케이션 Docker화