Laravel 10 を Docker化 [Ubuntu イメージ + PHP 8.2 FPM + NGINX] 🛳️🛳️
皆さん、こんにちは!DEV.toコミュニティの皆さん!
自分のLaravelアプリ(APIとして動作するもの)をDocker化してサーバーで実行しようと試みています。インターネット上には検索するといろんなDockerfileがありますが、大体が不完全だったり、何かの用途に特化していたりします。
ここでは、自分がどうやってDocker化したかを説明し、素晴らしいLaravel向けDockerfileにしようと試みます。もっと良い方法や、最適化の方法、または最適なLaravel環境に欠けている機能があればぜひ教えてください。
この記事ではLaravelアプリケーションをDocker化することのみに焦点を当て、データベースやファイルシステムなどは含まれていません。これらはシリーズとして順次投稿します。
プロジェクトのルート(artisan
、composer.json
、.env
などのファイルがある場所)に Dockerfile
というファイル名で以下の内容をコピーしてください。
FROM ubuntu:latest AS base
ENV DEBIAN_FRONTEND noninteractive
# 依存関係のインストール
RUN apt update
RUN apt install -y software-properties-common
RUN add-apt-repository -y ppa:ondrej/php
RUN apt update
RUN apt install -y php8.2\
php8.2-cli\
php8.2-common\
php8.2-fpm\
php8.2-mysql\
php8.2-zip\
php8.2-gd\
php8.2-mbstring\
php8.2-curl\
php8.2-xml\
php8.2-bcmath\
php8.2-pdo
# php-fpmのインストール
RUN apt install -y php8.2-fpm php8.2-cli
# composerのインストール
RUN apt install -y curl
RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer
# nodejsのインストール
RUN apt install -y ca-certificates gnupg
RUN mkdir -p /etc/apt/keyrings
RUN curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg
ENV NODE_MAJOR 20
RUN echo "deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_$NODE_MAJOR.x nodistro main" | tee /etc/apt/sources.list.d/nodesource.list
RUN apt update
RUN apt install -y nodejs
# nginxのインストール
RUN apt install -y nginx
RUN echo "\
server {\n\
listen 80;\n\
listen [::]:80;\n\
root /var/www/html/public;\n\
add_header X-Frame-Options \"SAMEORIGIN\";\n\
add_header X-Content-Type-Options \"nosniff\";\n\
index index.php;\n\
charset utf-8;\n\
location / {\n\
try_files \$uri \$uri/ /index.php?\$query_string;\n\
}\n\
location = /favicon.ico { access_log off; log_not_found off; }\n\
location = /robots.txt { access_log off; log_not_found off; }\n\
error_page 404 /index.php;\n\
location ~ \.php$ {\n\
fastcgi_pass unix:/run/php/php8.2-fpm.sock;\n\
fastcgi_param SCRIPT_FILENAME \$realpath_root\$fastcgi_script_name;\n\
include fastcgi_params;\n\
}\n\
location ~ /\.(?!well-known).* {\n\
deny all;\n\
}\n\
}\n" > /etc/nginx/sites-available/default
RUN echo "\
#!/bin/sh\n\
echo \"Start services...\"\n\
service php8.2-fpm start\n\
nginx -g \"daemon off;\" &\n\
echo \"Ready.\"\n\
tail -f /var/log/nginx/.log\n\
" > /start.sh
COPY . /var/www/html
WORKDIR /var/www/html
RUN chown -R www-data:www-data /var/www/html
RUN composer install
EXPOSE 80
CMD ["sh", "/start.sh"]
全画面モードにする。
ターミナルからビルドコマンドを実行して、その後にイメージを走らせます。
docker build -t MY_IMAGE .
docker run -p "8000:80" MY_IMAGE
全画面モードにする。
そしてブラウザを開いて "http://localhost:8000/" に移動します。
バーン!あなたのLaravelは起動しています!
急いでいるなら上のコードをコピーアンドペーストして作業を済ませてもいいですが、何が起きていて、どうやってニーズに合わせてカスタマイズするかを知りたい場合は、この記事に従ってください。ただし、Dockerについての基本的な理解が必要ですので、より詳しい情報を知りたい場合はDockerについて調べてみてください。
この記事が役に立ったことを願います。何か間違いや改善点があれば教えてください。
ちなみに、私の無料のNode.js Essentialsの電子書籍はこちらからチェックしてください:
質問や提案があれば、お気軽にご連絡ください。
こちらの記事はdev.toの良い記事を日本人向けに翻訳しています。
https://dev.to/adnanbabakan/dockerizing-laravel-10-ubuntu-image-php-82-fpm-nginx-318p