BackEnd

Laravelの開発環境をdocker-composeで一から構築してみる

投稿日:

はじめに

こんにちは。以前、LaradockでLaravelの開発環境を作っていました。ひとまずLaravelを触ってみたい時はそれで十分ですが、ほとんどチュートリアルのコピペで環境構築が終わってしまうので、dockerやdocker-composeが何をしているのかよく分からないままでした。

Laravel以外の環境構築もDockerで行えるようになっておきたいですし、今回は自力でdocker-composeを書いてローカル環境を構築してみます。

環境はmacOS High Sierra 10.13.6、Docker Desktop 2.0.0.2がインストール済みであることを前提とします。

nginxでwebサーバを立てる

適当なディレクトリを決めて、その中で作業します。どこでも構いませんが、今回は~/testとして、必要なコンテナを構築する情報をdocker-compose.ymlに記述していきます。

  • image: nginx:latestで、DockerHub上にあるnginxの最新版のDockerイメージを指定できます。ローカルにイメージがあればそれを使い、無ければダウンロードされます。
  • portsはそのままポート番号です。左側がホスト側、右側がコンテナ側です。上記の場合はいずれもhttp通信のデフォルトである80番を指定しています。
    例えば8000:80と記述した場合、ブラウザからアクセスする際はhttp://ホスト名:8000となります。
  • volumesでコンテナと共有したいパスを指定します。ホスト側で作成したdefault.confを、コンテナ側の同ファイルと置き換えます。
    ポートと同じくホスト側パス:コンテナ側パスの順で記述します。

default.conf作成

nginxの設定ファイルです。ひとまず最低限の設定のみ記述し、PHP関連の設定は後で追記します。

index.html作成

nginxの動作を確認できればよいので、htmlの中身は1行で構いません。

nginxコンテナ起動

ブラウザでhttp://localhostにアクセスしてHello nginx.の文字が出てくればOKです。

nginxでPHP-FPMを動作させる

docker-compose.yml編集

静的コンテンツが見れるようになりましたので、次はPHP-FPMです。docker-compose.ymlにPHP-FPMコンテナの情報を記述していきます。
また、nginxにもPHP-FPMとの関連性を追記します。

  • image: php:7.3-fpm-alpineで、nginxと同様にdockerhub上のイメージを指定します。PHP-FPMのイメージはたくさんあるのですが、ここでは軽量なalpine Linuxのイメージを使っています。
  • depends_on:はコンテナの依存関係を示します。上記のように記述することで「php-fpmコンテナが起動したらwebコンテナを起動する」という意味になり、起動の順番を制御できます。

default.conf編集

nginxの設定ファイルdefault.confにもPHP-FPMの設定を追記します。
fastcgi_passの項にPHP-FPMへの接続情報を記述します。docker-compose.ymlでPHP-FPMの名前として指定しているphp-fpmを記述し、PHP-FPMのデフォルトポートである9000番を指定します。

index.php作成

index.htmlと同様に、起動を確認できれば充分です。

コンテナ起動

初回起動ではイメージのダウンロードが実行されます。最後2行のdoneが表示されたら起動OKです。再度http://loalhostにアクセスしてみましょう。

MariaDBを立ち上げる

データベースはMariaDBを使用します。MySQLでも問題ありませんが、設定や接続方法はほとんど一緒(らしい)なので、試しに使ってみようという程度のチョイスです。

docker-compose.yml編集

db:以下がMariaDBに関する記述です。また、php-fpmにも上述のdepends_onを追記しています。

environment以下にMariaDBの情報を設定しています。MariaDB最新の10系はMySQL5.7がベースとなっており、MySQL用の設定がそのまま使えるようです。

  • MYSQL_ROOT_PASSWORD:rootユーザーの初期パスワードです。
  • MYSQL_USERroot以外の初期ユーザーを設定できます。
  • MYSQL_PASSWORD↑で設定した初期ユーザーのパスワードです。
  • MYSQL_DATABASEを指定することで、MariaDBコンテナに接続する際のデータベース名を定義できます。データベースが無い場合は作成されます。

コンテナ起動

docker-compose up -dでMariaDBコンテナも起動するようになります。

接続確認

PHPからMariaDBへの接続はLaravelインストール後に設定しますので、まずはMariaDBが立ち上がっていることの確認のみです。

Laravelインストール

ようやくLaravelです。ComposerやPHP拡張など、Laravelのインストールと動作に必要なパッケージを用意します。php-fpmコンテナの中でコマンドを実行してもよいのですが、docker-composeコマンド実行時に自動でよしなにやってくれるように、docker-compose.ymlを編集します。

php:7.3-fpm-alpineイメージには上述のパッケージが含まれていませんので、別途Dockerfileを作成し、そこにインストールコマンドを記述します。

build:に記述したパスにDockerfileを作成します。
$ mkdir ./docker/php && vi ./docker/php/Dockerfile

  • RUN以降をシェルコマンドとして、コンテナ起動時に実行します。
  • apk addでパッケージインストールを行います。alpine以外のイメージだと大抵はapt-getで、CentOSなどのRedHat系で言うyumですね。
  • $PHPIZE_DEPSを指定することで、phpizeに必要なパッケージが自動でインストールされます。phpizeはPHP拡張モジュールを動的にビルドするのに必要で、これがないとPHP拡張を導入する際、いちいちPHP本体をビルドし直すことになってしまいます。
  • pecl install xdebugはdockerとは関係なく、peclライブラリを入れる時のコマンドそのままですね。必要に応じてimagickやredisなどお好きなものを。
  • docker-php-ext-installでPHP拡張をインストールし、docker-php-ext-enableで有効化します。意味こそコマンド名そのままですが、dockerコンテナ上ではこういう書き方になるんですね。
    MariaDBはMySQL用のライブラリで接続可能ですのでpdo_mysqlを入れます。その他mbstringなど最低限必要そうなものを入れていますが、ここもお好みで。
  • RUN composerの行はLaravelのインストールを実行するコマンドです。testappはプロジェクト名ですので、ここは自由にどうぞ。

コンテナ再構築

docker-compose up -dを実行しましょう。パッケージのダウンロード/インストール/ビルドが一斉に走りますので、結構かかります。
上述のDockerfileの最後にLaravelインストールのコマンドを記述すればコンテナ構築と同時にインストールも実行されますが、Dockerfileに書くとコンテナ起動時に毎回Laravelのインストールが走ってしまうので、あとでコンテナに入って実行します。

Laravelインストール

ここでもLaravelが依存するComposerのパッケージ群がモリモリ入りますので、数分お待ち下さい。

Laravelのwelcomeページを表示する

Laravelの公開ディレクトリをドキュメントルートにするため、default.confを編集します。locationの中に下記の1行を追記し、docker-compose restartで変更を反映してください。

LaravelからMariaDBに接続する

Laravelプロジェクト内の.envファイルに、docker-compose.ymlで設定した接続情報を記述します。DB_HOSTにはMariaDBのコンテナ名が入ります。この場合はdbですね。

マイグレーション実行

php-fpmコンテナ内で実行します。DB接続に成功すれば、最初から入っているマイグレーションファイルが実行されます。

上記のようなメッセージが表示されればOKです。お疲れ様でした。

さいごに

Laradockはチュートリアルが充実していたおかげで、docker-composeについてはほぼ知識ゼロでも構築ができてしまっていました。今回docker-compose.ymlを調べながら一項目ずつ書くことで、それぞれがどのような意味で何が実行されているのか、多少は把握することができるようになりました。

おすすめ書籍

Docker/Kubernetes 実践コンテナ開発入門 PHPフレームワーク Laravel Webアプリケーション開発 バージョン5.5 LTS対応

page_footer_300rect




page_footer_300rect




-BackEnd
-,

執筆者:


comment

メールアドレスが公開されることはありません。

CAPTCHA


関連記事

laravel logo

Laravel Authのパスワードリセット機能をカスタマイズする

1 はじめに2 準備2.1 Auth2.2 mailhog3 ユーザー登録とログイン4 パスワードリセットのカスタマイズ4.1 ルーティング確認4.2 view編集4.3 認証処理の編集5 リセット画 ...

Go言語

Go言語で使えるORMライブラリ

1 はじめに2 ORMライブラリ2.1 GORM2.2 SQLBoiler3 GORMを使ってみる3.1 導入3.2 migration3.3 insert3.4 select3.5 update3. ...

rails

私たちのFactoryGirlとRspecの使用ルール その1

1 はじめに2 そもそもなぜ基本ルールなどを作成しようとしたのか?3 Rspec編3.1 describe、context、itの階層で使用する3.2 10個以上のテストレコードを作成したい場合は、ト ...

rails

Capistrano3でRailsアプリケーションをデプロイする

1 はじめに1.1 前提条件2 Cpistranoについて3 導入3.1 Gemのインストール3.2 設定ファイルの準備4 デプロイ設定4.1 Capfileを修正する4.2 各環境で共通のデプロイ設 ...

rails

RailsでSidekiqを使ってみた

1 はじめに1.1 実行環境2 前準備2.1 Redisのインストール3 Railsの準備3.1 プロジェクト作成3.2 新規登録時にAPIを叩く4 Sidekiqの準備4.1 Workerを作る5 ...

フォロー

follow us in feedly

page_side_300rect

2019年3月
« 2月  
 12
3456789
10111213141516
17181920212223
24252627282930
31 

アプリ情報

目標を達成したい方を応援する、TODOアプリもリリースしております。 下記のアイコンから無料でダウンロードできます。

Web版MyCoach

私たちはより広い方にコーチングを知ってもらいたいと考えています。 下記のサイトにて、コーチの方々を紹介しておりますので、よろしければご覧ください。