PHP 컨테이너화(Dockerize)하는 방법
Frontend

PHP 컨테이너화(Dockerize)하는 방법

· 3분 읽기

도커(Docker)를 사용하여 PHP 7.4와 CodeIgniter 4를 컨테이너화하는 방법을 단계별로 설명드리겠습니다. 다음은 기본적인 설정과 실행 과정을 설명한 것입니다.

1. 프로젝트 디렉토리 구조 설정

먼저 프로젝트의 기본 디렉토리 구조를 설정합니다.

my-codeigniter-project/
├── app/
├── public/
├── writable/
├── .env
├── composer.json
├── composer.lock
└── Dockerfile

2. Dockerfile 작성

Dockerfile을 프로젝트 루트 디렉토리에 작성합니다.

# 베이스 이미지 설정 (PHP 7.4 및 Apache)
FROM php:7.4-apache

# 필요한 패키지 설치 및 시스템 업데이트
RUN apt-get update && apt-get install -y \
    libpng-dev \
    libjpeg-dev \
    libfreetype6-dev \
    zip \
    unzip \
    git \
    && docker-php-ext-configure gd --with-freetype --with-jpeg \
    && docker-php-ext-install gd \
    && docker-php-ext-install mysqli pdo pdo_mysql \
    && a2enmod rewrite

# Composer 설치
COPY --from=composer:latest /usr/bin/composer /usr/bin/composer

# 프로젝트 파일 복사
COPY . /var/www/html

# Apache 설정 파일 복사
COPY ./apache.conf /etc/apache2/sites-available/000-default.conf

# 환경 변수 설정
ENV APACHE_DOCUMENT_ROOT /var/www/html/public

# 권한 설정
RUN chown -R www-data:www-data /var/www/html \
    && chmod -R 755 /var/www/html

# Apache 재시작
RUN service apache2 restart

3. Apache 설정 파일 작성

apache.conf 파일을 프로젝트 루트 디렉토리에 작성합니다.


    DocumentRoot /var/www/html/public
    
        Options Indexes FollowSymLinks
        AllowOverride All
        Require all granted
    
    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined

4. Docker Compose 파일 작성

프로젝트의 루트 디렉토리에 docker-compose.yml 파일을 작성합니다.

version: '3.8'

services:
  app:
    build:
      context: .
    ports:
      - "8080:80"
    volumes:
      - .:/var/www/html
    networks:
      - app-network

  db:
    image: mysql:5.7
    container_name: mysql
    restart: unless-stopped
    environment:
      MYSQL_DATABASE: codeigniter
      MYSQL_USER: user
      MYSQL_PASSWORD: password
      MYSQL_ROOT_PASSWORD: root_password
    ports:
      - "3306:3306"
    volumes:
      - db_data:/var/lib/mysql
    networks:
      - app-network

networks:
  app-network:
    driver: bridge

volumes:
  db_data:

5. CodeIgniter 4 설정 파일 업데이트

app/Config/Database.php 파일을 수정하여 데이터베이스 설정을 Docker 환경에 맞게 조정합니다.

public $default = [
    'DSN'      => '',
    'hostname' => 'db',
    'username' => 'user',
    'password' => 'password',
    'database' => 'codeigniter',
    'DBDriver' => 'MySQLi',
    'DBPrefix' => '',
    'pConnect' => false,
    'DBDebug'  => (ENVIRONMENT !== 'production'),
    'cacheOn'  => false,
    'cacheDir' => '',
    'charset'  => 'utf8',
    'DBCollat' => 'utf8_general_ci',
    'swapPre'  => '',
    'encrypt'  => false,
    'compress' => false,
    'strictOn' => false,
    'failover' => [],
    'port'     => 3306,
];

6. Docker 컨테이너 빌드 및 실행

이제 터미널을 열고 프로젝트 루트 디렉토리로 이동한 후, 다음 명령어를 실행하여 Docker 컨테이너를 빌드하고 실행합니다.

docker-compose up --build

7. 웹 브라우저에서 확인

브라우저를 열고 http://localhost:8080에 접속하여 CodeIgniter 4 기본 페이지가 보이는지 확인합니다.

이제 PHP 7.4와 CodeIgniter 4가 Docker를 통해 설정되고 실행되었습니다. 필요에 따라 추가적인 설정이나 커스터마이징을 할 수 있습니다.

야근반장

야근반장

프로그래밍과 데이터 분석을 좋아하는 개발자입니다. 낮에도 밤에도 코딩하는 주경야근 라이프를 살고 있습니다.

GitHub