Dockerを使用してLaravelおよびVueプロジェクトの開発環境を構築する詳細な説明

Dockerを使用してLaravelおよびVueプロジェクトの開発環境を構築する詳細な説明

この記事では、Docker で構築された Laravel および Vue プロジェクトの開発環境を紹介し、皆さんと共有します。詳細は次のとおりです。


この記事では、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 つのコンテナーを使用して、 PHPMysql、 Nginx放在四個不同的容器中,通過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 はenvironment変数名を設定します。ここではDB_PORTDB_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_fromappサービスで定義されたデータボリュームパスを再利用するために使用されます。
  • portsを使用して、ローカル コンピューターのポート 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 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 つのパラメータは、 environmentsで設定されます。
  • portsマッピングでは、ローカル コンピューターのポート 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開発環境を構築するための完全な手順
  • dockerでlaravel開発環境をインストールする方法の詳細な説明
  • 4つのWindowsシステムにおけるLaravelフレームワーク開発環境のインストールと展開方法を詳細に解説

<<:  node.js グローバル変数の具体的な使用法

>>:  MySQLマスタースレーブデータベース構築方法の詳細な説明

推薦する

React プロジェクトにおける axios カプセル化と API インターフェース管理の詳細な説明

目次序文インストール導入環境の切り替え傍受を要求するレスポンスインターセプションAPIの統合管理要約...

自動的にフォーカスを取得する要素入力ボックスの実装

最近のプロジェクトでフォームを作成するときに、コメント ボックスまで自動的にスクロールし、コメント ...

Nginx ドメイン名 SSL 証明書の構成 (Web サイトの http を https にアップグレード)

序文HTTP と HTTPS日常生活でよく使われる URL は、おおまかに次の 2 種類に分けられま...

MySQLデータベースの追加、削除、変更操作の詳細な説明

データの挿入テーブル名(列名1、列名2、列名3)の値(値1、値2、値3)に挿入します。ユーザーに(u...

JavaScript 操作要素の例

操作要素の詳細については、前回の記事を参照してください。JavaScript WebAPI、DOM、...

MySQL 8.0.15 winx64 のインストールと設定方法のグラフィックチュートリアル (Windows の場合)

この記事では、MySQL 8.0.15 winx64のインストールと設定方法を参考までに紹介します。...

InnoDB テーブルの BLOB 列と TEXT 列のストレージ効率を最適化します。

まず、MySQL InnoDB エンジンのストレージ形式に関する重要なポイントをいくつか紹介します。...

最新の超詳細な VMware 仮想マシンのダウンロードとインストールのグラフィック チュートリアル

目次1. 仮想マシンをダウンロードする2. 仮想マシンのインストールVMware のダウンロードとイ...

WeChat アプレット ピッカー マルチ列セレクター (モード = multiSelector)

目次1. 効果図(複数列) 2. 通常セレクター: mode = selector、複数列セレクター...

MySQL のスローログオンラインの問題と最適化ソリューション

MySQL スロー ログは、MySQL DBA やその他の開発および運用担当者が細心の注意を払う必要...

CentOS8.1 で Gitlab サーバーを構築するための詳細なチュートリアル

Gitlab と Github の違いについては、あまり説明する必要はありません。一言でまとめると、...

Kubernetes を使用して Springboot または Nginx をデプロイするための詳細なチュートリアル

1 はじめに「Maven がワンクリックで Springboot を Docker リポジトリにデプ...

HTML TextArea でのフォーマット保存の問題の解決方法

textarea の形式は保存時にデータベースに保存できますが、表示時には /n と相互に変換できな...

IE6のバグと修正は予防戦略です

元記事:究極の IE6 チートシート: 25 以上の Internet Explorer 6 のバグ...

JavaScript でじゃんけんゲームを書く

この記事では、JavaScriptでじゃんけんゲームを書くための具体的なコードを参考までに紹介します...