share facebook facebook twitter menu hatena pocket slack

2019.07.22 MON

DockerでLaravelを起動する

若松 剛志

WRITTEN BY 若松 剛志

どうも。若松です。

前回の記事でLaravelの起動までをまとめました。
https://cloudpack.media/48181

今回DockerでLaravelの起動までをまとめます。

Dockerfile

FROM amazonlinux:2

# PHPインストール
RUN amazon-linux-extras install -y php7.3
RUN yum install -y php-pecl-zip php-mbstring php-dom

# Composerインストール
RUN php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
RUN php -r "if (hash_file('sha384', 'composer-setup.php') === '48e3236262b34d30969dca3c37281b3b4bbe3221bda826ac6a9a62d6444cdb0dcd0615698a5cbe587c3f0fe57a54d8f5') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;"
RUN php composer-setup.php
RUN php -r "unlink('composer-setup.php');"
RUN mv composer.phar /usr/local/bin/composer

# 環境変数設定
ENV COMPOSER_ALLOW_SUPERUSER 1
ENV COMPOSER_HOME "/opt/composer"
ENV PATH "$PATH:/opt/composer/vendor/bin"

# Laravelインストール
RUN composer global require "laravel/installer"

# Laravelプロジェクト作成
WORKDIR /var/www
RUN composer create-project laravel/laravel laravel

# ポートを公開
EXPOSE 8000

WORKDIR /var/www/laravel
CMD ["php","artisan","serve","--host","0.0.0.0"]

Dockerfile詳細

イメージ

FROM amazonlinux:2

前回AmazonLinux2を使用していたこともあり、今回のDockerでもAmazonLinux2をベースにDockerイメージを構築します。

PHPインストール

RUN amazon-linux-extras install -y php7.3
RUN yum install -y php-pecl-zip php-mbstring php-dom

前回同様、extrasリポジトリからインストールします。

Composerインストール

RUN php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
RUN php -r "if (hash_file('sha384', 'composer-setup.php') === '48e3236262b34d30969dca3c37281b3b4bbe3221bda826ac6a9a62d6444cdb0dcd0615698a5cbe587c3f0fe57a54d8f5') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;"
RUN php composer-setup.php
RUN php -r "unlink('composer-setup.php');"
RUN mv composer.phar /usr/local/bin/composer

こちらも前回同様に、Composerのインストールは公式のコマンドをそのまま使用します。
https://getcomposer.org/download/

環境変数設定

ENV COMPOSER_ALLOW_SUPERUSER 1
ENV COMPOSER_HOME "/opt/composer"
ENV PATH "$PATH:/opt/composer/vendor/bin"

環境変数はRUN ではなくENVを使用します。
RUN exportで環境変数を定義するとそのレイヤーのコンテナ内部のみに適用されてしまうため、他のレイヤーで環境変数が効かなくなってしまうためです。

Laravelインストール

RUN composer global require "laravel/installer"

こちらも前回同様、Composerを使用してLaravelをインストールします。

Laravelプロジェクト作成

WORKDIR /var/www
RUN composer create-project laravel/laravel laravel

前回はlaravel newを使用してLaravelプロジェクトを作成しましたが、 Laravel newでは対話型のターミナルが前提になっているようで、Dockerfileからビルドするとエラーになってしまいます。
そのためComposerを用いてLaravelプロジェクトを作成します。
※なぜComposerを用いるのか、なぜComposerでも作成できるかは深く追求していません。

ポートを公開

EXPOSE 8000

LaravelではデフォルトでTCP8000をListenするため、8000番を公開します。

Laravelサーバー起動

WORKDIR /var/www/laravel
CMD ["php","artisan","serve","--host","0.0.0.0"]

CMDで記述することで、コンテナ起動時にこのコマンドが実行され、サーバーが起動します。

コンテナビルド

docker build -t laravel .

Dockerfileに従ってコンテナをビルドします。
Dockerfileはカレントディレクトリに配置されている想定です。
成功するとlaravel:latestという名前のコンテナイメージが作成されます。

コンテナ実行

docker run -p 8000:8000 laravel

作成したコンテナイメージを実行します。
-p 8000:8000オプションでローカルの8000番とコンテナの8000番を繋ぎ、ローカル8000番でコンテナへアクセスできるようにします。

ブラウザでサンプルを表示

http://localhost:8000にアクセスすることで以下のサンプルを表示します。

まとめ

DockerでLaravelのサンプルを表示するまでをまとめました。
次回はマルチステージビルドでコンテナサイズのスリム化について書きたいと思います。

元記事はこちら

DockerでLaravelを起動する

若松 剛志

若松 剛志

AWS環境の構築、運用を担当。インフラを中心に雑食な感じで生きてます。JAWS-UGでも活動中。

cloudpack

cloudpackは、Amazon EC2やAmazon S3をはじめとするAWSの各種プロダクトを利用する際の、導入・設計から運用保守を含んだフルマネージドのサービスを提供し、バックアップや24時間365日の監視/障害対応、技術的な問い合わせに対するサポートなどを行っております。
AWS上のインフラ構築およびAWSを活用したシステム開発など、案件のご相談はcloudpack.jpよりご連絡ください。