【書いた理由】
Lravelの環境構築でいつもつまづいていたので、とにかくサクッとできたやつをメモとして書いておきたかった。私の書いたのは、参考URLのほとんどコピペになります。
参考にしたURL貼ってあるので詳しく知りたい方はそちらを参考にしてください。一部違う箇所は、phpmyadminを使いたかったのでそちらの設定をこっそり入れています。
参考URL
https://zenn.dev/kafeine/articles/d3d60d983555d5
【記事の目次】
- dockerのインストール
- ディレクトリとファイルの構図
- ディレクトリとファイルの作成
- ファイル内の記入
- 環境を接続する
- documentrootを変更
- Lravelを導入する
- apacheのドキュメントルートを変更とリライトを有効にする
- artisan migrateできるようにする
- Mysqlをターミナルで確認する
- 完了
【ローカル環境に構築していきます】
ちょっと長いですが頑張りましょう。^^;
01 : dockerのインストール
下記からdockerをインストールしてください
※M1=>download for mac --apple chip でインストール
02 : ディレクトリとファイルの構図
最終的にはこのような構図になります。
xxx_folder_name *
├── docker-compose.yml
│
├── apache
│ └── sites-available
| └── 000-default.conf
| └── Default-ssl.conf
│
├── env
│ └── .env.mysql
│
├── php
│ └── Dockerfile
│
└── src
└── index.php
└── xxx_project
└── laravelのファイルとディレクトリ
└── .env
※記号の説明
「*」 任意の記入
03 : ディレクトリの作成
ターミナルでひたすらディレクトリとファイルの作成
数字の手順通りに行ってください。
// 1 : 作成する場所に移動
$ cd workspace *
// 2 : ディレクトリを作成
$ mkdir xxx_project_name *
// 3 : ディレクトリを移動
$ cd xxx_project_name *
// 4 : ディレクトリを作成
$ mkdir apache
$ mkdir env
$ mkdir php
$ mkdir src
// 5 : ファイルを作成
$ touch docker-compose.yml
$ touch env/.env.mysql
$ touch php/Dockerfile
$ touch src/index.php
※記号の説明
「$」 これは記入しない
「//」 この行は記入しない、ただのコメント
「*」 任意の記入
04 : ファイル内の記入
docker-compose.yml に関してはインデントがずれているとエラーになるので注意してください。
version: "3.9"
services:
web:
build:
context: .
dockerfile: ./php/Dockerfile
container_name: xxx_project_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: xxx_project_db *
environment:
MYSQL_HOST: db
MYSQL_DATABASE: xxx_project_db *
MYSQL_USER: xxx_user *
MYSQL_PASSWORD: xxx_password *
MYSQL_ROOT_PASSWORD: xxx_password *
volumes:
- db-data:/var/lib/mysql
phpmyadmin:
depends_on:
- db
image: phpmyadmin/phpmyadmin:latest
ports:
- 8180:80
restart: always
environment:
PMA_USER: xxx_password *
PMA_PASSWORD: xxx_password *
volumes:
db-data:
※こちらの設定を変えた場合は、一度コンテナを作り直す必要があるので下記コマンドを実行してくだい
$ docker container prune -f
また、このファイルの設定についてこちらを参考にすると良さそう!
php/Dockerfile は、一部PHPのバージョンを記入してください。
確認方法は下記URLを参考にしてくだい。
FROM php:8.1.5-apache //8.1.5はお使いのPHPのバージョンになります。確認方法は上記のURL
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/.env.mysqlファイルについては、docker-compose.ymlの17~21行目と同じ記入してください
MYSQL_HOST=db
MYSQL_DATABASE=xxx_project_db *
MYSQL_USER=xxx_user *
MYSQL_PASSWORD=xxx_password *
MYSQL_ROOT_PASSWORD=xxx_password *
ここはコピペでOK
<?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();
?>
※記号の説明
「//」 この行は記入しない、ただのコメント
「*」 任意の記入
05 : 環境を接続する
ここは、下記を実行するだけ
うまくいかなかなかったら、MYSQL_HOST: db こういったところの記述が間違っていること多いです。
$ docker-compose up -d
// 下のようなのが表示されたら完了
Starting xxx_project_db ・・・done
Starting xxx_project_web ・・・done
Starting xxx_project_phpmyadmin_1 ・・・done
localhost:8080に接続して、エラーとか出てないか確認ください。
エラー表示されていたら、他にもdocker-compose buildを試した後でdocker-compose up -d で直ることもある
※記号の説明
「//」 この行は記入しない、ただのコメント
06 : documentrootを変更
下記を入力
docker cp xxx_project_web:/etc/apache2/sites-available/ ./apache/sites-available/
07 : Lravelを導入する
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2260961/648d9854-f92f-2a6b-f6b7-db735450e9b0.png) docker exec -it sample_web bash <=ターミナルで記入 root@7e0fs9402a24:/var/www/html# <=こんな表記に切り替わるLaravelを導入する
composer create-project laravel/laravel xxxproject
Application key set successfully. <=これが出たら完了
※sampleの箇所がディレクトリの名前になる
ここの処理が必要
docker-compose.yml
version: "3.9"
services:
web:
build:
context: .
dockerfile: ./php/Dockerfile
container_name: xxx_project_web <=【これ追加】
volumes:
- ./src:/var/www/html
- ./apache/sites-available:/etc/apache2/sites-available <=【これ必要】
ports:
- 8080:80
env_file: env/.env.mysql
08 : apacheのドキュメントルートを変更とリライトを有効にする
次はこのlocalhost:8080にアクセスしたら、Laravelのwelcomeページになるようします。
apache/sites-available/000-default.confのDocumentRootを変更する
<VirtualHost *:80>
~~~ 略 ~~~
ServerAdmin webmaster@localhost
DocumentRoot /var/www/html/xxxproject/public
リスタートしないと表示しないので注意
Docker-compose up -d
Laravelのホーム画面が出たらOK
09 : artisan migrate できるようにする
root@7e0fs9402a24:/var/www/html/xxxproject# php artisan migrate <=実行
下記のようなエラーが出るらしい
Illuminate\Database\QueryException SQLSTATE[HY000] [2002] Connection refused (SQL: select * from information_schema.tables where table_schema = laravel and table_name = migrations and table_type = 'BASE TABLE')
src/sample-docker/.env
上記のファイルにmysqlの設定をする
DB_CONNECTION=mysql
DB_HOST=db
DB_PORT=3306
DB_DATABASE=local_db
DB_USERNAME=local_user
DB_PASSWORD=local_password
キャッシュをクリアする
root@7e0fs9402a24:/var/www/html/laravel-docker# php artisan cache:clear
Application cache cleared!
root@7e0fs9402a24:/var/www/html/laravel-docker# php artisan config:clear
Configuration cache cleared!
再度migrateをするとできるらしい
root@7e0fs9402a24:/var/www/html/laravel-docker# php artisan migrate
10 : Mysqlをターミナルで確認する
・dbコンテナのチェック
kafeine@Bean-Mac web_tutorial % docker exec -it sample_db bash
root@376e3b3ad241:/#
※ここでエラーが出ていた
tarting match-app-db ... Done <=名前をよく見よう!! Match-app-dbまでが名前!
Starting match_web ... done
・既にMysqlが入っているので下記を入力してパスワードを記入
root@376e3b3ad241:/# mysql -u sample_user -h db -p
・下記を入力したら先ほどのmigrateしたテーブルがあるはず
mysql> use sample_db
・下記でデータベースを見る
SHOW databases;
・下記でデータのテーブルを見る
SHOW tables;
11 : 完了
使ってみてください