序文 この記事では、Docker を使用して、ローカル コンピューターにインストールされている開発スイートに依存しない、高速で軽量で再現性のある Laravel および Vue プロジェクト開発環境を個人のローカル コンピューター上に構築します (開発環境のすべての依存関係は Docker ビルド コンテナーにインストールされます)。Vue が追加されているのは、一部のプロジェクトでは Laravel プロジェクトで Vue を使用してフロントエンドとバックエンドを分離して開発するためです。開発環境では、フロントエンド開発に必要なツール セットをインストールする必要があります。もちろん、フロントエンドとバックエンドを 2 つのプロジェクトに分けて開発することもできます。このトピックはこの記事の範囲外です。 私たちの目標は次のとおりです。
始める前に、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: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 注:
ウェブサービス 次に、Web サーバーを構成する必要があります。オーケストレーション ファイルでこのコンテナーに web という名前を付けます。 ウェブ: 建てる: コンテクスト: 。/ dockerfile: web.dockerfile 作業ディレクトリ: /var/www ボリューム数: - アプリ ポート: -8080:80 注:
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; } } 注:
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データ: 注:
すべてのサービスを統合する 以下は完全な 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 注:
nginx ログを表示する方法:
上記のコマンドを実行すると、http://127.0.0.1:8080/ 経由でプロジェクトにアクセスできるようになります。 参考のために、私の Github gist に参照ファイルのセットがあります https://gist.github.com/kevinyan815/fa0760902d29f19a4213b4a16fe0501b gist 内のファイルは少し古いです。その後、使用中にいくつかの新しい PHP モジュールと Node が追加されました。以前は Composer も別のコンテナーに配置されていました。しかし、これを読んだ後は、必要に応じてこれらのファイルを変更できるほど賢明であると信じています。 要約する 以上がこの記事の全内容です。この記事の内容が皆様の勉強や仕事に何らかの参考学習価値をもたらすことを願います。123WORDPRESS.COM をご愛顧いただき、誠にありがとうございます。 以下もご興味があるかもしれません:
|
<<: Ubuntu の MySQL のパラメータ ファイル my.cnf の詳細な分析
>>: Angularコンポーネントライフサイクルの詳細説明(I)
体の部位: <button>ライトのオン/オフを切り替える</button>...
ここでは、v3 のインストールと使用にのみ焦点を当てます。v2 について学びたい場合は、公式 Web...
<br />前回の記事:優秀なデザイナーの7つの原則(1):フォントデザイン 英語 原文...
CSSの記述順序1. 位置属性(位置、上、右、z-index、表示、フロートなど) 2. サイズ(...
序文MySQL には次の 4 種類の演算子があります。算術演算子比較演算子論理演算子ビット演算子これ...
以下は、docker の golang イメージに基づいて ssh サービスを構築するためのコードで...
目次1. 需要2. 実装3. 結果1. 需要入力ボックスにデータを入力し、入力結果に基づいてデータベ...
まず、私の日常生活についてお話しします。MySQLの急速なアップデートにより、MySQLはバージョン...
序文クエリの最適化は一夜にして達成できるものではありません。対応するツールの使い方を学び、他の人の経...
オーディオおよびビデオ ファイルを保存するためのディスク寿命を延ばすには、ディスクをフォーマットする...
この記事では、カスタムツリーコンポーネントを再帰的に実装するVueの具体的なコードを参考までに共有し...
1. 概要Redis Cluster は、Redis ノードのグループ間での高可用性とシャーディング...
目次1 設定ディレクトリとデータディレクトリを作成する3 イメージからホストに構成ファイルをコピーす...
目次序文デモンストレーション効果HTMLコードCSSコードJavascriptコードデモアドレス序文...
目次ユーザー管理新しいユーザーを作成するユーザー名の変更ユーザーのパスワードを設定するルートパスワー...