📚 PHP 최상급 - 3주차: 컨테이너 기술 (Docker) 활용- 02 Dockerfile 작성 및 이미지 빌드

2025. 10. 9. 14:00프로그램/PHP 최상급

컨테이너 기술의 핵심, Dockerfile 이해하기

📚 PHP 최상급 - 3주차: 컨테이너 기술 (Docker) 활용- 02 Dockerfile 작성 및 이미지 빌드


지난 시간에는 #Docker 컨테이너의 기본 개념을 이해하고, 이미 존재하는 이미지를 사용하여 컨테이너를 실행하는 방법을 배웠습니다. 하지만 실제 서비스 환경에서는 개발자가 직접 필요한 환경을 정의하고 이미지를 생성해야 합니다. 이 작업의 핵심 도구가 바로 Dockerfile입니다.

#Dockerfile 은 #Docker이미지 를 빌드하기 위한 명령어들을 순차적으로 기록해 놓은 텍스트 파일입니다. 이 파일을 통해 애플리케이션 실행에 필요한 운영체제, 라이브러리, 환경 설정, 그리고 최종적으로 실행될 코드를 완벽하게 패키징할 수 있습니다.


Dockerfile 기본 구조 및 필수 명령어


효율적이고 안전한 #Docker이미지 를 만들기 위해서는 몇 가지 핵심 #Dockerfile명령어 를 숙지해야 합니다.

1. FROM (기반 이미지 정의)

모든 #Dockerfile 은 FROM 명령어로 시작합니다. 이는 빌드할 이미지의 기반(Base) 이미지를 지정합니다. PHP 환경에서는 보통 공식 #PHP이미지 를 사용합니다

Dockerfile
 
FROM php:8.3-fpm-alpine
  • php:8.3-fpm-alpine: PHP 8.3 버전의 FastCGI Process Manager(FPM)을 사용하며, 경량 리눅스 배포판인 Alpine 기반으로 이미지가 매우 작고 가볍습니다.

2. WORKDIR (작업 디렉토리 설정)

WORKDIR 명령어는 이후의 RUN, CMD, COPY 등의 명령어가 실행될 컨테이너 내부의 작업 디렉토리를 설정합니다

Dockerfile
 
WORKDIR /var/www/html

3. COPY 또는 ADD (파일 복사)

로컬 시스템의 파일을 #Docker이미지 내부로 복사합니다.

Dockerfile
 
# 현재 로컬 디렉토리의 모든 파일/폴더를 이미지의 WORKDIR로 복사
COPY . .

4. RUN (명령어 실행)

이미지 빌드 과정에서 실행될 명령을 지정합니다. 주로 패키지 설치, 설정 파일 수정, 의존성 설치(Composer) 등에 사용됩니다.

Dockerfile
 
# Alpine 리눅스 패키지 업데이트 및 설치
RUN apk update && apk add --no-cache git

# PHP 확장 설치 (예: mysqli)
RUN docker-php-ext-install mysqli

5. EXPOSE (포트 노출)

컨테이너가 리스닝할 포트를 문서화합니다. 실제로 호스트 머신에 포트를 연결하려면 docker run 명령에서 -p 옵션을 사용해야 합니다.

Dockerfile
 
EXPOSE 9000
  • PHP-FPM은 기본적으로 9000번 포트를 사용합니다.

6. CMD 또는 ENTRYPOINT (컨테이너 실행)

컨테이너가 시작될 때 실행되는 메인 명령을 정의합니다.

Dockerfile
 
# 기반 이미지에서 이미 PHP-FPM을 실행하도록 설정되어 있을 수 있습니다
CMD ["php-fpm"]

 


실습: PHP 프로젝트를 위한 Dockerfile 작성 및 빌드


다음은 간단한 PHP 웹 애플리케이션을 컨테이너화하기 위한 예제 #Dockerfile 입니다.

Dockerfile

Dockerfile
 
# 1. 기반 이미지 설정 (Alpine 리눅스 기반 PHP 8.3 FPM)
FROM php:8.3-fpm-alpine

# 2. 작업 디렉토리 설정
WORKDIR /var/www/html

# 3. 필요한 PHP 확장 설치 (예: PDO, PDO MySQL)
RUN docker-php-ext-install pdo pdo_mysql

# 4. Git 설치 (Composer를 사용한다면 필수)
RUN apk update && apk add --no-cache git

# 5. Composer 설치 (PHP 의존성 관리 도구)
COPY --from=composer:latest /usr/bin/composer /usr/local/bin/composer

# 6. 로컬 프로젝트 파일을 이미지로 복사
COPY . .

# 7. Composer 의존성 설치 (이미지 빌드 시 실행)
RUN composer install --no-dev --optimize-autoloader

# 8. PHP-FPM의 기본 포트 노출
EXPOSE 9000

# 컨테이너 실행 명령 (기반 이미지에서 이미 정의되어 있을 확률이 높음)
# CMD ["php-fpm"]

이미지 빌드 명령

#Dockerfile 작성을 완료했다면, 이제 #Docker이미지 를 빌드할 차례입니다.

Bash
 
docker build -t my-php-app:latest .
  • docker build: 이미지를 빌드하는 명령어입니다
  • -t my-php-app:latest: 빌드된 #Docker이미지 에 my-php-app이라는 이름과 latest라는 태그를 지정합니다
  • .: #Dockerfile 이 위치한 현재 디렉토리(context)를 의미합니다

빌드가 완료되면 docker images 명령어를 통해 생성된 이미지를 확인할 수 있습니다.


결론


#Dockerfile 은 #PHP애플리케이션 의 실행 환경을 완벽하게 캡슐화하는 청사진입니다. FROM, RUN, COPY, WORKDIR 등의 핵심 명령어를 이해하고 실습하면, 어떤 환경에서도 일관되게 실행되는 강력하고 이식성 높은 #Docker이미지 를 만들 수 있습니다. 다음 시간에는 빌드한 이미지를 사용하여 #DockerCompose 로 컨테이너 네트워크 환경을 구성하는 방법을 학습하겠습니다.

 

 

블로그KT고정, 쇼핑/지도 마케팅KT유동, 게임/앱플레이어 고정IP, 24시간상담 대량구매 시 할인혜택 제공!

https://vpn.luzensoft.com

 

VPN 5,500원 / IP교체 1,100원 / 유동프록시 22,000원 | LuzenVPN 루젠VPN

국내최저가 고정IP서비스,유동프록시(IP4000개이상제공),PPTP,L2TP,IPSec,OpenVPNVPN,통신사VPN,VPN프로그램,고정IP,고정아이피,PPTP,저렴한VPN,리니지MVPN,리니지VPN,아이온VPN,던파VPN,유동프록시,유동PROXY,바이

vpn.luzensoft.com