LoginSignup
7
8

More than 3 years have passed since last update.

Windows10 Home + Docker + Laravel 構築メモ

Last updated at Posted at 2019-12-16

はじめに

この記事は、とりあえずDocker上にLaravelを構築する流れを記載しています。
各ファイルの設定内容などの詳細については、下記の記事を参照いただけたらと思います。

【初心者向け】20分でLaravel開発環境を爆速構築するDockerハンズオン
windows 10 home で docker を導入するメモ

導入環境

Windows10 Home 64bit
Intel(R) Core(TM) i7-4500U CPU

構築環境

PHP 7.3.12
nginx/1.17.6
mysql Ver 8.0.18
Laravel Framework 6.0.4
DockerToolbox-19.03.1

Docker

windows10 HomeではDocker for Windowsはインストールできないので、Docker Toolboxをインストールする

1.「Docker Toolbox」のダウンロード

下記のURLにアクセスし、Toolbox Releases をクリック
https://docs.docker.com/toolbox/overview/
toolbox_1.PNG

DockerToolbox-19.03.1をダウンロードする
toolbox_2.PNG

2. ダウンロードしたファイルを実行

3. インストールが開始:「Next」を押して継続

toolbox_3.png

「Help Docker improve Toolbox」のチェックは外してContinueをクリックします。

4. インストール先の確認:「Next」を押して次画面に

toolbox_4.png

5. インストールするコンポーネントの選択:「Next」を押して次画面に

virtualBoxがすでにインストールされている場合は、virtualBoxのチェックを外す。
toolbox_5.png

6. 追加設定:「Next」を押して次画面に

Install VirtualBox with NDIS5 driver[default NDIS6のチェックを外す。
toolbox_6.png

※チェックを入れるとVirtualboxのバグで起動できない。

Error setting up host only network on machine start: The host-only adapter we just created is not visible. This is a well known VirtualBox bug. You might want to uninstall it and reinstall at least version 5.0.12 that is is supposed to fix this issue

7. インストールの開始:「Install」を押してインストールを開始

toolbox_7.png

8. インストール:インストールが完了するまでお待ち下さい

toolbox_8.png

9. インストールが無事完了しましたので「Finish」を押してインストールを終了してください

toolbox_9.png

10.「Docker」の起動確認

Docker Quickstart Terminalをクリック
toolbox_10.PNG

toolbox_11.PNG
完了!

Laravel

1. 作業ディレクトリを作成

$ mkdir docker-laravel
$ cd docker-laravel

ディレクトリ構成

docker-laravel/
.
├── README.md
├── docker
│   ├── mysql
│   │   └── Dockerfile
│   │   └── my.cnf
│   ├── nginx
│   │   └── default.conf # nginxの設定ファイル
│   └── php
│       ├── Dockerfile
│       └── php.ini
├── docker-compose.yml
├── logs
│   ├── access.log       # nginxのアクセスログ
│   ├── error.log        # nginxのエラーログ
│   ├── mysql-error.log
│   ├── mysql-query.log
│   ├── mysql-slow.log
│   └── php-error.log
└── src # Laravelをインストールするディレクトリ

2. 環境ファイル(.env)を作成

$ vim .env
.env
DB_NAME=homestead
DB_USER=homestead
DB_PASS=secret
TZ=Asia/Tokyo

※パスワードは適宜変更してください。

3. docker-compose.yml

$ vim docker-compose.yml
docker-compose.yml
version: "3"
services:
  app:                         # アプリケーションサーバ用コンテナ
    build:
      context: ./docker/php
      args:
        - TZ=${TZ}
    volumes:
      - ./src:/work
      - ./logs:/var/log/php
      - ./docker/php/php.ini:/usr/local/etc/php/php.ini
    working_dir: /work
    environment:
      - DB_CONNECTION=mysql
      - DB_HOST=db
      - DB_DATABASE=${DB_NAME}
      - DB_USERNAME=${DB_USER}
      - DB_PASSWORD=${DB_PASS}
      - TZ=${TZ}
  web:                       # Webサーバ用コンテナ
    image: nginx:1.17-alpine
    depends_on:
      - app
    ports:
      - 80:80
    volumes:
      - ./src:/work
      - ./logs:/var/log/nginx
      - ./docker/nginx/default.conf:/etc/nginx/conf.d/default.conf
    environment:
      - TZ=${TZ}
  db:                           # DBサーバ用コンテナ
    build: ./docker/mysql
    volumes:
      - db-store:/var/lib/mysql-files
      - ./logs:/var/log/mysql
    environment:
      - MYSQL_DATABASE=${DB_NAME}
      - MYSQL_USER=${DB_USER}
      - MYSQL_PASSWORD=${DB_PASS}
      - MYSQL_ROOT_PASSWORD=${DB_PASS}
      - TZ=${TZ}

volumes:
  db-store:

4. PHP

Dockerfile

$ mkdir -p docker/php
$ vim docker/php/Dockerfile
Dockerfile
FROM php:7.3-fpm-alpine
LABEL maintainer "your-name"

ARG TZ
ENV COMPOSER_ALLOW_SUPERUSER 1
ENV COMPOSER_HOME /composer

RUN set -eux && \
  apk add --update-cache --no-cache --virtual=.build-dependencies tzdata && \
  cp /usr/share/zoneinfo/${TZ} /etc/localtime && \
  apk del .build-dependencies && \
  docker-php-ext-install bcmath pdo_mysql && \
  curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/bin --filename=composer && \
  composer config -g repos.packagist composer https://packagist.jp && \
  composer global require hirak/prestissimo

php.ini

$ vim docker/php/php.ini
php.ini
error_reporting = E_ERROR | E_WARNING | E_PARSE | E_NOTICE
display_errors = stdout
display_startup_errors = on
log_errors = on
error_log = /var/log/php/php-error.log
upload_max_filesize = -1
memory_limit = -1
post_max_size = 100M
max_execution_time = 900
max_input_vars = 100000
default_charset = UTF-8

[Date]
date.timezone = ${TZ}

[mbstring]
mbstring.language = Japanese

5. MySQL

Dockerfile

$ mkdir -p docker/mysql
$ vim docker/mysql/Dockerfile
Dockerfile
FROM mysql:latest
ADD ./my.cnf /etc/mysql/my.cnf
RUN chmod 644 /etc/mysql/my.cnf

my.cnf

$ vim docker/mysql/my.cnf 
my.cnf
[mysqld]
# character set / collation
character-set-server = utf8mb4
collation-server = utf8mb4_bin

# timezone
default-time-zone = SYSTEM
log_timestamps = SYSTEM

# MySQL8 caching_sha2_password to mysql_native_password
default-authentication-plugin = mysql_native_password

# Error Log
log-error = /var/log/mysql/mysql-error.log

# Slow Query Log
slow_query_log = 1
slow_query_log_file = /var/log/mysql/mysql-slow.log
long_query_time = 5.0
log_queries_not_using_indexes = 0

# General Log
general_log = 1
general_log_file = /var/log/mysql/mysql-query.log

[mysql]
default-character-set = utf8mb4

[client]
default-character-set = utf8mb4

6. nginx

$ mkdir -p docker/nginx
$ vim docker/nginx/default.conf
default.conf
server {
    listen 80;
    root /work/public;
    index index.php;
    charset utf-8;

    location / {
        root /work/public;
        try_files $uri $uri/ /index.php$is_args$args;
    }

    location ~ \.php$ {
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        fastcgi_pass app:9000;
        fastcgi_index index.php;
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_param PATH_INFO $fastcgi_path_info;
    }
}

7. サービス用のコンテナの構築

$ docker-compose up -d --build
$ docker-compose ps
        Name                      Command              State          Ports
----------------------------------------------------------------------------------
docker-laravel_app_1   docker-php-entrypoint php-fpm   Up      9000/tcp
docker-laravel_db_1    docker-entrypoint.sh mysqld     Up      3306/tcp, 33060/tcp
docker-laravel_web_1   nginx -g daemon off;            Up      0.0.0.0:80->80/tcp

8. PHPのバージョン確認(コンテナの外からコマンド実行)

docker-compose exec app php -v
PHP 7.3.12 (cli) (built: Nov 22 2019 11:50:51) ( NTS )
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.3.12, Copyright (c) 1998-2018 Zend Technologies

9. nginxのバージョン確認

docker-compose exec web nginx -v
nginx version: nginx/1.17.6

10.MySQLのバージョン確認

docker-compose exec db mysql -V
mysql  Ver 8.0.18 for Linux on x86_64 (MySQL Community Server - GPL)

11. Laravelをインストールする

$ docker-compose exec app ash
/work # composer create-project --prefer-dist "laravel/laravel=6.*" .
/work # php artisan -V
Laravel Framework 6.0.4
/work # exit

12. マイグレーション実行

$ docker-compose exec app ash
/work # php artisan migrate

Migrating: 2014_10_12_000000_create_users_table
Migrated:  2014_10_12_000000_create_users_table (0.05 seconds)
Migrating: 2014_10_12_100000_create_password_resets_table
Migrated:  2014_10_12_100000_create_password_resets_table (0.02 seconds)
Migrating: 2019_08_19_000000_create_failed_jobs_table
Migrated:  2019_08_19_000000_create_failed_jobs_table (0.01 seconds)

/work # exit

13. Laravel トップ画面の表示

$ docker-machine ls
NAME      ACTIVE   DRIVER       STATE     URL                         SWARM   DOCKER     ERRORS
default   *        virtualbox   Running   tcp://192.168.xx.xxx:8000

http://192.168.xx.xxx (URLのIPアドレス部を指定する)

Laravelのトップ画面が表示されることを確認できれば完了。

おわりに

手順通りやれば、とりあえずDocker上にLaravelを構築出来るように書いたつもりですが、うまくいかないところや不足しているところはコメントなどで指摘してくださると助かります。
ひとまず構築し、参照記事を確認しながら、色々設定を変えることで理解が深まると思います。

7
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
8