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

PHP 7.4 + CodeIgniter 4 컨테이너화하는 벙법을 설명합니다.

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

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

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

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

2. Dockerfile 작성

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

 1# 베이스 이미지 설정 (PHP 7.4 및 Apache)
 2FROM php:7.4-apache
 3
 4# 필요한 패키지 설치 및 시스템 업데이트
 5RUN apt-get update && apt-get install -y \
 6    libpng-dev \
 7    libjpeg-dev \
 8    libfreetype6-dev \
 9    zip \
10    unzip \
11    git \
12    && docker-php-ext-configure gd --with-freetype --with-jpeg \
13    && docker-php-ext-install gd \
14    && docker-php-ext-install mysqli pdo pdo_mysql \
15    && a2enmod rewrite
16
17# Composer 설치
18COPY --from=composer:latest /usr/bin/composer /usr/bin/composer
19
20# 프로젝트 파일 복사
21COPY . /var/www/html
22
23# Apache 설정 파일 복사
24COPY ./apache.conf /etc/apache2/sites-available/000-default.conf
25
26# 환경 변수 설정
27ENV APACHE_DOCUMENT_ROOT /var/www/html/public
28
29# 권한 설정
30RUN chown -R www-data:www-data /var/www/html \
31    && chmod -R 755 /var/www/html
32
33# Apache 재시작
34RUN service apache2 restart

3. Apache 설정 파일 작성

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

 1<VirtualHost *:80>
 2    DocumentRoot /var/www/html/public
 3    <Directory /var/www/html/public>
 4        Options Indexes FollowSymLinks
 5        AllowOverride All
 6        Require all granted
 7    </Directory>
 8    ErrorLog ${APACHE_LOG_DIR}/error.log
 9    CustomLog ${APACHE_LOG_DIR}/access.log combined
10</VirtualHost>

4. Docker Compose 파일 작성

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

 1version: '3.8'
 2
 3services:
 4  app:
 5    build:
 6      context: .
 7    ports:
 8      - "8080:80"
 9    volumes:
10      - .:/var/www/html
11    networks:
12      - app-network
13
14  db:
15    image: mysql:5.7
16    container_name: mysql
17    restart: unless-stopped
18    environment:
19      MYSQL_DATABASE: codeigniter
20      MYSQL_USER: user
21      MYSQL_PASSWORD: password
22      MYSQL_ROOT_PASSWORD: root_password
23    ports:
24      - "3306:3306"
25    volumes:
26      - db_data:/var/lib/mysql
27    networks:
28      - app-network
29
30networks:
31  app-network:
32    driver: bridge
33
34volumes:
35  db_data:

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

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

 1public $default = [
 2    'DSN'      => '',
 3    'hostname' => 'db',
 4    'username' => 'user',
 5    'password' => 'password',
 6    'database' => 'codeigniter',
 7    'DBDriver' => 'MySQLi',
 8    'DBPrefix' => '',
 9    'pConnect' => false,
10    'DBDebug'  => (ENVIRONMENT !== 'production'),
11    'cacheOn'  => false,
12    'cacheDir' => '',
13    'charset'  => 'utf8',
14    'DBCollat' => 'utf8_general_ci',
15    'swapPre'  => '',
16    'encrypt'  => false,
17    'compress' => false,
18    'strictOn' => false,
19    'failover' => [],
20    'port'     => 3306,
21];

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

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

1docker-compose up --build

7. 웹 브라우저에서 확인

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

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