PHP-FPM 및 Nginx Docker 컨테이너 설정

John Wachira 2023년6월20일
  1. PHP CLI 컨테이너 설정
  2. PHP-FPM 및 NGINX로 웹 스택 설정
PHP-FPM 및 Nginx Docker 컨테이너 설정

이 튜토리얼에서는 Docker에서 로컬로 개발할 때 PHP, PHP-FPM 및 NGINX 컨테이너를 설정하는 방법에 대해 설명합니다.

테이크아웃:

  1. 명령줄에서 컨테이너를 구성하고 실행합니다.
  2. Docker 파일 및 용도.
  3. 컨테이너가 상호 작용하는 방식.

장치에 Docker 프로그램과 Git Bash가 설치되어 있는지 확인하십시오.

PHP CLI 컨테이너 설정

소스 코드를 저장하는 C:/delft/docker-php/app 디렉토리를 생성합니다.

mkdir -p "C:/delft/docker-php/app"

튜토리얼에서는 공식 PHP 이미지를 사용합니다. 아래 코드를 실행합니다.

docker run -d --name docker-php -v "C:/delft/docker-php/app":/var/www php:7.0-cli

즉,

  1. docker run - 컨테이너를 실행합니다.
  2. -d - 백그라운드에서 실행됩니다(분리됨).
  3. --name docker-php - docker-php를 지정합니다.
  4. -v "C:/delft/docker-php/app":/var/www - Windows 호스트의 C:/delft/docker-php/app 디렉토리를 /var/와 동기화합니다. www 컨테이너에서.
  5. php:7.0-cli - 이 이미지를 사용하여 컨테이너를 빌드합니다.

출력:

$ docker run -d --name docker-php -v "C:/delft/docker-php/app":/var/www php:7.0-cli
Unable to find image 'php:7.0-cli' locally

머신에 이미지가 없기 때문에 Docker는 공식 레지스트리에서 이미지를 가져오려고 시도합니다.

docker ps -a 명령을 실행하여 컨테이너가 실행 중인지 확인합니다.

컨테이너는 초기화 직후 실행을 중지합니다. docker run 명령에 -i 인수를 추가해야 합니다.

docker run 명령을 다시 실행하기 전에 아래 명령을 실행하십시오.

docker rm docker-php

위의 명령은 다시 사용할 수 없기 때문에 첫 번째 docker-php를 제거합니다. 이제 -i 플래그와 함께 docker run 명령을 실행할 수 있습니다.

docker run -di --name docker-php -v "C:/delft/docker-php/app":/var/www php:7.0-cli
7b3024a542a2d25fd36cef96f4ea689ec7ebb758818758300097a7be3ad2c2f6

docker ps -a 명령을 실행하여 컨테이너가 실행 중인지 확인합니다.

로그인하려면 아래 명령을 실행하십시오.

winpty docker exec -it docker-php bash

PHP-FPM 및 NGINX로 웹 스택 설정

이제 PHP-FPM 및 Nginx 컨테이너를 설정하는 방법에 대해 논의하겠습니다.

NGINX 설정

우리는 공식 Nginx 이미지를 실행하기 위한 컨테이너 역할을 할 서버를 확보하는 것으로 시작합니다. 최신 Nginx 이미지를 실행하기 위해 docker-compose.yml을 생성합니다. 포트 80 및 8080을 활용합니다.

web:
 image: nginx:latest
 ports:
 - "8080:80"

그런 다음 docker-compose up 명령을 실행합니다.

출력:

nginx

docker-compose.yml 파일을 로컬 저장소에 마운트해 보겠습니다. docker-compose.yml 파일이 있는 delft 폴더를 사용합니다.

web:
    image: nginx:latest
    ports:
        - "8080:80"
    volumes:
        - ./delft:/delft

이 시점에서 Nginx는 폴더가 존재하는지 모릅니다. 이를 해결하기 위해 다음 site.conf 파일을 사용합니다.

server {
    index index.html;
    server_name php-docker.local;
    error_log  /var/log/nginx/error.log;
    access_log /var/log/nginx/access.log;
    root /delft;
}

설정을 활성화해야 합니다. docker-compose.yml 파일을 좀 더 수정해 보겠습니다.

web:
    image: nginx:latest
    ports:
        - "8080:80"
    volumes:
        - ./delft:/delft
        - ./site.conf:/etc/nginx/conf.d/site.conf

이제 deft 폴더에 index.html 을 추가하고 아래 코드를 실행할 수 있습니다.

docker-compose up

Nginx가 실행 중이어야 합니다.

PHP-FPM 추가

다음 단계는 Nginx 컨테이너에 연결될 공식 PHP7-FPM을 가져오는 것입니다. 업데이트된 docker-compose.yml 파일은 다음과 같아야 합니다.

web:
    image: nginx:latest
    ports:
        - "8080:80"
    volumes:
        - ./delft:/delft
        - ./site.conf:/etc/nginx/conf.d/site.conf
    links:
        - php
php:
    image: php:7-fpm

이제 PHP-FPM 컨테이너를 사용하여 PHP 파일을 해석하도록 Nginx 컨테이너를 구성합니다. 업데이트된 site.conf 파일은 다음과 같습니다.

server {
    index index.php index.html;
    server_name php-docker.local;
    error_log  /var/log/nginx/error.log;
    access_log /var/log/nginx/access.log;
    root /delft;

    location ~ \.php$ {
        try_files $uri =404;
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        fastcgi_pass php:9000;
        fastcgi_index index.php;
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_param PATH_INFO $fastcgi_path_info;
    }
}

프로그램을 테스트해 봅시다. 먼저 index.html 파일의 이름을 index.php로 변경하고 내용을 다음과 같이 변경합니다.

<?php
echo phpinfo();

docker-compose up 명령을 실행하기 전에 delft 폴더를 PHP 컨테이너에 마운트해야 합니다. docker-compose.yml 파일의 최종 반복은 다음과 같습니다.

web:
    image: nginx:latest
    ports:
        - "8080:80"
    volumes:
        - ./delft:/delft
        - ./site.conf:/etc/nginx/conf.d/site.conf
    links:
        - php
php:
    image: php:7-fpm
    volumes:
        - ./delft:/delft

docker-compose up 명령을 실행하면 아래 이미지가 생성됩니다.

phpinfo

그것은 우리의 튜토리얼을 요약합니다.

작가: John Wachira
John Wachira avatar John Wachira avatar

John is a Git and PowerShell geek. He uses his expertise in the version control system to help businesses manage their source code. According to him, Shell scripting is the number one choice for automating the management of systems.

LinkedIn