Symfony 5 Docker와 함께 개발

지난주에 우리는 playing with Kubernetes였지만, 이 프로젝트는 phpinfo () 함수로 호출된 작은 PHP 파일일 뿐, 그리 대단한 것은 아니다.
오늘 제 동료가 저에게 Docker를 소개해 달라고 했습니다. 왜냐하면 그는 진실한 예로 Symfony 프로젝트를 개발하려고 하기 때문입니다.이것 좀 봅시다. 그것은 매우 빠르고, 매우 간단하며, 매우 재미있습니다!
Symfony는 의존 항목과 스크립트, 이름 공간 등을 관리합니다.composer라는 파일을 사용합니다.json.의존 항목은vendor라는 디렉터리에 다운로드됩니다.
개발에 전념하여 우리는 누구나 저장소를 복제하고 응용 프로그램을 쉽게 실행할 수 있도록 기존의 설정과 격리 환경을 만들고 싶습니다.우리는 세 개의 용기를 사용할 것이다.
  • MySQL, 데이터 영구화를 위한 볼륨 마운트
  • PHP-FPM, 어플리케이션 코드 볼륨 설치
  • NGINX, 구성, 로그를 위한 마운트 볼륨 및 애플리케이션 자산용 PHP-FPM과 마운트 볼륨 공유
  • Composer
    데이터베이스 인증서, 응용 프로그램 키 등 용기의 매개 변수로 환경 변수를 사용해야 합니다.
    우리는 를 사용하여 모든 용기를 배치하고 운행할 것이다.
    Project
    │
    ├── docker-compose.yml
    │
    ├── database/
    │   ├── Dockerfile
    │   └── data/
    │
    └── php-fpm/
    │   └── Dockerfile
    │
    ├── nginx/
    │   ├── Dockerfile
    │   └── nginx.conf
    │
    └── logs/
        └── nginx/
    

    Docker 작성 MySQL 데이터베이스


    MariaDB 컨테이너 만들기
    # docker/database/Dockerfile
    
    FROM mariadb:latest
    CMD ["mysqld"]
    EXPOSE 3306
    
    설명하다
  • 사용
  • mysqld 시작 서버 실행
  • 데이터베이스 접속 노출 포트 3306
  • MariaDB 공식 이미지 PHP-FPM


    PHP-FPM 용기를 사용하면 시작할 때 의존 항목을 설치하고 데이터베이스 마이그레이션을 실행하고자 합니다.따라서 PDO MySQL 확장을 설치하고composer를 설치한 다음Symfony 마이그레이션 스크립트를 설치해야 합니다.
    그러나 MySQL 서버가 준비되기 전에 마이그레이션을 실행하면 문제가 발생할 수 있습니다.우리도 이 문제를 처리해야 한다.
    Docker compose를 사용하면 구성에 따라 depends\u를 지정하여 다른 컨테이너를 기다릴 수 있습니다.그러나 이것은 Docker compose가 MySQL 서버가 준비될 때까지 기다린다는 것을 의미하지 않는다. 이것은 MySQL 용기가 시작될 때까지 기다린다는 것을 의미하지 않는다.
    다행히도 스크립트의 도움으로 MySQL 용기의 포트 3306이 열리기를 기다릴 수 있습니다. 또는 인증서를 사용하여 MySQL에 연결할 때까지 기다릴 수도 있습니다.
    # docker/php-fpm/Dockerfile
    
    FROM php:fpm-alpine
    COPY wait-for-it.sh /usr/bin/wait-for-it
    RUN chmod +x /usr/bin/wait-for-it
    RUN apk --update --no-cache add git
    RUN docker-php-ext-install pdo_mysql
    COPY --from=composer /usr/bin/composer /usr/bin/composer
    WORKDIR /var/www
    CMD composer install ; wait-for-it database:3306 -- bin/console doctrine:migrations:migrate ;  php-fpm 
    EXPOSE 9000
    
    설명하다
  • PHP-FPM 공식 이미지 사용
  • 대기 스크립트를 용기에 복사하기
  • 대기 허용
  • 의존항 설치에 git 추가
  • PHP PDO MySQL 설치
  • 작곡가 공식 이미지
  • 에서 작곡가 파일 가져오기
  • 작업 디렉토리를/var/www
  • 로 설정
  • 종속 항목을 설치하고 MySQL 컨테이너가 온라인 상태가 될 때까지 기다린 후 마이그레이션 스크립트를 실행합니다.마지막으로 php-fpm 시작 서버 실행
  • PHP-FPM 포트 공개(9000)
  • 기다린다 NGINX 회사


    알겠습니다. 이 부분은 좀 복잡합니다. NGINX 프로필, PHP-FPM 프록시와 기본 NGINX 사이트에 사용할 단독 파일을 만들 것입니다.
    우선 Dockerfile 정의
    # docker/nginx/Dockerfile
    
    FROM nginx:alpine
    WORKDIR /var/www
    CMD ["nginx"]
    EXPOSE 80
    
    설명하다
  • 위에서 설명한 바와 같이 NGINX 공식 이미지 사용
  • working dir를/var/www로 설정하면 PHP-FPM 디렉터리와 같습니다. 마운트된 볼륨
  • 과 이 디렉터리를 공유하기 때문입니다.
  • nginx
  • 시작
  • 웹 포트 80 노출
  • 이제 하나의 NGINX 서버 구성
    # docker/nginx/nginx.conf
    user  nginx;
    worker_processes  4;
    daemon off;
    
    error_log  /var/log/nginx/error.log warn;
    pid        /var/run/nginx.pid;
    
    events {
        worker_connections  1024;
    }
    
    
    http {
        include       /etc/nginx/mime.types;
        default_type  application/octet-stream;
        access_log  /var/log/nginx/access.log;
        sendfile        on;
        keepalive_timeout  65;
    
        include /etc/nginx/conf.d/*.conf;
        include /etc/nginx/sites-available/*.conf;
    }
    
    NGINX-PHP-FPM 구성
    # docker/nginx/conf.d/default.conf
    
    upstream php-upstream {
        server php-fpm:9000;
    }
    
    NGINX 사이트 구성
    # docker/nginx/sites/default.conf
    
    server {
        listen 80 default_server;
        listen [::]:80 default_server ipv6only=on;
    
        server_name localhost;
        root /var/www/public;
        index index.php index.html index.htm;
    
        location / {
             try_files $uri $uri/ /index.php$is_args$args;
        }
    
        location ~ \.php$ {
            try_files $uri /index.php =404;
            fastcgi_pass php-upstream;
            fastcgi_index index.php;
            fastcgi_buffers 16 16k;
            fastcgi_buffer_size 32k;
            fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
            fastcgi_read_timeout 600;
            include fastcgi_params;
        }
    
        location ~ /\.ht {
            deny all;
        }
    }
    

    Docker Compose 구성


    3개의 컨테이너 정의가 있습니다. 이제 모든 구성 요소를 연결하기 위해 Docker compose 구성을 설정하면 됩니다.
    # docker/docker-compose.yml
    version: '3'
    
    services:
      database:
        build:
          context: ./database
        environment:
          - MYSQL_DATABASE=${DATABASE_NAME}
          - MYSQL_USER=${DATABASE_USER}
          - MYSQL_PASSWORD=${DATABASE_PASSWORD}
          - MYSQL_ROOT_PASSWORD=${DATABASE_ROOT_PASSWORD}
        ports:
          - "3306:3306"
        volumes:
          - ./database/init.sql:/docker-entrypoint-initdb.d/init.sql
          - ./database/data:/var/lib/mysql
    
      php-fpm:
        build:
          context: ./php-fpm
        depends_on:
          - database
        environment:
          - APP_ENV=${APP_ENV}
          - APP_SECRET=${APP_SECRET}
          - DATABASE_URL=mysql://${DATABASE_USER}:${DATABASE_PASSWORD}@database:3306/${DATABASE_NAME}?serverVersion=5.7
        volumes:
          - ../src:/var/www
    
      nginx:
        build:
          context: ./nginx
        volumes:
          - ../src:/var/www
          - ./nginx/nginx.conf:/etc/nginx/nginx.conf
          - ./nginx/sites/:/etc/nginx/sites-available
          - ./nginx/conf.d/:/etc/nginx/conf.d
          - ./logs:/var/log
        depends_on:
          - php-fpm
        ports:
          - "80:80"
    
    및 예제 환경 변수:
    # docker/.env
    
    DATABASE_NAME=symfony
    DATABASE_USER=appuser
    DATABASE_PASSWORD=apppassword
    DATABASE_ROOT_PASSWORD=secret
    
    APP_ENV=dev
    APP_SECRET=24e17c47430bd2044a61c131c1cf6990
    

    Symfony 회사


    Symfony 설치를 계속합니다.
    $ symfony new src
    

    재생 시간


    모든 것이 정확하게 설정되었습니다!우리 용기 가지고 놀자!
    $ docker-compose up
    
    이 용기들이 준비되면 를 열면 Symfony 5 환영 화면을 볼 수 있습니다.모든 것이 다 좋아, 즐겁게 놀았어!
    나는 이미 위에서 언급한 모든 파일을 위해 저장소를 만들었다 http://localhost

    좋은 웹페이지 즐겨찾기