0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Dockerを使ったLaravel8の環境構築

Last updated at Posted at 2024-09-21

やりたいこと

  • Docker 及び Compose のインストールをしたい
  • Docker を起動したい
  • 起動した Docker 上で localhost のサーバーを立ち上げたい

前提

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プロジェクトの初期ページが表示されます。

参考

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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?