Dockerを使用してLaravel開発環境を構築するための完全な手順

Dockerを使用してLaravel開発環境を構築するための完全な手順

序文

この記事では、Docker を使用して、ローカル コンピューターにインストールされている開発スイートに依存しない、高速で軽量で再現性のある Laravel および Vue プロジェクト開発環境を個人のローカル コンピューター上に構築します (開発環境のすべての依存関係は Docker ビルド コンテナーにインストールされます)。Vue が追加されているのは、一部のプロジェクトでは Laravel プロジェクトで Vue を使用してフロントエンドとバックエンドを分離して開発するためです。開発環境では、フロントエンド開発に必要なツール セットをインストールする必要があります。もちろん、フロントエンドとバックエンドを 2 つのプロジェクトに分けて開発することもできます。このトピックはこの記事の範囲外です。

私たちの目標は次のとおりです。

  • Mamp/Wampのようなソフトウェアをローカルにインストールしないでください
  • Vagrantのような仮想マシンは使用しないでください
  • PHP開発に必要なツールセットをローカルコンピュータにグローバルにインストールしないでください。
  • フロントエンド開発に必要なツールセットをローカルコンピュータにグローバルにインストールしないでください。
  • ローカルコンピュータにMysqlとNginxをグローバルにインストールしないでください

始める前に、Docker クライアントをインストールする必要があります。Docker の公式 Web サイトに詳細なインストール手順が記載されています。

ステップ1: Laravelソースパッケージを取得する

Composer がコンピューターにインストールされていないため、Composer を使用して Laravel プロジェクトを作成することはできません。ここでは cURL を使用して、最新の Laravel ソース コード パッケージを GitHub から直接ダウンロードします。wget または git clone を使用してソース コード パッケージを取得することもできます。

curl -L -O https://github.com/laravel/laravel/archive/v5.5.0.tar.gz /
&& tar -zxvf v5.5.0.tar.gz /
&& rm v5.5.0.tar.gz

上記のコマンドは、curl がソース コード パッケージをダウンロードした後に解凍します。解凍後、ソース コード パッケージ v5.5.0.tar.gz を削除します。実行後、laravel-5.5.0 プロジェクト ディレクトリが表示されます。

ステップ2: docker-compose.ymlを追加する

プロジェクトに docker-compose.yml ファイルを作成します。

Compose プロジェクトは、Docker コンテナ クラスターの迅速なオーケストレーションを実現することを目的とした、Docker の公式オープン ソース プロジェクトです。 Dockerfile テンプレート ファイルを使用すると、ユーザーは個別のアプリケーション コンテナーを簡単に定義できることがわかっています。ここでは、4 つのコンテナーを使用して、PHP、Mysql、Nginx を 4 つの異なるコンテナーに配置し、Compose を通じて 4 つのアプリケーション コンテナーを関連付けてプロジェクトを形成します。
レイアウト ファイルの冒頭は次のようになります。

バージョン: '2'
サービス:
  # 私たちのサービスはここにあります

オーケストレーション ファイルでは、各コンテナーはサービスと呼ばれ、アプリケーション全体で使用されるすべてのサービス (つまりコンテナー) はサービスの下に定義されます。

アプリサービス

APP サービスのコンテナーはプロジェクト内のコードを実行します。

アプリ:
 建てる:
  コンテクスト: 。/
  dockerfile: app.dockerfile
 作業ディレクトリ: /var/www
 ボリューム:
  - ./:/var/www
 環境:
  - 「DB_PORT=3306」
  - 「DB_HOST=データベース」

注:

  • アプリ コンテナを構築するには、イメージ ファイル app.dockerfile を使用します。イメージ ファイルでは、プロジェクトで使用される PHP モジュール イメージを構成し、フロントエンド コードをビルドするための NPM もインストールします。
  • working_dir: /var/www は作業ディレクトリを /var/www に設定します。コンテナでは、プロジェクト コードは /var/www ディレクトリに配置されます。これには、docker exec app を使用して実行されるコマンドも含まれます。これらのコマンドも /var/www を現在の作業ディレクトリとして使用します。
  • Volumes は、コンテナ内のデータ ボリュームをマウントするためのパス設定です。ここでは、データ ボリュームを 1 つだけ定義し、ホスト プロジェクト ディレクトリをコンテナ内の /var/www にマウントします。このようにして、ローカル コンピュータ上のプロジェクト コードに加えた変更は、すぐにコンテナに同期され、その逆も同様です。コンテナ内のコードに加えた変更も、ローカル コンピュータ上のプロジェクトにすぐにフィードバックされます。
  • environment は環境変数名を設定します。ここでは DB_PORT と DB_HOST を設定して、プロジェクト内の .env ファイルでこれら 2 つの項目の値を変更する必要がないようにしています。もちろん、開発環境で別途設定する必要がある環境変数はここに記述できます。Laravel が設定の読み取りに使用する DotEnv は、システムに指定された環境変数設定があるかどうかを検出します。ある場合は、.env ファイルを読み取りません。

ここで、上記のビルド手順で説明した app.dockerfile ファイルを作成する必要があります。具体的な内容は次のとおりです。

php:7.1.22-fpm より

# パッケージの更新
apt-get updateを実行する

# PHPとcomposerの依存関係をインストールする
apt-get install -qq git curl libmcrypt-dev libjpeg-dev libpng-dev libfreetype6-dev libbz2-dev を実行します。

# 取得したパッケージファイルのローカルリポジトリをクリアする
# apt-get clean を実行する

# 必要な拡張機能をインストールする
# ここで、テストおよび展開プロセス中に必要なその他の拡張機能をインストールできます
apt-get clean; docker-php-ext-install pdo pdo_mysql mcrypt zip gd pcntl opcache bcmath を実行します。


# PHP 依存関係を簡単に管理できるように Composer をインストールします。
curl --silent --show-error https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer を実行します。

# ノードをインストールする
apt-get update を実行 &&\
  apt-get install -y --no-install-recommends gnupg &&\
  curl -sL https://deb.nodesource.com/setup_10.x | bash - &&\
  apt-get アップデート &&\
  apt-get install -y --no-install-recommends nodejs &&\
  npm config レジストリを設定します https://registry.npm.taobao.org --global &&\
  npm インストール --global gulp-cli

コマンドphp-fpm

注:

  • まず、開発中に必要になることが多い NPM と Composer をアプリ コンテナーにインストールしました。本番環境にリリースする場合は、アプリケーションを実行するコンテナーにプロジェクト コードを配置するのではなく、別の Composer を使用してプロジェクト コードをビルドするのが一般的です。コンテナーの中心的なアイデアの 1 つは、コンテナーを単一に保つことです。これにより、同じ役割を持つコンテナーをすばやく追加できます。

ウェブサービス

次に、Web サーバーを構成する必要があります。オーケストレーション ファイルでこのコンテナーに web という名前を付けます。

ウェブ:
 建てる:
  コンテクスト: 。/
  dockerfile: web.dockerfile
 作業ディレクトリ: /var/www
 ボリューム数:
  - アプリ
 ポート:
  -8080:80

注:

  • volumes_from は、アプリサービスで定義されたデータボリュームパスを再利用するために使用されます。
  • ポートを使用して、ローカル コンピューターのポート 8080 を Web コンテナーのポート 80 にマップします。この方法では、開発環境でホスト ファイルを設定する必要がなく、IP とポートを介して直接サービスにアクセスできます。

Web サーバーは nginx を使用するため、このコンテナーを構築するには nginx イメージ ファイルを使用する必要があります。その前に、nginx イメージに基づいてプロジェクトで使用する vhost を設定する必要があるため、次のように定義される web.dockerfile ファイルが必要です。

nginx:1.10から

vhost.conf に /etc/nginx/conf.d/default.conf を追加します。

イメージファイルの定義に従って、プロジェクト内の vhost.conf をコンテナの /etc/nginx/conf.d/default.conf にコピーし、基本的な nginx 構成を構成しました。vhost.conf 内の定義は次のとおりです。

サーバー{
  聞く 80;
  インデックス index.php index.html;
  ルート /var/www/public;

  位置 / {
    try_files $uri /index.php?$args;
  }

  場所 ~ \.php$ {
    fastcgi_split_path_info ^(.+\.php)(/.+)$;
    fastcgi_passアプリ:9000;
    fastcgi_index インデックス.php;
    fastcgi_params を含めます。
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    fastcgi_param PATH_INFO $fastcgi_path_info;
  }
}

注:

  • 開発環境のため、最もシンプルな構成のみ実行し、チューニングは考慮しません。
  • fastcgi_pass app:9000; nginx は fastcgi を介して PHP のリクエストを app サービスのポート 9000 に渡します。Docker-compose はサービスで定義されたコンテナー サービスに自動的に接続し、各サービスはサービス名で参照されます。

MySQL サービス

次に、Mysql サービスを設定します。上記の 2 つのサービスと少し異なるのは、PHP-FPM および Nginx コンテナーでは、コンテナー アクセスのためにローカル コンピューター上のファイルをコンテナーに同期するように設定することです。これにより、開発中にファイルに変更を加えたときにコンテナー内ですぐにフィードバックが得られるため、開発プロセスがスピードアップします。ただし、データベース コンテナーでは、コンテナー内に作成されたファイルを永続化できることを期待しています (既定のコンテナーが破棄されると、コンテナー内に作成されたファイルも破棄されます)。Docker のデータ ボリュームを通じて上記の機能を実現できますが、今度はローカル コンピューター上のファイルをデータ ボリュームにマウントする必要がなくなりました。Docker クライアントは、作成されたデータ ボリュームのローカル コンピューター上の特定の保存場所を管理します。
以下はオーケストレーションファイル内のデータベースサービスの設定です。

バージョン: '2'
サービス:

 データベース:
  イメージ:mysql:5.7
  ボリューム:
   -dbdata:/var/lib/mysql
  環境:
   - "MYSQL_DATABASE=ホームステッド"
   - "MYSQL_USER=homestead"
   - "MYSQL_PASSWORD=シークレット"
   - "MYSQL_ROOT_PASSWORD=シークレット"
  ポート:
    - 「33061:3306」

ボリューム:
 dbデータ:

注:

  • ファイルの下部では、volumes コマンドを使用して dbdata という名前のデータ ボリュームを作成しました (dbdata の後のコロンは意図的です。これは YML ファイルの構文制限であり、心配する必要はありません)。
  • データ ボリュームを定義した後、上記の <name>:<dir> の形式を使用して、コンテナ内の /var/lib/mysql ディレクトリに dbdata データ ボリュームをマウントするように Docker に通知します。
  • MySQL Docker イメージに必要な 4 つのパラメータが環境に設定されます。
  • ポート マッピングでは、ローカル コンピューターのポート 33061 をコンテナーのポート 3306 にマッピングして、コンピューター上のデータベース ツールを介して docker 内の Mysql に接続できるようにします。

すべてのサービスを統合する

以下は完全な docker-compose.yml ファイルです。オーケストレーション ファイルを通じて、3 つのアプリケーション コンテナーを関連付けて、プロジェクトのサーバーを形成します。

バージョン: '2'
サービス:

 # アプリケーション
 アプリ:
  建てる:
   コンテクスト: 。/
   dockerfile: app.dockerfile
  作業ディレクトリ: /var/www
  ボリューム:
   - ./:/var/www
  環境:
   - 「DB_PORT=3306」
   - 「DB_HOST=データベース」

 # Webサーバー
 ウェブ:
  建てる:
   コンテクスト: 。/
   dockerfile: web.dockerfile
  作業ディレクトリ: /var/www
  ボリューム数:
   - アプリ
  ポート:
   -8080:80

 # データベース
 データベース:
  イメージ:mysql:5.6
  ボリューム:
   -dbdata:/var/lib/mysql
  環境:
   - "MYSQL_DATABASE=ホームステッド"
   - "MYSQL_USER=homestead"
   - "MYSQL_PASSWORD=シークレット"
   - "MYSQL_ROOT_PASSWORD=シークレット"
  ポート:
    - 「33061:3306」

ボリューム:
 dbデータ:

サービスを開始する

上記の手順に従ってオーケストレーション ファイルと指定した Docker イメージ ファイルを設定したら、次のコマンドでサービスを開始できます。実行すると、上記のファイルに定義されている 3 つのサービスが開始されます。

docker-compose を起動 -d

初めて起動する場合、Docker クライアントは上記の 3 つのイメージをダウンロードしてサービスをビルドする必要があるため、起動が遅くなります。イメージのダウンロードとビルドが完了すると、以降の起動は非常に高速になります。

Laravelプロジェクトの初期化

サービスを開始したら、Laravel プロジェクトを初期化できます。手順は公式ドキュメントに記載されているものと同じですが、開始したアプリ サービスのコンテナーで実行する必要があります。

docker-compose exec アプリ composer インストール
docker-compose exec app npm install // フロントエンドプロジェクトが含まれている場合は、関連するコマンドを実行します docker-compose exec app cp .env.example .env
docker-compose exec app php artisan キー:生成
docker-compose exec アプリ php artisan 最適化
docker-compose exec app php artisan migrate --seed
docker-compose exec app php artisan make:controller MyController

注:

  • docker-compose execは指定されたコンテナにコマンドを送信して実行します。
  • appはdocker-compose.ymlで定義されたサービスであり、php-fpmを実行するコンテナです。
  • php artisan migrateはコンテナ内で実行されるコマンドです

nginx ログを表示する方法:

  • docker ps nginxサービスのコンテナIDを見つける
  • docker exec -it <コンテナID> /bin/bash を実行してnginxコンテナに入ります
  • nginx ログの具体的なパスについては、プロジェクト内の vhost.conf を確認してください。

上記のコマンドを実行すると、http://127.0.0.1:8080/ 経由でプロジェクトにアクセスできるようになります。

参考のために、私の Github gist に参照ファイルのセットがあります https://gist.github.com/kevinyan815/fa0760902d29f19a4213b4a16fe0501b

gist 内のファイルは少し古いです。その後、使用中にいくつかの新しい PHP モジュールと Node が追加されました。以前は Composer も別のコンテナーに配置されていました。しかし、これを読んだ後は、必要に応じてこれらのファイルを変更できるほど賢明であると信じています。

要約する

以上がこの記事の全内容です。この記事の内容が皆様の勉強や仕事に何らかの参考学習価値をもたらすことを願います。123WORDPRESS.COM をご愛顧いただき、誠にありがとうございます。

以下もご興味があるかもしれません:
  • Git を使用して Laravel プロジェクトを新しい開発環境に移行する詳細な手順
  • Dockerを使用してLaravelおよびVueプロジェクトの開発環境を構築する詳細な説明
  • dockerでlaravel開発環境をインストールする方法の詳細な説明
  • 4つのWindowsシステムにおけるLaravelフレームワーク開発環境のインストールと展開方法を詳細に解説

<<:  Ubuntu の MySQL のパラメータ ファイル my.cnf の詳細な分析

>>:  Angularコンポーネントライフサイクルの詳細説明(I)

推薦する

js を使用してシンプルなスイッチ ライト コードを実装する

体の部位: <button>ライトのオン/オフを切り替える</button>...

Element UI をインストールして vue3.0 でベクター グラフィックスを使用する方法

ここでは、v3 のインストールと使用にのみ焦点を当てます。v2 について学びたい場合は、公式 Web...

熟練デザイナーの7つの原則(2):色の使い方

<br />前回の記事:優秀なデザイナーの7つの原則(1):フォントデザイン 英語 原文...

CSS の記述基準と順序を共有する [すべての人に使用を推奨]

CSSの記述順序1. 位置属性(位置、上、右、z-index、表示、フロートなど) 2. サイズ(...

MySql における特殊演算子の使用の概要

序文MySQL には次の 4 種類の演算子があります。算術演算子比較演算子論理演算子ビット演算子これ...

docker で golang イメージに基づいて ssh サービスを構築する方法

以下は、docker の golang イメージに基づいて ssh サービスを構築するためのコードで...

Vue はファジークエリを実装します - MySQL データベースデータ

目次1. 需要2. 実装3. 結果1. 需要入力ボックスにデータを入力し、入力結果に基づいてデータベ...

mysql8.0.11 winx64 手動インストールと設定チュートリアル

まず、私の日常生活についてお話しします。MySQLの急速なアップデートにより、MySQLはバージョン...

MySQLクエリ最適化に必須の知識ポイントのまとめ

序文クエリの最適化は一夜にして達成できるものではありません。対応するツールの使い方を学び、他の人の経...

Linux システムの busybox に mkfs.vfat コマンドを移植する

オーディオおよびビデオ ファイルを保存するためのディスク寿命を延ばすには、ディスクをフォーマットする...

Vueはカスタムツリーコンポーネントを再帰的に実装します

この記事では、カスタムツリーコンポーネントを再帰的に実装するVueの具体的なコードを参考までに共有し...

docker ベースの redis-sentinel クラスターの構築例

1. 概要Redis Cluster は、Redis ノードのグループ間での高可用性とシャーディング...

Docker ケース分析: MySQL データベース サービスの構築

目次1 設定ディレクトリとデータディレクトリを作成する3 イメージからホストに構成ファイルをコピーす...

HTML+JS に基づくシンプルな年齢計算ツールの実装

目次序文デモンストレーション効果HTMLコードCSSコードJavascriptコードデモアドレス序文...

MySQLでユーザーを作成し、ユーザーに権限を付与する方法の詳細なチュートリアル

目次ユーザー管理新しいユーザーを作成するユーザー名の変更ユーザーのパスワードを設定するルートパスワー...