どうも。若松です。
前回の記事でLaravelの起動までをまとめました。
https://qiita.com/t_wkm2/items/29b150e52a7c08f0e976
今回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のサンプルを表示するまでをまとめました。
次回はマルチステージビルドでコンテナサイズのスリム化について書きたいと思います。