Symfony 프로젝트용 docker-compose 설정 방법

5152 단어 dockersymfonyphp

[선택사항] symfony 프로젝트 생성



이 예에서는 packagecreate-project를 사용하는 composersymfony/skeleton 명령을 사용하여 간단한 symfony 프로젝트를 생성합니다.

composer create-project symfony/skeleton example


작성기를 설치하지 않은 경우 it's official website에서 작성 방법을 찾을 수 있습니다.

PHP-FPM Dockerfile 만들기



프로젝트 루트에 Dockerfile라는 파일을 만들고 다음 콘텐츠를 작성합니다.

FROM php:8.1-fpm

COPY --from=composer /usr/bin/composer /usr/bin/composer


이 예제에서는 php official imagesphp:8.1-fpm 이미지를 사용하지만 PHP 버전이 symfony 프로젝트 요구 사항을 충족하는 경우 다른 FPM 이미지도 유효합니다.

컴포저 종속성을 관리하기 위해 multi-stage builds을 사용하여 컴포저 공식 이미지에서 컴포저 바이너리를 복사합니다.

nginx 구성 만들기



프로젝트 루트에 nginx.conf 파일을 생성하고 다음 내용을 작성합니다.

events {
    worker_connections 1024;
}

http {
    server {
        server_name  example.app;
        root /var/www/app/public;

        location / {
            try_files $uri /index.php$is_args$args;
        }

        location ~ ^/index\.php(/|$) {
            fastcgi_pass example_php:9000;
            fastcgi_split_path_info ^(.+\.php)(/.*)$;
            include fastcgi_params;

            fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
            fastcgi_param DOCUMENT_ROOT $realpath_root;

            internal;
        }

        location ~ \.php$ {
            return 404;
        }

        error_log /var/log/nginx/api_error.log;
        access_log /var/log/nginx/api_access.log;
    }
}



여기서 중요한 사항은 다음과 같습니다.
  • root /var/www/app/public는 색인 파일이 있는 디렉토리를 정의합니다.
  • fastcgi_pass example_php:9000는 서버example_php 및 포트9000를 사용하여 PHP 스크립트를 실행하도록 nginx에 지시합니다.

  • 모두 합치기



    nginx를 php와 통신하기 위해 다음 내용으로 프로젝트 루트에 파일docker-compose.yaml을 생성합니다.

    services:
      example_nginx:
        container_name: example_nginx
        image: nginx:1.21.3-alpine
        restart: on-failure
        volumes:
          - './:/var/www/app:ro'
          - './nginx.conf:/etc/nginx/nginx.conf:ro'
        ports:
          - "9081:80"
        depends_on:
          - example_php
    
      example_php:
        container_name: example_php
        build:
          context: .
        working_dir: /var/www/app/
        volumes:
          - './:/var/www/app/'
    


    example_nginx



    영상



    컨테이너를 만드는 데 사용해야 하는 docker-compose 이미지를 나타냅니다. 더 많은 공식 이미지를 찾을 수 있습니다here.

    재시작



    컨테이너를 다시 시작해야 하는 시기를 나타냅니다. compose specification에서 자세한 정보를 찾을 수 있습니다.

    볼륨



    서비스 컨테이너에서 파일을 사용할 수 있도록 합니다. 이 경우 두 개의 볼륨을 사용합니다.

  • 읽기 전용 모드에서 프로젝트 파일을 './:/var/www/app:ro' 디렉토리에 바인딩하는 /var/www/app

  • 읽기 전용 모드에서 nginx 구성 파일을 './nginx.conf:/etc/nginx/nginx.conf:ro'에 바인딩하는 /etc/nginx/nginx.conf

  • 볼륨here에 대한 자세한 정보를 찾을 수 있습니다.

    포트



    컨테이너 포트80를 localhost9081에 바인딩합니다. 이를 통해 URLhttp://localhost:9081을 사용하여 symfony 응용 프로그램에 액세스할 수 있습니다.

    포트에 대한 자세한 정보를 찾을 수 있습니다here.

    의존하다



    이 서비스가 서비스에 종속되어 있음을 나타냅니다example_php. example_phpfastcgi_pass 서버로 사용하도록 nginx를 구성했음을 기억하십시오.
    depends_on here에 대한 자세한 정보를 찾을 수 있습니다.

    example_php



    문맥



    Dockerfile이 있는 디렉터리의 경로를 정의합니다. 이 경우 동일한 디렉토리에 Dockerfile과 docker-compose.yml이 모두 있으므로 .를 간단하게 사용합니다.

    빌드 구성에 대한 자세한 정보를 찾을 수 있습니다here.

    working_dir


    docker exec를 사용하여 응용 프로그램 명령 실행을 단순화하기 위해 응용 프로그램 루트 디렉토리를 작업 디렉토리로 설정합니다.

    볼륨



    이 서비스에서는 캐시 생성 및 설치 종속성과 같은 쓰기 작업을 허용하기 위해 읽기 및 쓰기 모드에서 모든 애플리케이션 파일을 사용할 수 있도록 합니다.

    앱 실행



    앱을 실행하려면 docker-compose up를 실행하고 URLhttp://localhost:9081을 사용하여 앱에 액세스하기만 하면 됩니다.

    좋은 웹페이지 즐겨찾기