LoginSignup
5
13

More than 1 year has passed since last update.

Dockerでlaravel・mysqlの環境構築 初心者向け(2023年ver)

Last updated at Posted at 2023-04-26

dockerの特徴はなんといっても、ものの数時間で環境構築ができる!ということです。ですがdockerの知識がない人・プログラミング初心者はなかなか手こずると思います。

実際、私もdockerの環境構築に10日間もかかりました笑
今回は初心者向けにdocker環境構築の方法を書きます。

とにかく、ポートフォリオを作ってみたい!という人は参考にしてください。

参考にしたサイト
https://maasaablog.com/development/backend/php/laravel/758/#toc7

docker コンテナ、イメージ等を知りたい方は以下の動画を一通り見てもらえば理解できます。

環境構築手順

①docker desktopをインストール!

https://www.docker.com/products/docker-desktop
上のURLから、自身のosに合わせたものをダウンロードしてください。

②docker desktopを起動

③VScodeで以下のディレクトリ構造でファイルを作成。

 
スクリーンショット 2023-04-26 160343.png

④それぞれのファイルにコードを記入していく

/nginx/default.conf

server {
  listen 8000;
  root /var/www/my-app/public;
  error_log /var/log/nginx/error.log warn;
  index index.php index.html;

  location / {
    try_files $uri $uri/ /index.php?$query_string;
  }
  location ~ \.php$ {
    try_files $uri =404;
    fastcgi_split_path_info ^(.+\.php)(/.+)$;
    fastcgi_pass app-dl:9000; 
    fastcgi_index index.php;
    include fastcgi_params;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    fastcgi_param PATH_INFO $fastcgi_path_info;
  }
 }

/php/Dockerfile

# https://hub.docker.com/_/phpにあるイメージファイルを指定
FROM php:8.0-fpm

# RUNコマンドは、buildしたときに元となるdockerイメージに対して実行する処理を記述する。
# \(バックスラッシュ)を用いて、複数行に分けることが可能。
# パッケージ一覧を更新
RUN apt update \
    # zlibはデータの圧縮に関するアルゴリズムをライブラリ化したもの
    # vimをインストール
    # MariaDBデータベースのクライアントアプリケーションである「mysql」を使えるように「mariadb-client」をインストール
    # libzip-devはzip圧縮時に必要となるライブラリ(libzip は、zlib を使用する)
    && apt install -y zlib1g-dev mariadb-client vim libzip-dev \
    # docker-php-ext-installはPHPに標準で備わっている拡張パッケージのインストール&有効化ができるコマンド
    # PDO_MYSQL は、PHP から MySQL データベースへのアクセスを可能にするための PHP Data Objects (PDO) インターフェイス を実装したドライバ。
    && docker-php-ext-install zip pdo_mysql \
    # gitのインストール
    && apt install -y git \
    # xdebugのインストール
    && pecl install xdebug \
    && docker-php-ext-enable xdebug
    
# Composerのインストール & パス通す
COPY --from=composer:latest /usr/bin/composer /usr/bin/composer

# nodeインストール(aptだとNodejsは古いため、パッケージマネージャの n を使用してインストール)
RUN apt install -y npm \
    && npm install n -g \
    && n stable

# RUN , CMD , ENTRYPOINT , COPY , ADD を実行する時のワーキングディレクトリを指定
WORKDIR /var/www

/php/php.ini

[Date]
date.timezone = "Asia/Tokyo"
[mbstring]
mbstring.internal_encoding = "UTF-8"
mbstring.language = "Japanese"
[PHP]
display_errors = On
memory_limit = 500M
upload_max_filesize = 500M
post_max_size = 500M

[xdebug]
xdebug.mode = debug
xdebug.start_with_request = yes
xdebug.client_host = "host.docker.internal"
xdebug.client_port = 9012
xdebug.log = "/var/log/xdebug.log"

.env

IP=127.0.0.1
WEB=80
DB=3306

docker-compose.yml

このファイルは、インテンドも重要なので間違えないようにコピーしてください。
参考サイト

{
  "version": "3.8",
  "services": {
     "app-dl": {
      "container_name": "app-dl",
      "build": "./docker/php",
      "volumes": [
        "./:/var/www",
        "./docker/php/php.ini:/usr/local/etc/php/php.ini",
        "./log:/var/log"
      ]
    },
    "web-dl": {
      "container_name": "nginx-dl",
      "image": "nginx"
      ,
      "ports": [
        "${WEB:-80}:8000"
      ],
      "volumes": [
        "./:/var/www",
        "./docker/nginx/default.conf:/etc/nginx/conf.d/default.conf"
      ]
    },
     
    "db-dl": {
      "image": "mysql:latest",
      "container_name": "db-dl",
      "environment": {
        "MYSQL_ROOT_PASSWORD": "root",
        "MYSQL_DATABASE": "sample_db",
        "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",
        ".R/docker/db/sql:/docker-entrypoint-initdb.d"
      ],
      "ports": [
        "${DB:-3306}:3306"
      ]
    },
    "phpmyadmin-dl": {
      "image": "phpmyadmin/phpmyadmin",
      "container_name": "phpmyadmin-dl",
      "environment": [
        "PMA_ARBITRARY=1",
        "PMA_HOST=db-dl",
        "PMA_USER=root",
        "PMA_PASSWORD=root"
      ],
      "links": [
        "db-dl"
      ],
      "ports": [
        "8580:80"
      ],
      "volumes": [
        "/sessions"
      ]
    },
    "mailcatcher-dl": {
      "image": "schickling/mailcatcher",
      "ports": [
        "1080:1080"
      ]
    }
  }
}

④docker imageをビルド

docker-compose.ymlファイルがあるディレクトリと同じ階層に行き、ターミナルにてビルドコマンドを実行します。

ディレクトリの移動には、LINUXのコマンドを使用します。今後も使用するのでぜひ覚えてください。

ディレクトリの移動

cd docker-laravel

docker imageのビルド

docker-compose build

⑤dockerコンテナの起動

docker-compose up -build

⑥laravelプロジェクトの作成

laravelプロジェクトは、MVCモデルのアプリを作るのに必要なファイルがあるフォルダのことです。それを作成することによって、スムーズにアプリを作成することができます。

laravelプロジェクトについて参考サイト
https://nebikatsu.com/7452.html/

laravelプロジェクトを作るには、まずphpコンテナに入る必要があります。

docker-compose exec app-dl bash

コンテナに入ることができれば、ターミナルが以下のように変わります

root@~:/var/www#

ターミナルが変わったら、laravelのプロジェクトを作成するために以下のコマンドを入力します。

composer create-project laravel/laravel my-app

なかなか時間がかかるので、プロジェクトができるまで待ってください。

プロジェクトができたら、ブラウザからhttp://localhost:8000/or
http://localhost:80/ にアクセスをしてください。

laravelプロジェクトが正常にできた場合は以下のような画面になります。

34-999.jpg

この画面が表示されたら、作成が完了しています。続いて、DBの接続を行います。

DBとの接続

①ワーキングディレクトリに移行
cd my-app

②.envファイルを修正
DB_CONNECTION=mysql
# mysqlコンテナのサービス名(✖︎container_name)
DB_HOST=db
DB_PORT=3306
# ymlファイルのMYSQL_DATABASEと合わせる
DB_DATABASE=test_db
DB_USERNAME=root
DB_PASSWORD=root

dockerで環境構築できたでしょうか?
ぜひ、手短にdockerで環境を作り、コードを書いていきましょう!

5
13
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
5
13