3
6

More than 5 years have passed since last update.

docker-composeでお手軽Laravel環境構築(docker-toolbox php apache mysql)

Last updated at Posted at 2019-03-17

◆行うこと

・windowsでdocker toolbox を使用して、laravelプロジェクトを動作できる環境を作成する。

docker for windowsじゃなくてtoolboxを使う理由
Hyper-Vを有効化しちゃうとVirtualBoxが使えないようになるため
[参考にさせていただいた記事]https://goodbyegangster.hatenablog.com/entry/2018/09/09/201045

◆dockerとは

・Dockerは、Linuxのコンテナ技術を使ったもので、Linux上で何かやりたい(サーバーのインストールなど)ときに便利
・パッケージ化して配布できる
[参考にさせていただいた記事]https://knowledge.sakura.ad.jp/13265/

◆docker インストール

・Virtualboxをインストールしていない場合はインストール
[参考にさせていただいた記事]https://www.virtualbox.org/

・toolboxインストール
[参考にさせていただいた記事]https://docs.docker.com/toolbox/overview/

◆初回起動時する

・デスクトップ上のクジラのアイコンのショートカットをクリック->初期設定が行われる
・初期設定完了後、VirtualBoxを開くとdefaultというものが実行中になっており、これがdockerで使用するOS
ちなみdocker-toolboxのコマンドプロンプトでこのコマンドを打つとOSがわかる
$ docker info | grep Operating
Operating System: Boot2Docker 18.09.3 (TCL 8.2.1)
[参考にさせていただいた記事]https://teratail.com/questions/105687

◆dockerのコンテナとイメージ

[参考にさせていただいた記事]https://paiza.hatenablog.com/entry/docker_intro

◆dockerコンテナを作成していく

構成
dockerTest ----- php
             |
             --- mysql
             |
             --- db
             |
             --- docker-compose.yml

sample ----- index.php
laravelProject 

docker-composeは、複数のコンテナ(今回だとphpやmysql)のサービスを構築・実行する手順を自動・管理できる機能
[参考にさせていただいた記事]https://qiita.com/TsutomuNakamura/items/7e90e5efb36601c5bc8a

これを利用するためにdocker-compose.ymlを作成していきます。

docker-compose.yml
version: '2'
services:
  mysql:
    build: ./mysql
    container_name: mysql57
    ports:
      - '3306:3306'
    environment:
      MYSQL_USER: dbuser 
      MYSQL_PASSWORD: dbuser
      MYSQL_ROOT_PASSWORD: root
    volumes:
      - ./db:/var/lib/mysql
    command: --innodb-use-native-aio=0

  php:
    build: ./php
    container_name: php72
    ports:
      - '80:80'
    environment:
      - APACHE_DOCUMENT_ROOT=/var/www/public
    working_dir: /var/www/
    volumes:
      - "../sample/:/var/www/html"
    depends_on:
      - mysql

これでdocker-compose.ymlは一応完了

[補足(ファイルの中身の解説を書いております)]
[参考にさせていただいた記事]https://qiita.com/naga3/items/d1a6e8bbd0799159042e

serviceとcontainer_nameはわかりやすければ何でもいい。
ymlファイルはインデント(行の開始位置をずらす)で管理している。
例えば、servicesの配下にmysqlとphpがservice。

buildはこのディレクトリの中のDockerFileを元にイメージをビルドする

volumesはローカル同期するもの
- ./db:/var/lib/mysql mysqlの場合は保存領域を設定している
[参考にさせていただいた記事]https://qiita.com/onokatio/items/fcc9f8f94f8533bb030a

--innodb-use-native-aio=0  エラー防御のため
[参考にさせていただいた記事]https://webxreal.com/docker-lamp/

working_dir
はコンテナ内にログインした際のディレクトリを表している

depends_on:
- mysql
phpがmysqlに依存していることを表す。mysqlから立ち上がるので、phpからmysqlにアクセスできるようになる
[参考にさせていただいた記事]http://www.obenri.com/_webserver/document_root.html

◆mysqlディレクトリの中身の作成

docker-compose.ymlのmysqlの中で、build: ./mysqlと書いたので、同階層のmysqlディレクトリの中のDockerFileが
mysqlのコンテナの構成内容として読まれます。

DockerFile
FROM mysql:5.7
COPY ./my.cnf /etc/mysql/conf.d/

FROMは元となるDockerイメージの指定
COPY は設定をローカルファイルのものをコピーしております。

[参考にさせていただいた記事(DockerFileの書き方について)]https://qiita.com/soushiy/items/0945bcbc7ecce4822985

[FROMでとれるイメージは公式サイトにあります]https://hub.docker.com/_/php

my.cnf
[mysqld]
character-set-server=utf8

文字コードだけ指定させていただきました。

◆phpディレクトリの中身の作成

DockerFile
FROM php:7.2.7-apache
COPY php.ini /usr/local/etc/php/

RUN sed -ri -e 's!/var/www/html!${APACHE_DOCUMENT_ROOT}!g' /etc/apache2/sites-available/*.conf
RUN sed -ri -e 's!/var/www/!${APACHE_DOCUMENT_ROOT}!g' /etc/apache2/apache2.conf /etc/apache2/conf-available/*.conf

RUN apt-get update \
  && apt-get install -y libmemcached-dev libmcrypt-dev zlib1g-dev wget unzip libyaml-dev  \
  && docker-php-ext-install pdo_mysql mysqli mbstring zip

RUN apt-get install -y git ssh
RUN   a2enmod rewrite

FROM・COPYはmysqlと同じです(php-apacheを使わせていただきました。)

ドキュメントルート(アクセス時に見に行くディレクトリ)を変更するため、sedで置換してあげる
そのあと必要なものをインストールすることにした

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

◆dbディレクトリは作成するだけ

◆コンテナを作成する

上の構成を参考にdockerTestと同階層にsampleを作成する。
その下にindex.phpを作成する。index.phpの中身は
<? php phpinfo(): ?>

コマンドを実行して、コンテナを作成する

\dockerTest>docker-compose up -d

作成が完了したら、

\dockerTest>docker-machine ip で確認してアクセスする。

phpの画面が出れば成功

◆laravelプロジェクトのpublicを指定して、アクセスする

docker-compose.ymlの中身を変える

php:
    build: ./php
    container_name: php72
    ports:
      - '80:80'
    environment:
      - APACHE_DOCUMENT_ROOT=/var/www/public
    working_dir: /var/www/
    volumes:
      - "../laravelProject/:/var/www/"
    depends_on:
      - mysql

apacheのルートをlaravelProject配下のpublicに指定してあげて、起動したときにアクセスできるようにする

\dockerTest>docker-compose up -d

作成が完了したら、

\dockerTest>docker-machine ip で確認してアクセスする。

laravel画面が出てクリア

おまけメモ

apache設定

000-default.conf
<Directory /var/www/public>
    OptionsOptions Indexes DirectoryIndex FollowSymLinks MultiViews
    AllowOverride All
    Require all granted
</Directory>

phpのDockerFIle

FROM php:7.3-apache
COPY php.ini /usr/local/etc/php/
WORKDIR /var/www
ENV APACHE_DOCUMENT_ROOT /var/www/public/

RUN sed -ri -e 's!/var/www/html!${APACHE_DOCUMENT_ROOT}!g' /etc/apache2/sites-available/*.conf
RUN sed -ri -e 's!/var/www/!${APACHE_DOCUMENT_ROOT}!g' /etc/apache2/apache2.conf /etc/apache2/conf-available/*.conf

RUN apt-get update 
RUN apt-get install -y libmcrypt-dev zlib1g-dev libzip-dev 
RUN docker-php-ext-install zip pdo_mysql mysqli mbstring iconv 
RUN apt-get install -y git ssh
RUN   a2enmod rewrite
RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer
RUN curl -LO https://deployer.org/deployer.phar && mv deployer.phar /usr/local/bin/dep && chmod +x /usr/local/bin/dep
3
6
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
3
6