やりたいこと
- Docker 及び Compose のインストールをしたい
- Docker を起動したい
- 起動した Docker 上で localhost のサーバーを立ち上げたい
前提
- OS
- macOS Sonoma 14.6
- 各バージョン
- PHP 8.2.10
- Laravel8
- Laravel8 のプロジェクトは作成済み
Docker Desktopのインストール
私の場合は「IntelチップのMac」からDocker.dmgをダウンロードし、インストール手順を実施しました。
インストールが完了しアカウント登録まで済むと Docker Desktop の起動に成功します。
ちなみに、Docker Desktop には Compose の内容も含まれているため、個別で Compose のインストールを実施する必要はありません。
https://matsuand.github.io/docs.docker.jp.onthefly/compose/install/#install-compose-on-macos
Docker Desktop for Mac には他の Docker アプリとともに Compose が含まれています。 したがって Mac ユーザーは Compose を個別にインストールする必要はありません。
以下のコマンドで Compose がインストールされていることを確認できます。
$ docker-compose --version
Docker Compose version v2.29.1-desktop.1
必要なファイル作成
ディレクトリ構成
Laravelのプロジェクト
├── app
├── bootstrap
├── ...
├── docker
│ ├── php
│ │ ├── Dockerfile
│ │ └── php.ini
│ └── nginx
│ ├── Dockerfile
│ └── nginx.conf
├── docker-compose.yml
├── ...
作成するコンテナ
- PHP 8.2
- MySQL 8.1
- Nginx 1.27
- node 18
docker-compose.ymlの作成
以下の内容でdocker-compose.ymlを作成しました。
PHPとnginxのバージョンは引数で指定しています。
services:
php:
build:
context: ./docker/php
args:
- VERSION=8.2.10
volumes:
- ./:/var/www/html
depends_on:
- mysql
environment:
- TZ=Asia/Tokyo
- LANG=C.UTF-8
nginx:
build:
context: ./docker/nginx
args:
- VERSION=1.27
ports:
- "8000:8000"
volumes:
- ./:/var/www/html
- ./docker/nginx/nginx.conf:/etc/nginx/nginx.conf
depends_on:
- php
environment:
- TZ=Asia/Tokyo
- LANG=C.UTF-8
mysql:
image: mysql:8.1.0
ports:
- "3306:3306"
volumes:
- mysql_data:/var/lib/mysql/data
environment:
- TZ=Asia/Tokyo
- LANG=C.UTF-8
- MYSQL_ROOT_PASSWORD=secret
- MYSQL_DATABASE=laravel
node:
image: node:18
volumes:
- ./:/var/www/html
working_dir: /var/www/html
environment:
- TZ=Asia/Tokyo
- LANG=C.UTF-8
stop_signal: SIGKILL
tty: true
volumes:
mysql_data:
Dockerfileの作成
./docker/php/Dockerfile
docker-compose.ymlで指定したPHPのバージョンをVERSION
の変数で受け取っています。
ARG VERSION
FROM php:${VERSION}-fpm
COPY php.ini /usr/local/etc/php/
RUN apt-get update \
&& apt-get install -y zlib1g-dev mariadb-client vim libzip-dev \
&& docker-php-ext-install zip pdo_mysql
#Composer install
RUN php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
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 /composer
ENV PATH $PATH:/composer/vendor/bin
WORKDIR /var/www
RUN composer global require "laravel/installer"
./docker/nginx/Dockerfile
docker-compose.ymlで指定したnginxのバージョンをVERSION
の変数で受け取っています。
ARG VERSION
FROM nginx:${VERSION}
php.iniの作成
[Date]
date.timezone = "Asia/Tokyo"
[mbstring]
mbstring.internal_encoding = "UTF-8"
mbstring.language = "Japanese"
nginx.confの作成
user nginx;
events {
worker_connections 1024;
}
http {
server {
listen 8000;
server_name localhost;
root /var/www/html/public;
location / {
index index.php index.html;
try_files $uri $uri/ /index.php?$query_string;
}
location ~ \.php$ {
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass php:9000;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
}
}
}
Dockerコンテナの起動
docker compose up -d
のコマンドでコンテナを起動します。
コンテナがない場合は作成から実行されます。
docker compose up -d
[+] Running 4/4
✔ Container laravelapp-mysql-1 Started
✔ Container laravelapp-node-1 Started
✔ Container laravelapp-php-1 Started
✔ Container laravelapp-nginx-1 Started
localhostにアクセス
http://localhost:8000 にアクセスするとLaravelプロジェクトの初期ページが表示されます。