docker PHP7을 사용합니다.3+Laavel 환경 15분 제작~2019년 버전

11807 단어 PHPDockerLaravelPHP7.3
지난해 마지막으로 라벨 프로젝트의 초기 형태를 만들어야 하기 때문에 메모로 썼다.
이 글에서는 docker 명령만 다음 작업을 수행할 수 있습니다.
  • 라벨 프로젝트의 초기 제작
  • PHP v7.3 용기의 제작 - xdebug,opcache
  • 도 포함
  • nginx v1.15용기 제작
  • 로컬 시스템으로 이동
  • 프로젝트가github에 공개되고 있습니다.
    https://github.com/tomoyamachi/docker-laravel-fpm-7.3
    한편 이 글은 다음과 같은 보도된 지식을 바탕으로 진행됐다.
    준비한 PHP7을 본격적으로 활용한다.컨테이너 3.0개 만들기

    프로젝트 작성


    composier 컨테이너를 통해 현재 디렉토리에 Laavel 항목을 만듭니다.
    $ docker run --rm --interactive --tty -v $(pwd):/app \
      composer bash -c \
      "composer create-project --prefer-dist laravel/laravel ."
    
    현재 디렉토리
    $ docker-laravel-php-fpm-7.3.0# ls
    app            composer.json  database       public         routes         tests
    artisan        composer.lock  package.json   readme.md      server.php     vendor
    bootstrap      config         phpunit.xml    resources      storage        webpack.mix.js
    
    OK.

    PHP-FPM 용기 만들기


    PHP-FPM 컨테이너의 Docker file/dockerignore 파일을 만듭니다.
    PHP에 대한 Dockkerfile 제작은 길어지기 때문에 다른 기사를 정리했습니다.
    참조여기..
    2019/01/26 추기
    참고@hokutoasari씨의 뉴스.를 추가echo 'opcache.optimization_level=0x7FFFBBFF'했습니다.
    # Dockerfile
    FROM php:7.3.0-fpm-alpine3.8
    
    RUN apk upgrade --update && apk --no-cache add \
        # iconv, intl
        icu-dev \
        # xdebug
        autoconf make g++ gcc
    
    RUN docker-php-ext-install  -j$(nproc) iconv intl mbstring pdo_mysql opcache && \
      pecl install xdebug-2.7.0beta1 && \
      docker-php-ext-enable xdebug
    
    RUN { \
      echo 'upload_max_filesize = 100M'; \
      echo 'post_max_size = 108M'; \
      echo 'short_open_tag = On'; \
      echo 'fastcgi.logging = 1'; \
      echo 'opcache.enable=1'; \
      echo 'opcache.optimization_level=0x7FFFBBFF'; \
      echo 'opcache.revalidate_freq=0'; \
      echo 'opcache.validate_timestamps=1'; \
      echo 'opcache.memory_consumption=128'; \
      echo 'opcache.interned_strings_buffer=8'; \
      echo 'opcache.max_accelerated_files=4000'; \
      echo 'opcache.revalidate_freq=60'; \
      echo 'opcache.fast_shutdown=1'; \
      echo 'xdebug.remote_enable=1'; \
    } > /usr/local/etc/php/conf.d/overrides.ini
    
    COPY . /var/www/html
    RUN chown -R www-data:www-data /var/www
    
    그리고docker build.어쨌든 라벨이라는 이름으로 용기를 시작합니다.
    $ docker build -t laravel . 
    $ docker run laravel
    
    [30-Dec-2018 17:24:55] NOTICE: fpm is running, pid 1
    [30-Dec-2018 17:24:55] NOTICE: ready to handle connections
    
    나는 막 가려던 참에 왔다.

    컨테이너 만들기


    운행 상황을 확인하다.
    컨테이너를 만듭니다.
    FROM nginx:1.15.6-alpine
    
    RUN { \
    echo 'server {';\
        echo 'listen 80;';\
        echo 'root /var/www/html/public;'; \
        echo 'index index.php index.html;'; \
        echo 'error_log  /var/log/nginx/error.log;'; \
        echo 'access_log /var/log/nginx/access.log;';\
        echo 'location ~ \.php$ {';\
            echo 'try_files $uri =404;';\
            echo 'fastcgi_split_path_info ^(.+\.php)(/.+)$;';\
            echo 'fastcgi_pass laravel:9000;';\
            echo 'fastcgi_index index.php;';\
            echo 'include fastcgi_params;';\
            echo 'fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;';\
            echo 'fastcgi_param PATH_INFO $fastcgi_path_info;';\
        echo '}';\
        echo 'location / {';\
            echo 'try_files $uri $uri/ /index.php?$query_string;';\
            echo 'gzip_static on;';\
        echo '}';\
    echo '}';\
    } > /etc/nginx/conf.d/default.conf
    
    COPY public /var/www/html/public
    
    위의 Doke rfile을 계속 구성합니다.Dockerfile.nginx 등의 명칭으로 docker build -f Dockerfile.prod -t laravel-nginx .로 구축하세요.
    하는 일은 php에 접근하면 laravel:9000 에이전트가 될 것 같습니다.
    다음은laavel이라는 이름으로 php-fpm 용기에 연결하세요.

    nginx를 통해 php-fpm에 연결


    nginx에서 php-fpm 용기에 연결하고 싶기 때문에 다음과 같은 조건을 만족합니다.
  • 동일한 네트워크에 컨테이너 구성
  • host명으로nginx에서php-fpm용기laravel
  • 에 접근할 수 있음
    그럼 시작합시다.

    1. 동일한 네트워크에 컨테이너 구성


    docker는 일반적인 프로그램과 분리되어 존재하며 각각hosts 정보를 가지고 있습니다.
    컨테이너 간 통신을 위해서는 같은 네트워크에 컨테이너를 만들어야 한다.
    다른 용기에 영향을 주지 않기 위해 새 네트워크를 만듭니다.
    이름은 docker network ls 쓰지 않은 것을 선택해야 한다.
    이번에는 laavel-test로 제작되었습니다.
    $ docker network create laravel-test
    

    2.nginx에서 php-fpm 컨테이너로laavel의host명으로 접근 허용


    docker run의 name을 지정합니다.
    방금 제작된 라벨이라는 컨테이너는 방금 제작된 라벨-test라는 네트워크에 라벨이라는 이름으로 배치됐다.
    $ docker run --network laravel-test --name laravel laravel
    
    그리고 다른 종착역에서 같은 네트워크에 방금 제작한nginx 컨테이너를 설치합니다.이때 컨테이너의 80개 포트를 기계의 80개 포트에 올려놓는다.
    docker run --network laravel-test -p 80:80 laravel-nginx
    

    브라우저에서 확인



    내가 봤어!!
    또한 상기 명령이라면 터미널에 로그가 표시될 것입니다.
    PHP-FPM 측
    172.25.0.3 -  30/Dec/2018:17:51:57 +0000 "GET /index.php" 200
    172.25.0.3 -  30/Dec/2018:17:51:59 +0000 "GET /index.php" 200
    
    측면
    172.25.0.1 - - [30/Dec/2018:17:51:57 +0000] "GET / HTTP/1.1" 200 2333 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36"
    172.25.0.1 - - [30/Dec/2018:17:51:59 +0000] "GET / HTTP/1.1" 200 2333 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36"
    
    이것은 docker run에서 -d 옵션을 주면 백엔드에서 이동합니다.
    또는 프로세스가 중지되면 docker container start를 거쳐 컨테이너를 다시 시작해도 백스테이지에서 이동한다.
    $ docker container ls -a
    CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                      PORTS                NAMES
    39a0c410b1cc        laravel-nginx       "nginx -g 'daemon of…"   10 minutes ago      Exited (0) 6 seconds ago                        boring_rosalind
    2b46c41b09db        laravel             "docker-php-entrypoi…"   22 minutes ago      Exited (0) 4 minutes ago                         laravel
    
    $ docker container start 2b46c41b09db
    2b46c41b09db
    
    $ docker container start 39a0c410b1cc
    39a0c410b1cc
    

    총결산


    절차를 잘 정리하면 시간이 많이 걸리지만 컨테이너로만 프로젝트를 만들면 15분 정도면 완성할 수 있다.

    좋은 웹페이지 즐겨찾기