Docker를 사용하여 Laravel 개발 환경 구축 (Apache)

소개



이번에는 Docker를 사용하여 apache에서 PHP 실행 환경을 구축하고 Laravel 신규 프로젝트 작성까지 실시합니다.

환경



Docker와 docker-compose는 준비되어 있다고 가정합니다.
Docker 버전 18.06.0-ce
docker-compose version 1.22.0
아파치 2.4
PHP 7.2
Laravel 5.7

구성



다음 구성을 가정합니다.
project
├── docker
│   ├── Dockerfile
│   ├── apache
│   │    └── 000-default.conf
│   ├── db
│   │    ├── data
│   │    ├── my.cnf
│   │    └── sql
│   │        ├── 001-create-tables.sql
│   │        └── init-database.sh
│   └── php
│        └── php.ini
├── docker-compose.yml
└── server


건설



환경 구축의 순서를 해설을 간단하게 섞으면서 소개해 갑니다.

1. 디렉토리 생성



우선, 임의의 디렉토리(상기에서는 project)를 작성합니다.
바로 아래에 docker, server를 만듭니다. docker 디렉토리 바로 아래에 apache, php, db 디렉토리를 만듭니다. 또, db안에는 data 디렉토리도 작성해 두어 주세요.

2. docker-compose.yml 작성



이번에는 web, mysql, phpmyadmin의 3개의 컨테이너를 상정하고 있으므로 다음과 같이 됩니다.

docker-compose.yml
version: '3'

services:
  web:
    container_name: web
    build: ./docker
    ports:
      - 80:80
    privileged: true
    volumes:
      - ./server:/var/www/html

  db:
    image: mysql:5.7
    container_name: db-host
    environment:
      MYSQL_ROOT_PASSWORD: root
      MYSQL_DATABASE: docker-database
      MYSQL_USER: docker
      MYSQL_PASSWORD: docker
      TZ: 'Asia/Tokyo'
    command: mysqld --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
    volumes:
      - ./docker/db/data:/var/lib/mysql
      - ./docker/db/my.cnf:/etc/mysql/conf.d/my.cnf
      - ./docker/db/sql:/docker-entrypoint-initdb.d
    ports:
      - 3306:3306

  phpmyadmin:
    container_name: phpmyadmin
    image: phpmyadmin/phpmyadmin
    environment:
      - PMA_ARBITRARY=1
      - PMA_HOSTS=db-host
      - PMA_USER=root
      - PMA_PASSWORD=root
    ports:
      - 8080:80

3. Dockerfile 만들기



web 컨테이너 구축시에 사용되는 Dockerfile을 docker 디렉토리 바로 아래에 작성합니다.
Composer 설치는 공식을 참조하십시오.

Dockerfile
FROM php:7.2-apache
COPY ./php/php.ini /usr/local/etc/php/
COPY ./apache/*.conf /etc/apache2/sites-enabled/

RUN apt-get update \
  && apt-get install -y zlib1g-dev libpq-dev mariadb-client unzip\
  && docker-php-ext-install zip pdo_mysql mysqli \
  && docker-php-ext-enable mysqli

COPY --from=composer:latest /usr/bin/composer /usr/bin/composer
ENV COMPOSER_ALLOW_SUPERUSER 1
ENV COMPOSER_HOME /composer
ENV PATH $PATH:/composer/vendor/bin

WORKDIR /var/www/html

RUN composer global require "laravel/installer"

4. PHP 설정 파일 생성



PHP의 설정 파일을 docker/php/에 작성합니다. 이하, 최소한의 설정이므로 프로젝트에 따라 변경해 주십시오.

php.ini
[Date]
date.timezone = "Asia/Tokyo"
[mbstring]
mbstring.internal_encoding = "UTF-8"
mbstring.language = "Japanese"

5. apache 설정 파일 생성



apache 설정 파일을 docker/apache 바로 아래에 만듭니다. 다음은 Laravel의 운영을 전제로 설명합니다.

000-default.conf
<VirtualHost *:80>

        ServerAdmin webmaster@localhost
        DocumentRoot /var/www/html/public

        ErrorLog ${APACHE_LOG_DIR}/error.log
        CustomLog ${APACHE_LOG_DIR}/access.log combined

</VirtualHost>

6. Laravel 프로젝트 생성



이제 docker를 시작하고 Laravel 프로젝트를 생성해 보겠습니다.
docker-compose.yml이있는 디렉토리로 이동하여 아래에서 docker를 시작하십시오.
그런 다음 docker로 들어가서 Laravel 프로젝트를 만듭니다.
# docker起動
$ docker-compose up -d

# webコンテナに入ります
$ docker-compose exec web bash

# Laravelプロジェクト作成
$ laravel new

server 아래에 Laravel의 각 디렉토리와 파일이 있습니다.

7. 동작 확인



브라우저에서 htp://127.0.0.1:80에 액세스해 봅시다. 아래와 같이 Laravel의 화면이 일어나면 성공입니다.


MySQL, phpMyAdmin의 컨테이너도 확인해 둡시다.
브라우저에서 htp://127.0.0.1:8080에 액세스해 봅시다.
phpMyAdmin이 표시되면 괜찮습니다.

좋은 웹페이지 즐겨찾기