4. Docker PHP 환경 설정 및 MySQL 연동, 기타 라이브러리 활성화

반응형

4. Docker PHP 환경 설정하기 (php.ini)

 

1) PHP 환경 설정 방법

 

php 컨테이너 내의 설정 파일 (php.ini) 를 호스트 서버로 복사하고 호스트 서버의 php.ini 파일을 사용하도록 해야 합니다.

컨테이너가 구동중인 상태에서 아래와 같이 파일을 복사 합니다.

 

php 컨테이너의 /usr/local/etc/php/php.ini-development 파일을 /home/sysdocu/php/conf/ 디렉토리 아래에 php.ini 이름으로 복사.

# mkdir -p /home/sysdocu/php/conf

# docker cp php:/usr/local/etc/php/php.ini-development /home/sysdocu/php/conf/php.ini

 

기본적으로 소스내 PHP 태그없이도 코드 인식이 가능하도록하고 한국 표준시를 출력하도록 설정합니다.

# vi /home/sysdocu/php/conf/php.ini

short_open_tag = On
date.timezone = "Asia/Seoul"

 

호스트 서버에서 php.ini 파일을 사용할 수 있도록 docker-compose.yml 파일을 수정합니다.

# vi docker-compose.yml

...
    php:
        image: php:8.2.0-fpm
        container_name: php
        restart: unless-stopped
        ports:
            - "9000:9000"
        volumes:
            - /home/sysdocu/httpd/html:/var/www/html
            - /home/sysdocu/php/conf/php.ini:/usr/local/etc/php/php.ini
        command:
            - /bin/sh
            - -c
            - |
              echo "security.limit_extensions = .html .htm .php" >> /usr/local/etc/php-fpm.d/www.conf
              php-fpm

...

 

변경된 컨테이너를 적용합니다.

# docker compose stop php
# docker rm -v php
# docker compose up -d php

 

2) mysql 연동 및 테스트

 

php 컨테이너에서 docker-php-ext-install 명령을 이용해 필요한 라이브러리를 설치해줍니다. (mysqli.so 파일 생성)

# docker exec -it php /bin/bash

root@8e2d3bf1c94f:/var/www/html# docker-php-ext-install mysqli

 

호스트 서버에서 설정 파일을 열고 아래 행을 주석 해제 합니다.

# vi /home/sysdocu/php/conf/php.ini

extension=mysqli

 

변경 사항을 적용합니다.

# docker compose restart php

 

웹 소스를 수정하여 MySQL 연동이 잘 되는지 테스트 해봅니다.

아래 소스 코드를 이용하여 작성한 뒤 웹브라우저에서 접근하면 확인이 가능합니다.

 

# vi /home/sysdocu/httpd/html/index.html

MySQL Connect TEST<br>
<?
$conn = mysqli_connect("mysql", "sysdocu", "12345678", "sysdocudb"); # 여기에서 mysql 은 컨테이너 이름

if ($conn) {
    echo "MySQL 연결 성공";
} else {
    echo "MySQL 연결 실패";
}

$result = mysqli_query($conn, "SELECT VERSION() AS VERSION");
$data = mysqli_fetch_assoc($result);
echo "<br>Version : " . $data['VERSION'];
?>

 

3) 기타 라이브러리 활성화

 

주로 사용하는 curl, gd, mbstring, openssl 라이브러리를 활성해 보겠습니다.

(사실 gd 만 추가 설치, 나머지는 재설치 과정)

mysqli 설치하는 방법과 같이 컨테이너에 접근하여 라이브러리를 설치하면 되지만,

그냥 설치 명령을 내리면 컨테이너에 필요한 패키지가 없다며 에러가 출력되므로

사전에 필요한 패키지를 설치하고 라이브러리 설치를 진행합니다.

# docker exec -it php /bin/bash

 

제일 먼저 리포지토리를 정리해야 패키지 설치가 잘 되므로 업데이트를 해줍니다.

root@8e2d3bf1c94f:/var/www/html# apt -y update

 

(curl 라이브러리 설치)

root@8e2d3bf1c94f:/var/www/html# apt -y install libcurl4-openssl-dev

root@8e2d3bf1c94f:/var/www/html# docker-php-ext-install curl

 

(gd 라이브러리 설치)

root@8e2d3bf1c94f:/var/www/html# apt -y install zlib1g-dev libpng-dev

root@8e2d3bf1c94f:/var/www/html# docker-php-ext-install gd

gd 는 기본 허용 모듈에서 빠져 있기 때문에 사용을 위해 아래와 같이 추가 구성해줍니다.

root@8e2d3bf1c94f:/var/www/html# docker-php-ext-configure --with-gd

 

(mbstring 라이브러리 설치)

root@8e2d3bf1c94f:/var/www/html# apt -y install libonig-dev

root@8e2d3bf1c94f:/var/www/html# docker-php-ext-install mbstring

 

(openssl 라이브러리 설치)

root@8e2d3bf1c94f:/var/www/html# cd /usr/src/php/ext/openssl
root@233900ce6ef9:/usr/src/php/ext/openssl# cp config0.m4 config.m4
root@233900ce6ef9:/usr/src/php/ext/openssl# phpize
root@233900ce6ef9:/usr/src/php/ext/openssl# # apt -y install libssl-dev
root@233900ce6ef9:/usr/src/php/ext/openssl# docker-php-ext-install openssl

 

라이브러리 설치 완료 후 php 컨테이너를 재시작 하면 phpinfo 화면에서 설치한 모듈이 보여지게 됩니다.

# docker compose restart php

# docker exec php php -i |grep -i gd

 

반응형

댓글()