LoginSignup
9
9

More than 3 years have passed since last update.

DockerでLaravelを起動する

Posted at

どうも。若松です。

前回の記事で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 にアクセスすることで以下のサンプルを表示します。
スクリーンショット 2019-07-06 22.57.48.png

まとめ

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

9
9
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
9
9