Docker에서 Laravel (Apache + php-fpm + mysql)을 구축하는 절차

mac + Docker로 Laravel 환경을 만드는 절차입니다.

다음 환경을 만듭니다.
  • CentOS 7
  • Apache 2.4
  • php 5.6
  • MySQL 5.5
  • Laravel

  • 또 Docker등은 인스톨 되고 있는 것으로 합니다

    최종 디렉토리
    project_name
      ├── laradock
      │     ├─ apahce2
      │     │    └─ Dockerfileなど
      │     ├─ mysql
      │     │    └─ Dockerfileなど
      │     ├─ php-fpm
      │     │    └─ Dockerfileなど
      │     ├─ workspace
      │     │    └─ Dockerfileなど
      │     ├─ .laradock
      │     │    └─ data
      │     │
      │     ├── docker-compose.yml
      │     └── .env
      │
      └── laravel-app
           └── laravelのアプリを配置
    

    Docker에 필요한 설정하기



    laradock을 복제하고 .env 만들기



    다음에 필요합니다 .laradock/data
    $ git clone https://github.com/laradock/laradock.git
    $ cd laradock
    $ cp env-example .env
    $ mkdir -p .laradock/data
    

    env 파일을 만지다


    $ vim .env
    .env
    # laradock内に作りたい為(13行目)
    - DATA_SAVE_PATH=~/.laradock/data
    + DATA_SAVE_PATH=.laradock/data
    
    # workspaceとはバージョンを別にしたい為(20行目)
    + PHP_FPM_VERSION=56
    
    # ポートの重複を避ける為(84,85行目)
    - APACHE_HOST_HTTP_PORT=80
    - APACHE_HOST_HTTPS_PORT=443
    + APACHE_HOST_HTTP_PORT=8888
    + APACHE_HOST_HTTPS_PORT=8443
    

    mysql 설정


    $ vim mysql/Dockerfile
    Dockerfile
    # 1行目
    - FROM mysql:8.0
    + FROM mysql:5.5
    

    아파치 설정


    $ vim apache2/Dockerfile
    Dockerfile
    # 1行目
    - FROM webdevops/apache:ubuntu-16.04
    + FROM webdevops/apache:centos-7
    

    docker-compose.yml 설정


    $ vim docker-compose.yml
    docker-compose.yml
    # php-fpmの設定(78,82行目)
    - dockerfile: "Dockerfile-${PHP_VERSION}"
    + dockerfile: "Dockerfile-${PHP_FPM_VERSION}"
    
    - ./php-fpm/php${PHP_VERSION}.ini:/usr/local/etc/php/php.ini
    + ./php-fpm/php${PHP_FPM_VERSION}.ini:/usr/local/etc/php/php.ini
    

    compose하다


  • workspace
  • php-fpm
  • apache
  • mysql

  • 네 가지를 시작합니다.
    $ docker-compose up -d workspace mysql php-fpm apache2
    

    상당히 시간이 걸리므로 커피를 마시고 기다리자.

    laravel 앱 만들기 및 설정 변경



    workspace의 컨테이너 안으로 들어가기


    $ docker-compose ps "workspace"
              Name                Command      State          Ports
    -----------------------------------------------------------------------
    laradock_workspace_1   /sbin/my_init   Up      0.0.0.0:2222->22/tcp
    
    $ docker exec -it laradock_workspace_1 bash
    

    컨테이너에서 laravel-app 만들기


    root@{コンテナID}:/var/www# 
    長いので省略
    # composer create-project --prefer-dist laravel/laravel project_name
    

    여기서도 시간이 걸리니 기다리자
    끝나면 # exit 그리고 컨테이너에서 나가자.

    docker-compose.yml 설정 변경



    docker-compose.yml
    - ${APPLICATION}:/var/www
    + ${APPLICATION}project_name:/var/www
    

    이 상태에서
    http://localhost:8888
    에 액세스해도 연결되지 않습니다.

    왜 연결되지 않는지 로그를 보자.
    $ docker logs -f laradocktuna_apache2_1
    
    -> Executing /opt/docker/bin/service.d/httpd.d//10-init.sh
    2017-07-09 06:43:10,580 INFO success: apached entered RUNNING state, process has stayed up for > than 0 seconds (startsecs)
    AH00526: Syntax error on line 119 of /etc/httpd/conf/httpd.conf:
    DocumentRoot '/var/www/html' is not a directory, or is not readable
    2017-07-09 06:43:10,629 INFO exited: apached (exit status 1; not expected)
    

    영원히 로그가 계속 나오고 있네요… ✌︎('ω'✌︎ )

    주목해야 할 것은
    DocumentRoot
    '/var/www/html' is not a directory
    
    (/var/www/htmlのディレクトリが見つからないよ!)
    

    그래서

    apache 컨테이너에 들어가서 DocumentRoot를 설정합시다.

    아파치 컨테이너에 들어가기


    $ docker-compose ps "apache2"
             Name                       Command               State                      Ports
    -------------------------------------------------------------------------------------------------------------
    laradocktuna_apache2_1   /opt/docker/bin/entrypoint ...   Up      0.0.0.0:8443->443/tcp, 0.0.0.0:8888->80/tcp
    
    $ docker exec -it laradock_apache2_1 bash
    

    httpd.conf 설정 변경


    [root@{コンテナID} public]#
    長いので省略
    # vi /etc/httpd/conf/httpd.conf
    

    httpd.conf
    # DocumentRootを変更する(119行目)
    - DocumentRoot "/var/www/html"
    + DocumentRoot "/var/www/public"
    

    httpd 서비스 다시 로드# service httpd restart끝나면 # exit 괜찮습니다.

    http://localhost:8888
    에 액세스 해 보면 ....



    마지막으로



    DocumentRoot의 설정을 일부러 컨테이너에 들어가지 않고 하는 방법도 있습니다.

    미리 httpd.conf를 준비하십시오.
    Dockerfile에서 COPY 문을 작성하는 것입니다.

    그 외 Dockerfile등으로 끝낼 수 있는 방법이 있으면
    코멘트 잘 부탁드립니다.

    또한 여기에 최소화 한 것을 둡니다.
    htps : // 기주 b. 코 m / 츠나 밥 / 아라도 ck

    좋은 웹페이지 즐겨찾기