Docker 기반 PHP 환경 개요 및 CLI 실행
Docker(도커)는 호스트 컴퓨터 운영체제 위에 자원 소모가 큰 가상머신(VM)을 실행하는 대신, 리눅스 커널 레벨의 프로세스 격리 기술을 사용하여 독립된 가상 실행 공간인 컨테이너(Container)를 구동하는 강력한 가상화 플랫폼입니다.
로컬 개발 PC에 PHP 패키지나 웹 서버를 직접 수동 설치하여 개발하는 기존의 방식과 비교했을 때, 도커를 활용한 개발 환경은 다음과 같은 확실한 이점을 지닙니다.
- 호스트 OS 청결 유지: 다양한 컴파일러나 라이브러리를 로컬 디스크에 직접 구성하지 않아도 되므로 로컬 컴퓨터 시스템의 오염을 방지합니다.
- 의존성(버전) 파편화 완벽 해소: A 프로젝트는 PHP 7.4, B 프로젝트는 PHP 8.3과 같이 버전별 실행 환경을 가벼운 컨테이너 스위칭만으로 완벽하게 분리하여 구동할 수 있습니다.
- 인프라 이식성(Portability) 확보: 로컬 개발에서 검증한 도커 실행 정보를 코드화하여 설정해 두면, 실제 실운영 인프라(AWS ECS, 클라우드 가상 서버) 환경에서도 동일하게 작동합니다.
1. 단일 파일 일회성 CLI 실행 흐름 (docker run)
로컬 디스크 상에 존재하는 단일 PHP 파일의 연산 결과만을 격리된 도커 환경에서 즉시 실행하고, 연산 종료 후 가상 리소스를 완전히 소거하고 싶을 때 docker run 명령을 사용합니다.
아래 다이어그램은 호스트 디렉터리와 컨테이너 내부 환경 간의 바인드 볼륨 연동 및 자동 정리(--rm) 옵션이 어떻게 작동하는지를 도식화한 구조입니다.
2. 일회성 CLI 실행 실무 명령어
프로젝트 루트 폴더나 PHP 소스 파일이 존재하는 경로의 터미널(Terminal)에서 아래 명령어를 실행하여 도커를 통한 실행을 테스트합니다.
docker run -it --rm \
-v "$PWD":/usr/src/myapp \
-w /usr/src/myapp \
php:8.3-cli php index.php
💡 사용된 핵심 파라미터(옵션) 분해 및 완전 학습
-it(Interactive + TTY): 호스트의 키보드 입력(stdin)을 컨테이너 내의 쉘로 포워딩하고, 컨테이너에서 연산한 텍스트 모니터 출력(stdout)을 호스트의 터미널 TTY 화면에 실시간으로 출력합니다.--rm(Auto-Remove): 스크립트 실행이 완전히 종료되면, 도커 메모리와 디스크 영역에 생성되었던 컨테이너 프로세스 찌꺼기를 엔진 레벨에서 즉각 자동 영구 파괴합니다. (불필요한 디스크 용량 낭비를 방지하는 필수 옵션)-v "$PWD":/usr/src/myapp(Volume): 호스트 컴퓨터의 현재 작업 디렉터리 경로(리눅스/macOS의$PWD, Windows PowerShell의${PWD})의 실물 소스코드를 컨테이너 내부 가상 경로인/usr/src/myapp로 다이렉트 바인드 매핑하여 실시간 연동합니다.-w /usr/src/myapp(Working Directory): 컨테이너 런타임이 활성화되었을 때, 최초 명령을 수행할 기준 작업 디렉터리(Working Directory)를 해당 가상 경로로 강제 지정합니다.php:8.3-cli: Docker Hub 공식 저장소에 탑재된 PHP 8.3 CLI(Command Line Interface) 전용 베이스 컨테이너 이미지명입니다.php index.php: 컨테이너 안에서 실제로 작동시킬 최종 대상 쉘 스크립트 실행 명령입니다.
다음 단계에서는 여러 개의 격리된 컨테이너(Nginx, PHP-FPM, MySQL)를 브릿지 네트워크로 통합 결합하여 실시간 개발 서버를 기동하는 Docker Compose 웹 서버 구축 기법을 학습합니다.
이전 학습
« 게시판 만들기
서브목차