DockerでLaravelとVueプロジェクトの開発環境を構築する
9272 ワード
この記事では、Dockerを介して、ローカルコンピュータにインストールされている任意の開発キットに依存しない高速で軽量なレプリケーション可能なLaravelおよびVueプロジェクトの開発環境(開発環境のすべての依存はDockerコンストラクタにインストールされている)を構築します.Vueを追加するのは、LaravelプロジェクトでVueを使用して前後の分離開発を行うプロジェクトがあるためです.開発環境ではフロントエンド開発に必要なツールセットをインストールする必要があるが,もちろん前後端を2つのプロジェクトに分けて開発することもできるが,この話題は本論文の議論の範囲外である.
私たちの目標は Mamp/Wampのようなソフトウェアをローカルにインストールしない Vagrantのような仮想マシンを使用しない ローカルコンピュータにPHP開発に必要なツールセット をグローバルにインストールしないローカルコンピュータにフロントエンド開発に必要なツールセット をグローバルにインストールしない.ローカルコンピュータにMysqlとNginx をグローバルにインストールしない
始める前にDockerクライアントをインストールする必要があります.Dockerの公式サイトには詳細なインストール方法があります.
ステップ1:Laravelのソースパッケージを取得する
私たちのパソコンにはComposerがインストールされていないので、Composerを使ってLaravelプロジェクトを作成することはできません.ここではcURLを使ってgithubから最新のLaravelソースパッケージを直接ダウンロードしました.wgetやgit cloneを使ってソースパッケージを取得することもできます.
ステップ2:docker-composeを追加します.yml
プロジェクトに
編成ファイルの先頭は次のとおりです.
Appサービス
APPサービスのコンテナは、私たちのプロジェクトのコードを実行します. 次に、上記のbuildセクションで説明した私はここでまずNPMとComposerをappコンテナに入れました.開発時に常に実行する必要があるためです.生産環境に公開されると、アプリケーションを実行するコンテナではなく、プロジェクトコードを個別のcomposerで構築するのが一般的です.コンテナの核心思想の一つは、同じ役割のコンテナを迅速に増やすことです. Webサービス
次に、このコンテナを編成ファイルに を多重化するために使用される.ローカルコンピュータの8080ポートを 開発環境なので、私たちは最も簡単な構成だけを行い、チューニングをしないで考えています. Mysqlサービス
次にMysqlサービスを構成します.上記の2つのサービスとは少し違います.PHP-FPMとNginxのコンテナでは、ローカルコンピュータのファイルをコンテナに同期してアクセスできるように構成しています.これにより、開発時にファイルの変更を迅速にコンデンサでフィードバックすることができ、開発プロセスを速めることができます.ただし、データベースコンテナで作成したファイルを永続化したい(デフォルトのコンテナが破棄されると、コンテナ内で作成したファイルも破棄される)ので、Dockerのデータボリュームで上記の機能を実現できますが、今回はローカルコンピュータのファイルをデータボリュームに掛ける必要はありません.Dockerクライアントは、作成したデータボリュームのローカルコンピュータに具体的に格納されている場所を管理します.
次は、ファイルのレイアウトにおけるdatabaseサービスの設定です.ファイルの一番下に データボリュームを定義した後、 に掛けるように通知します. すべてのサービスを統合
次は完全な
上記の手順に従ってファイルを編成し、指定したdockerミラーファイルを構成すると、次のコマンドでサービスを起動できます.実行後、上記のファイルで定義した3つのサービスが起動します.
Laravelプロジェクトの初期化
サービスを開始するとLaravelプロジェクトを初期化できます.手順は公式ドキュメントで説明したようになりますが、起動したappサービスのコンテナで実行する必要があります. docker-compose execは、 を実行するために指定されたコンテナにコマンドを送信する. appはdocker-composeに定義されている.ymlのサービスで、php-fpmを実行するコンテナ です. php artisan migrateは、コンテナで実行するコマンド です.
nginxログを表示する方法: docker ps nginxサービスを見つけたcontainer id docker exec-it/bin/bash nginx容器 に入る nginxログの具体的なパスは、プロジェクトのvhostを参照してください.conf 上記のコマンドを実行すると、
私のGithub gistで1組の参考書類があって学友達の参考に便利ですhttps://gist.github.com/kevin...
gistのファイルは少し古いですが、その後、使用中に新しいPHPモジュールとNodeを追加し、前にcomposerも単独で容器に入れましたが、賢いあなたはここが必要に応じてこれらのファイルを変更していると信じています.
私たちの目標は
始める前にDockerクライアントをインストールする必要があります.Dockerの公式サイトには詳細なインストール方法があります.
ステップ1:Laravelのソースパッケージを取得する
私たちのパソコンにはComposerがインストールされていないので、Composerを使ってLaravelプロジェクトを作成することはできません.ここではcURLを使ってgithubから最新のLaravelソースパッケージを直接ダウンロードしました.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
テンプレートファイルを使用すると、ユーザーが個別のアプリケーションコンテナを簡単に定義できることを知っています.ここでは、PHP
、Mysql、
Nginx ,
compose`をそれぞれ4つのコンテナに関連付けてプロジェクトを構成します.編成ファイルの先頭は次のとおりです.
version: '2'
services:
# our services will go here
編成ファイルでは、各コンテナをサービスと呼び、サービスの下でアプリケーション全体で使用されるすべてのサービス(すなわちコンテナ)を定義します.Appサービス
APPサービスのコンテナは、私たちのプロジェクトのコードを実行します.
app:
build:
context: ./
dockerfile: app.dockerfile
working_dir: /var/www
volumes:
- ./:/var/www
environment:
- "DB_PORT=3306"
- "DB_HOST=database"
Notes:app.dockerfile
というミラーファイルを使用してAppコンテナを構築し、ミラーファイルではプロジェクトで使用する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
というファイルを作成する必要があります.具体的な内容は次のとおりです.FROM php:7.1.22-fpm
# Update packages
RUN apt-get update
# Install PHP and composer dependencies
RUN apt-get install -qq git curl libmcrypt-dev libjpeg-dev libpng-dev libfreetype6-dev libbz2-dev
# Clear out the local repository of retrieved package files
# RUN apt-get clean
# Install needed extensions
# Here you can install any other extension that you need during the test and deployment process
RUN apt-get clean; docker-php-ext-install pdo pdo_mysql mcrypt zip gd pcntl opcache bcmath
# Installs Composer to easily manage your PHP dependencies.
RUN curl --silent --show-error https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer
# Install Node
RUN apt-get update &&\
apt-get install -y --no-install-recommends gnupg &&\
curl -sL https://deb.nodesource.com/setup_10.x | bash - &&\
apt-get update &&\
apt-get install -y --no-install-recommends nodejs &&\
npm config set registry https://registry.npm.taobao.org --global &&\
npm install --global gulp-cli
CMD php-fpm
Notes:次に、このコンテナを編成ファイルに
web
と命名するWebサーバを構成する必要があります.web:
build:
context: ./
dockerfile: web.dockerfile
working_dir: /var/www
volumes_from:
- app
ports:
- 8080:80
Notes:volumes_from
は、app
サービスにおいて定義されたデータボリュームパスports
でwebコンテナの80ポートにマッピングすることで、開発環境でhostsファイルを設定することなく、IPプラスポートで直接サービスにアクセスできます.Webサーバはnginxを選択するので、nginxミラーファイルを使用してこのコンテナを構築する必要があります.その前に、nginxミラーに基づいてプロジェクトで使用するvhost
を設定する必要があります.そのため、web.dockerfile
ファイルが必要です.その定義は以下の通りです.FROM nginx:1.10
ADD vhost.conf /etc/nginx/conf.d/default.conf
ミラーファイルの定義に基づいて、プロジェクトのvhost.conf
をコンテナの/etc/nginx/conf.d/default.conf
にコピーし、基本的なnginx構成が構成され、vhost.conf
の定義は以下の通りです.server {
listen 80;
index index.php index.html;
root /var/www/public;
location / {
try_files $uri /index.php?$args;
}
location ~ \.php$ {
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass app:9000;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
}
}
Notes:fastcgi_pass app:9000;
nginxは、PHPに対する要求をfastcgiを介してapp
サービスの9000ポートに伝達し、docker-compose
はservicesで定義されたコンテナサービスを自動的に接続し、各サービスは互いにサービス名で参照される.次にMysqlサービスを構成します.上記の2つのサービスとは少し違います.PHP-FPMとNginxのコンテナでは、ローカルコンピュータのファイルをコンテナに同期してアクセスできるように構成しています.これにより、開発時にファイルの変更を迅速にコンデンサでフィードバックすることができ、開発プロセスを速めることができます.ただし、データベースコンテナで作成したファイルを永続化したい(デフォルトのコンテナが破棄されると、コンテナ内で作成したファイルも破棄される)ので、Dockerのデータボリュームで上記の機能を実現できますが、今回はローカルコンピュータのファイルをデータボリュームに掛ける必要はありません.Dockerクライアントは、作成したデータボリュームのローカルコンピュータに具体的に格納されている場所を管理します.
次は、ファイルのレイアウトにおけるdatabaseサービスの設定です.
version: '2'
services:
database:
image: mysql:5.7
volumes:
- dbdata:/var/lib/mysql
environment:
- "MYSQL_DATABASE=homestead"
- "MYSQL_USER=homestead"
- "MYSQL_PASSWORD=secret"
- "MYSQL_ROOT_PASSWORD=secret"
ports:
- "33061:3306"
volumes:
dbdata:
Notes:volumes
コマンドでdbdata
というデータボリュームを作成しました(dbdataの後ろのコロンは意図的に書かれています.これはYMLファイルの構文制限であり、あまり関心を持たない):
のフォーマットを使用してDockerにdbdata
データボリュームをコンテナの/var/lib/mysql
ディレクトリにenvironments
にはMysqlのdockerミラーに必要な4つの必要なパラメータが設定されています.ports
ポートマッピングでは、ローカルコンピュータの33061ポートをコンテナの3306ポートにマッピングし、コンピュータ上のデータベースツールでdocker内のMysqlに接続できます.次は完全な
docker-compose.yml
ファイルです.ファイルを編成することで、3つのアプリケーションコンテナを関連付けてプロジェクトのサービス・エンドを構成します.version: '2'
services:
# The Application
app:
build:
context: ./
dockerfile: app.dockerfile
working_dir: /var/www
volumes:
- ./:/var/www
environment:
- "DB_PORT=3306"
- "DB_HOST=database"
# The Web Server
web:
build:
context: ./
dockerfile: web.dockerfile
working_dir: /var/www
volumes_from:
- app
ports:
- 8080:80
# The Database
database:
image: mysql:5.6
volumes:
- dbdata:/var/lib/mysql
environment:
- "MYSQL_DATABASE=homestead"
- "MYSQL_USER=homestead"
- "MYSQL_PASSWORD=secret"
- "MYSQL_ROOT_PASSWORD=secret"
ports:
- "33061:3306"
volumes:
dbdata:
サービスの開始上記の手順に従ってファイルを編成し、指定したdockerミラーファイルを構成すると、次のコマンドでサービスを起動できます.実行後、上記のファイルで定義した3つのサービスが起動します.
docker-compose up -d
最初の起動時、dockerクライアントは上記の3つのミラーをダウンロードし、サービスを構築するため、起動速度が遅くなり、ミラーをダウンロードして構築が完了すると、以降の起動が非常に速くなります.Laravelプロジェクトの初期化
サービスを開始するとLaravelプロジェクトを初期化できます.手順は公式ドキュメントで説明したようになりますが、起動したappサービスのコンテナで実行する必要があります.
docker-compose exec app composer install
docker-compose exec app npm install //
docker-compose exec app cp .env.example .env
docker-compose exec app php artisan key:generate
docker-compose exec app php artisan optimize
docker-compose exec app php artisan migrate --seed
docker-compose exec app php artisan make:controller MyController
Notes:nginxログを表示する方法:
http://127.0.0.1:8080/
を通じてプロジェクトにアクセスできます.私のGithub gistで1組の参考書類があって学友達の参考に便利ですhttps://gist.github.com/kevin...
gistのファイルは少し古いですが、その後、使用中に新しいPHPモジュールとNodeを追加し、前にcomposerも単独で容器に入れましたが、賢いあなたはここが必要に応じてこれらのファイルを変更していると信じています.