どうも。若松です。

前回の記事で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を起動する