公式イメージでLaravelを動かすDocker環境構築
☕ はじめに
UbuntuベースDocker構築記事 を書いたら、
次は "公式イメージ" だけで動かすDocker構築も体験したい
と思いました。
この記事は、Laravelを「公式Dockerイメージだけ」で動かす構成方法を解説します!
🔰 そもそも「公式イメージ」とは?
Dockerでは、コンテナを作るために「イメージ」という設計図のようなものを使います。
この設計図(イメージ)は、自分でゼロから作ることもできるし、すでに用意されたテンプレートを使うこともできます🔥
公式イメージとは、Docker Hub というプラットフォームで提供されている、信頼性の高いテンプレートのことです。例えば、以下のようなものがあります👇
-
APサーバー(PHP-FPM)なら →
php:8.3-fpm
-
Webサーバー(nginx)なら →
nginx:1.29
誰でも無料で使うことができ、環境構築の手間を大幅に減らせます。
🔍 Ubuntuベースと公式イメージの違い
項目 | Ubuntuベース | 公式イメージ |
---|---|---|
作成自由度 | 高い (すべて自分で入れる) | Composer等は自分で入れる |
学び | システム理解に最適 | 使いこなせると生産性高い |
設定量 | 多い | 少なめ |
速度 | 遅め | 早い |
🚀 ゴール
Laravelを公式イメージのDocker構成だけで簡潔に動かす
- nginx (web)
- php-fpm (app)
- mysql (db)
📂 ディレクトリ構成
laravel-app/
├── docker/
│ ├── app/
│ │ └— Dockerfile
│ └— web/
│ └— default.conf
├── docker-compose.yml
└— src/ (実際のLaravelプロジェクト)
- DockerfileはAPサーバーのみ作成する。
(公式イメージにはLaravelに必要な拡張が含まれていないため、Dockerfileで別途インストールをする) - それ以外は公式イメージをymlファイルに書いて指定する。
⚙️ docker-compose.yml
設定の意味を詳しく知りたい方はUbuntuベースDocker構築記事 をご覧ください🙇♀️
services:
app:
build:
context: ./docker/app
dockerfile: Dockerfile
volumes:
- ./src:/var/www/html
working_dir: /var/www/html
web:
image: nginx:1.29.0-alpine # 公式イメージを指定
ports:
- "8080:80"
volumes:
- ./src/public:/var/www/html/public:ro
- ./docker/web/default.conf:/etc/nginx/conf.d/default.conf:ro
depends_on:
- app
db:
image: mysql:8.0 # 公式イメージを指定
ports:
- "3306:3306"
volumes:
- db-data:/var/lib/mysql
environment:
MYSQL_ROOT_PASSWORD: password
MYSQL_DATABASE: laravel_db
volumes:
db-data:
💡 image: を指定したらどうなるのか
Dockerは以下の動きを自動でやってくれます ✅
① Docker Hub からイメージを pull
② それをもとにコンテナを作成・起動
💡 どの公式イメージを使ったらいいか?
Docker Hubから環境に合ったものを選びましょう👇
nginx
php-fpm
mysql
📁 Dockerfile (php-fpm)
# 公式イメージを指定
FROM php:8.3-fpm-bullseye
RUN apt-get update && \
apt-get -y install --no-install-recommends git unzip libzip-dev libicu-dev libonig-dev && \
apt-get clean && \
rm -rf /var/lib/apt/lists/* && \
docker-php-ext-install intl pdo_mysql zip bcmath
WORKDIR /var/www/html
COPY /usr/bin/composer /usr/bin/composer
CMD ["php-fpm", "-F"]
📁 nginxの設定ファイル
docker/web/default.conf
server {
listen 80;
server_name localhost;
index index.php index.html;
root /var/www/html/public;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
location ~ \.php$ {
fastcgi_pass app:9000;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME /var/www/html/public$fastcgi_script_name;
}
}
🛎 Laravelプロジェクトを作成
composer create-project laravel/laravel ./src
src ディレクトリを作成し、そこに Laravel アプリケーションを展開する。
イメージ作成とコンテナの起動
docker compose up -d --build
Laravel の welcome 画面が localhost:8080 に表示されたら成功!
.envの設定
# DBの設定
DB_CONNECTION=mysql
DB_HOST=db
DB_PORT=3306
DB_DATABASE=laravel_db
DB_USERNAME=root
DB_PASSWORD=password
*DB_HOST=db の db は、docker-compose.yml に書いたサービス名を指します。
これにより、コンテナ間で「名前解決」ができるようになっています。
マイグレーションでmysqlの確認
## appコンテナの中に入る
docker compose exec app bash
# appコンテナの中で
php artisan migrate
📈 まとめ
やはり、公式イメージを使うとサクサク環境構築できて便利ですね🌟
Dockerは最初こそ難しく感じますが、テンプレートをうまく活用すれば、一気に効率が上がります。
他の言語やフレームワークにも応用できるので、ぜひいろいろ試してみてください☺️
参考記事
Discussion