4
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

GitHubからcloneしたLaravel プロジェクトをDockerで動かす

Posted at

ある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

docker/php/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設定ファイル

docker/php/php.ini
[Date]
date.timezone = "Asia/Tokyo"
[mbstring]
mbstring.internal_encoding = "UTF-8"
mbstring.language = "Japanese"

nginx設定ファイル

docker/nginx/default.conf
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

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での設定に合わせて変更する。

src/.env
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

4
3
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
4
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?