라라벨 소스와 도커파일들이 있는 전제로 움직이는 샘플인데

시간되면 깃허브에 올리겠습니다.

지금은 참고만 하시길...

디렉토리 구성

프로젝트
├── docker
│   ├── mysql
│   ├── nginx
│   └── php
├── docker-compose.yml
├── laravel

라라벨 초기상태 소스를 laravel로 배치
첨부 docker/php/Dockerfile작성하시고

아래처럼 기동

(nginx사용하시려면 컨피그파일 만들어서 넣어주시고 주석 해제 해주시고 기동하셔야함)

cd prj패스
docker-compose up
# 확인은 http://localhost:8000

docker-compose.yml

version: '3'
services:
#  nginx:
#    image: nginx:stable-alpine
#    environment:
#      APP_ENV: dev
#      TZ: Asia/Tokyo
#    ports:
#      - '80:80'
#    depends_on:
#      - app
#    volumes:
#      - ./docker/nginx/default.conf:/etc/nginx/conf.d/default.conf
#      - .:/var/www/html
  app:
    build: ./docker/php
    container_name: app
    #for dev
    command: php artisan serv --host 0.0.0.0
    environment:
      APP_ENV: dev
    ports:
      - "8000:8000"
    volumes:
      - ./laravel:/var/www/html/laravel:cached
    working_dir: /var/www/html/laravel
    depends_on:
      - db
  db:
    image: mysql:5.7
    container_name: db
    command: mysqld --character-set-server=utf8 --collation-server=utf8_unicode_ci
    environment:
      TZ: Asia/Tokyo
      MYSQL_DATABASE:
      MYSQL_USER: test
      MYSQL_PASSWORD: test
      MYSQL_ROOT_PASSWORD: test
    ports:
      - "3306:3306"
    volumes:
      - mysql-data:/var/lib/mysql
      - ./docker/mysql/initdb.d:/docker-entrypoint-initdb.d

volumes:
  mysql-data:

docker/php/Dockerfile

vue사용시를 위해 node/npm도 함께 인스톨합니다.

FROM php:7.3-fpm

ENV TZ='Asia/Tokyo'
RUN echo "alias ff='find . -name'" >> ~/.bashrc \
&& echo "alias ll='ls --color=auto -lA'" >> ~/.bashrc \
&& echo "alias grep='grep --color=auto'" >> ~/.bashrc

# install composer
RUN cd /usr/bin \
&& curl -s http://getcomposer.org/installer | php \
&& ln -s /usr/bin/composer.phar /usr/bin/composer

RUN apt-get update && apt-get install -y \
libpq-dev \
procps \
git \
zip \
unzip \
vim \
&& pecl install xdebug \
&& docker-php-ext-install pdo_mysql opcache \
&& docker-php-ext-enable xdebug

RUN curl -sL https://deb.nodesource.com/setup_10.x | bash - \
&& apt-get install -y nodejs \
&& npm install -g npm

RUN apt-get clean \
&& rm -rf /var/lib/apt/lists/*


WORKDIR /var/www/html/laravel

'php' 카테고리의 다른 글

php8 vs 언어별 벤치마크!  (3) 2020.11.01

온갖 욕을 먹으면서도 끈질기게 살아남는 php

5에서 7으로 넘어올때도 2배 가까운 성능향상으로 존재감을 과시하더니

php8은 더더욱 엄청납니다....

 

부수적인 내용은 제외하고 JIT컴파일러 도입에 의한

해외 사이트 벤치결과 요약해 보겠습니다.

 

PHP 8.0 공개일 2020년 11월26일 확정

알파판은 이미 배포중

 

각 언어별 속도 비교 (피보나치 연산)

php8-dev JIT 0.444초
go 1.13 0.052초
Java 11.0.4 0.038초
Python 3.8.1 2.449초
Node v13.6.0 0.2001초

재미있는건 JAVA가 go lang보다 빠르네?

php8도 이 정도 속도면 뭐... JIT없이는 아마 파이썬과 놀아야 맞지 싶은데

 

 

테스트 코드

$n = 35;
function fibonacci(int $n): int
{
    return(($n < 2) ? 1 : fibonacci($n - 2) + fibonacci($n - 1));
}

 

php 버젼별 성능 비교

php8 default php8 + opcache php8 + JIT PHP 7.4.7 default
0.814755 0.355585 0.106190 0.960383
0.818260 0.356907 0.106928 0.938955
0.822746 0.353799 0.106061 0.940920
0.817202 0.353423 0.106768 0.951347
0.819391 0.353574 0.106117 0.936791

7.4.7 디폴트에 비해 php8 JIT컴파일러 사용시 10배에 육박하는 속도... php7도 opcache를 쓰는 결과가 없어 좀 아쉬우나... 그거 감안해도 대략 2-3배 빠르다고들 하네요

 

테스트용 코드는 이하...

define("BAILOUT", 16);
define("MAX_ITERATIONS", 5000); // 1000だと早すぎたので

class Mandelbrot
{
    public function __construct()
    {
        $output = '';
        $d1 = microtime(1);
        for ($y = -39; $y < 39; $y++) {
            for ($x = -39; $x < 39; $x++) {
                if ($this->iterate($x/40.0, $y/40.0) == 0) {
                    $output .= '*';
                } else {
                    $output .= ' ';
                }
            }
            $output .= "\n";
        }
        $d2 = microtime(1);
        $diff = $d2 - $d1;
        echo $output; // 出力は最後にまとめた
        printf("\nPHP Elapsed %0.6f\n", $diff);
    }

    public function iterate($x, $y)
    {
        $cr = $y-0.5;
        $ci = $x;
        $zr = 0.0;
        $zi = 0.0;
        $i = 0;
        while (true) {
            $i++;
            $temp = $zr * $zi;
            $zr2 = $zr * $zr;
            $zi2 = $zi * $zi;
            $zr = $zr2 - $zi2 + $cr;
            $zi = $temp + $temp + $ci;
            if ($zi2 + $zr2 > BAILOUT) {
                return $i;
            }
            if ($i > MAX_ITERATIONS) {
                return 0;
            }
        }
    }
}

$m = new Mandelbrot();

php는 이제 작별을 고하고 python, go에 미래를 맡기려던 저 입니다만...

혹시 php8로 다시 흥하는건가요? ㅋㅋ 이리 되면 루비온 레일즈 고려하던 사람들은 그냥 PHP8이 낫지 싶은디?

뭐 까짓거 흥하면 또 php하죠 뭐

 

 

'php' 카테고리의 다른 글

docker로 laravel + mysql + nginx 구축 샘플  (1) 2020.11.22

+ Recent posts