Step2:M1チップ搭載MACでLaravel開発環境を構築する【ディレクトリ作成】

ディレクトリの作成

まず初めに作業用のディレクトリを用意しましょう。
完全コピペで使用可能ですので是非ご参考ください。
Laravelプロジェクトがインストールされる場所はsrc直下になります。
ディレクトリ一覧は下記になります。

laravel_project
├── docker-compose.yml
├── apache
│   └── sites-available
├── env
│   └── .env.mysql
├── php
│   └── Dockerfile
└── src

docker-compose.ymlの作成

ここではそれぞれのコンテナへの設定を行なっていきます。
また、各ブロックごとの解説も記載していますのでご参考下さい。

version: "3.9"
services:
  web:
    build: 
      context: .
      dockerfile: ./php/Dockerfile
    container_name: local_web
    volumes:
      - ./src:/var/www/html
    ports:
      - 8080:80
    env_file: env/.env.mysql

  db:
    platform: linux/x86_64
    image: mysql:8.0.26
    container_name: local_db
    environment:
      MYSQL_HOST: db
      MYSQL_DATABASE: local_db
      MYSQL_USER: local_user
      MYSQL_PASSWORD: local_password
      MYSQL_ROOT_PASSWORD: local_password
    volumes:
      - db-data:/var/lib/mysql

volumes:
  db-data:

web: ブロック

build: -> dockerfile:

ディレクトリにあるDockerfileを使って導入(build)しますという指定。

    build: 
      dockerfile: ./php/Dockerfile

volumes:

最初の./srcが自分のローカル内ディレクトリのパス。その後の/var/www/htmlがDockerコンテナ内のディレクトリのパスになります。
これはローカルの./srcをDockerコンテナ内の/var/www/htmlとして使います、という指定。

    volumes:
      - ./src:/var/www/html

env_file:

このコンテナ内で使用する環境変数を設定するための指定です。
右のファイル内に書かれているenv/.env.mysql環境変数を使います、という指定。

      env_file: env/.env.mysql

db: ブロック

platform:

M1チップ搭載のMacでは必ずこの設定を行いましょう。

コンテナ起動時にエラーが表示され動かなくなります。

    platform: linux/x86_64

volumes:

db(データベース)のデータをどこに保持するかを指定します。
これはDockerアプリのボリュームというデータの保存場所です。
Dockerはもう一度コンテナを作り直りなおすと、保存されたコンテナ内のデータも全て消えてしまいます。それを永続化するためにこのボリュームを使います。

    volumes:
      - db-data:/var/lib/mysql

Dockerfileの用意

次にwebコンテナで設定を行なった下記ファイルを用意します。

    build: 
      dockerfile: ./php/Dockerfile

./php/Dockerfile 内容

これはwebコンテナで使用するアプリケーションをインストールするためのファイルです。
Dockerコンテナは基本的にLinuxベースで動いているので、aptで必要なものを入れていきます。
また、この時点でLaravelをインストールするために必要になるComposerも入れています。

FROM php:7.4.22-apache

RUN rm /etc/apt/preferences.d/no-debian-php

# Install git
RUN apt-get update && \
    apt-get upgrade -y && \
    apt-get install -y git net-tools vim \
    zip unzip libzip-dev && \
    apt-get clean

# Set apache mod_rewrite
RUN a2enmod rewrite

# Install php extension
RUN docker-php-ext-install mysqli pdo pdo_mysql zip

# Install Composer
RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer

# Install NPM & node
RUN curl -sl https://deb.nodesource.com/setup_14.x | bash -
RUN apt-get install -y nodejs build-essential

.envファイルの用意

こちらも同様にwebコンテナで設定した下記ファイルを用意していきます。

      env_file: env/.env.mysql

env/.env.mysql 内容

MYSQL_HOST=db
MYSQL_DATABASE=local_db
MYSQL_USER=local_user
MYSQL_PASSWORD=local_password
MYSQL_ROOT_PASSWORD=local_password

docker-compose upを実行

これで環境を構築するための準備ができました。
最後にdocker-compose.ymlファイルと同じ階層で、下記コマンドを実行します。

laravel_project % docker-compose up

しばらくすると下記のようなものが表示されます。
この表示がでればdocker-compose upの実行が正常に行われています。

Starting local_db  ... done
Starting local_web ... done
Attaching to local_db, local_web
...

これで立ち上げが完了したので、次に下記アドレスにアクセスします。

http://localhost:8080

現時点で、http://localhost:8080を開いても、そもそもファイルが何もなくforbiddenになってしまうので./srcindex.phpを作成します。
またphpDBへの接続ができているかを確認するため、内容はこのようにします。

再びhttp://localhost:8080に接続すると画像のような表示になります。

<?php

echo 'Docker Local';

$dsn = 'mysql:host='.$_ENV['MYSQL_HOST']
     .';dbname='.$_ENV['MYSQL_DATABASE'];

$dbh = new PDO($dsn, $_ENV['MYSQL_USER'], $_ENV['MYSQL_PASSWORD']);

foreach($dbh->query('SHOW databases') as $row) {
    echo '<pre>';
    print_r($row);
    echo '</pre>';
}

phpinfo();

DocumentRootを変更できるようにする

現状のままだとApacheのDocumentRootを変更するために、毎回Dockerのイメージを再構築しなければいけません。
その場合、Dockerのコンテナ削除、イメージ削除、docker-compose…という手間をそのたびに行わないといけないため、コンテナの再起動だけで済ませれるように設定をしましょう。

まず、新しいターミナルを開き下記コマンドを実行し、Apacheのconfファイル群をローカル側にコピーします。

laravel_project % docker cp local_web:/etc/apache2/sites-available/ ./apache/sites-available/

このコマンドは自分のローカル側からDockerのコンテナ内、またその逆へファイルをコピーすることができるものです。
このコマンドを使用してlocal_webコンテナの中のapacheのconfファイルをローカルにコピーします。

コマンドを実行すると、apache/sites-availableというディレクトリ直下に「000-default.conf」「default-ssl.conf」の2つのファイルが保存されています。

コピーされているのを確認できたら、docker-compose upをしたターミナルでCtrl+Cを使用し、Dockerコンテナをストップさせます。

Stopping local_web ... done
Stopping local_db  ... done

コマンド実行後、上記のようにdockerコンテナがストップされたことが確認できたら、次に下記コマンドでコンテナ削除を行います。

laravel_project % docker container prune -f

コンテナの削除が完了したら、次にdocker-comopse.ymlファイルを開き下記の1行をwebブロックのvolumesに書き加えます。

- ./apache/sites-available:/etc/apache2/sites-available

書き加えた後のdocker-comopse.ymlファイルの中身は下記になります。

version: "3.9"
services:
  web:
    build: 
      context: .
      dockerfile: ./php/Dockerfile
    container_name: local_web
    volumes:
      - ./src:/var/www/html
      - ./apache/sites-available:/etc/apache2/sites-available
    ports:
      - 8080:80
    env_file: env/.env.mysql

  db:
    platform: linux/x86_64
    image: mysql:8.0.26
    container_name: local_db
    environment:
      MYSQL_HOST: db
      MYSQL_DATABASE: local_db
      MYSQL_USER: local_user
      MYSQL_PASSWORD: local_password
      MYSQL_ROOT_PASSWORD: local_password
    volumes:
      - db-data:/var/lib/mysql

volumes:
  db-data:

保存が完了できたら、再度ターミナルでdocker-compose upを実行しlocalhost:8080に接続できるか確認します。

確認が出来れば、これでやっとLaravelを導入する準備ができました。

最後に

今記事はDockerfileの作成・構築、Dockerへの接続を解説しました。
次の記事ではLaravelの導入方法について解説していますので是非ご参考下さい。

次の記事はこちら:

関連記事

  1. 新型コロナウイルスのオープンデータ(API)が公開。医療系サイトのコンテンツを充実させよう。

  2. 【2025年最新版】AFFINGER6の使い方02(初期設定)

  3. 【2025年最新版】LINE広告の始め方、特徴や魅力を徹底解説!

  4. 【2025年最新版】AFFINGER6の使い方03(カスタマイズ編)

  5. 【2025年最新版】AFFINGER6でお問い合わせフォームを設置する方法

  6. 【ワードプレス簡単ログイン方法】もしかしてまだ検索エンジン使ってる?基本の使い方を徹底解説