あるlaravel5のプロジェクトをGitHubからcloneして、docker上で動かした時の手順です。
docker-composeを使って、nginx+mysqlでlaravel開発環境を作成しています。
環境
macOS Monterey
docker desktop 4.5.0
docker 20.10.12
docker-compose 1.29.2
php 7.4.29
laravel/framework 5.8.38
前提
- docker desktopがインストール済み、起動済みで、docker、docker-composeが使える状態
手順
1. githubからlaravelプロジェクトをclone
git clone [リポジトリのURL]
今回cloneしたのは、とあるlaravel5.8のプロジェクトです。
プロジェクトのディレクトリ構成は以下となります。srcディレクトリがプロジェクトのルートディレクトリです。
./src
├── app
├── bootstrap
├── config
├── database
├── packages
├── public
├── resources
├── routes
├── storage
└── tests
2. Docker環境構築
最終的に以下の構成になります。
dockerディレクトリ配下のファイルとdocker-compose.ymlを作成していきます。
./project
├── docker
│ └── php
│ │ ├── Dockerfile
│ │ └── php.ini
│ ├── nginx
│ │ └── default.conf
├── src //laravelプロジェクトのルートディレクトリ
│ ├── app
│ ├── bootstrap
│ ├── config
│ ├── database
│ ├── packages
│ ├── public
│ ├── resources
│ ├── routes
│ ├── storage
│ └── tests
├── docker-compose.yml
Dockerfile
FROM php:7.4-fpm
COPY php.ini /usr/local/etc/php/
RUN apt update \
&& apt install -y zlib1g-dev mariadb-client vim libzip-dev unzip nodejs npm\
&& docker-php-ext-install zip pdo_mysql
RUN echo 'alias la="ls -la"' >> ~/.bashrc
RUN echo 'alias ll="ls -la"' >> ~/.bashrc
RUN echo 'alias rm="rm -i"' >> ~/.bashrc
RUN echo 'alias cp="cp -i"' >> ~/.bashrc
RUN echo 'alias mv="mv -i"' >> ~/.bashrc
#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
PHP設定ファイル
[Date]
date.timezone = "Asia/Tokyo"
[mbstring]
mbstring.internal_encoding = "UTF-8"
mbstring.language = "Japanese"
nginx設定ファイル
server {
listen 80;
index index.php index.html;
root /var/www/public;
location / {
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-compose.yml
version: '3'
services:
php:
container_name: php
build: ./docker/php
volumes:
- ./src:/var/www
nginx:
image: nginx
container_name: nginx
ports:
- 80:80
volumes:
- ./src:/var/www
- ./docker/nginx/default.conf:/etc/nginx/conf.d/default.conf
depends_on:
- php
mysql:
image: mysql:5.7
container_name: mysql
environment:
MYSQL_ROOT_PASSWORD: root
MYSQL_DATABASE: sample_db
MYSQL_USER: docker
MYSQL_PASSWORD: docker
TZ: 'Asia/Tokyo'
command: mysqld --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
volumes:
- ./docker/db/data:/var/lib/mysql
- ./docker/db/my.cnf:/etc/mysql/conf.d/my.cnf
- ./docker/db/sql:/docker-entrypoint-initdb.d
ports:
- 3306:3306
3. Docker起動
//docker-compose.ymlを置いたディレクトリに移動
cd project
// Docker 起動
docker-compose up -d
4. laravelの設定
.envファイルを作成
src/.env.example をコピーしてsrc/.envを作成し、DB設定を、docker-compose.ymlのmysqlでの設定に合わせて変更する。
DB_HOST=mysql //docker-compose.ymlの定義に合わせる。
DB_DATABASE=sample_db //docker-compose.ymlのmysql.environment.MYSQL_DATABASEの値を設定
DB_USERNAME=hoge //docker-compose.ymlのmysql.environment.MYSQL_USERの値を設定
DB_PASSWORD=hoge //docker-compose.ymlのmysql.environment.MYSQL_PASSWORDの値を設定
以降はphpコンテナに入って作業
// phpコンテナに入る
docker-compose exec php bash
// ここでcomposer updateしている理由は、補足説明(*1)を参照してください
composer update
// Composerのパッケージのインストール
composer install
// APP_KEYを更新
php artisan key:generate
// テーブルを作成
php artisan migrate
// npmでパッケージをインストール
npm install
// Laravel-Mixのビルド(開発環境なのでdevを指定)
npm run dev
(*1)私がcloneしたプロジェクトは、composer installすると、「In PackageManifest.php line 122: Undefined index: name」というエラーが出たため、その対応としてここでcomposer updateをしています。
以下の記事を参考にさせていただきました。
https://monmon.jp/536/in-a-composer-install-of-laravel-in-packagemanifest-php-line-122-undefined-index-name-undefined-index/
5. 確認
http://localhost/
にアクセスして、トップ画面が表示されることを確認します。
docker-composeのコマンドまとめ
開発時に使いそうなコマンドをまとめておきます。
- docker-compose.ymlを元にコンテナを作成、起動
// コンテナを作成して起動する。オプション-dをつけることでバックグラウンドで実行できる。
docker-compose up -d
// オプションで--buildをつけると起動前にイメージも構築する。
docker-compose up -d --build
- phpコンテナに入る
docker-compose exec php bash
- mysqlコンテナに入る
docker exec -it mysql bash
mysql -u [DBユーザー] -p
Enter password: [パスワード]
- サービスの起動と停止
// 起動(止まっているコンテナを起動するだけであり、新しいコンテナは作成しません。)
docker-compose start
// 停止
docker-compose stop
参考記事
https://chigusa-web.com/blog/laravel-github-clone/
https://qiita.com/A-Kira/items/1c55ef689c0f91420e81
https://qiita.com/wasanx25/items/d47caf37b79e855af95f