Ubuntu22.04でDockerComposeを使用してLaravelをインストールおよびセットアップする方法
序章
containerize とは、 container と呼ばれる軽量環境で実行できるようにするために、アプリケーションとそのコンポーネントを適応させるプロセスを指します。 このような環境は分離されて使い捨てであり、アプリケーションの開発、テスト、および本番環境へのデプロイに活用できます。
In this guide, we’ll use Docker Compose to containerize a Laravel application for development. 終了すると、3つの別々のサービスコンテナで実行されるデモLaravelアプリケーションが作成されます。
- PHP7.4-FPMを実行する
app
サービス。 - MySQL5.7を実行する
db
サービス。 nginx
サービスは、app
サービスを使用してPHPコードを解析してから、Laravelアプリケーションを最終ユーザーに提供します。
合理化された開発プロセスを可能にし、アプリケーションのデバッグを容易にするために、共有ボリュームを使用してアプリケーションファイルの同期を維持します。 また、docker-compose exec
コマンドを使用して、app
コンテナでComposerおよびArtisanを実行する方法についても説明します。
前提条件
- sudo権限を持つ非rootユーザーとしてUbuntu22.04ローカルマシンまたは開発サーバーにアクセスします。 リモートサーバーを使用している場合は、アクティブなファイアウォールをインストールすることをお勧めします。 これらを設定するには、 Ubuntu22.04の初期サーバー設定ガイドを参照してください。
- Ubuntu22.04にDockerをインストールして使用する方法の手順1と2に従ってサーバーにDockerをインストールします。
- Ubuntu 22.04にDockerComposeをインストールして使用する方法のステップ1に従って、サーバーにDockerComposeをインストールします。
ステップ1—デモアプリケーションを入手する
開始するには、デモLaravelアプリケーションをGithubリポジトリからフェッチします。 このシリーズの最初のガイドで作成した基本的なLaravelアプリケーションを含むtutorial-01
ブランチに興味があります。
このチュートリアルと互換性のあるアプリケーションコードを入手するには、リリースtutorial-1.0.1
を次のコマンドを使用してホームディレクトリにダウンロードします。
cd ~ curl -L https://github.com/do-community/travellist-laravel-demo/archive/tutorial-1.0.1.zip -o travellist.zip
アプリケーションコードを解凍するには、unzip
コマンドが必要です。 これまでにこのパッケージをインストールしたことがない場合は、次のコマンドを使用してインストールしてください。
sudo apt update sudo apt install unzip
次に、アプリケーションのコンテンツを解凍し、解凍したディレクトリの名前を変更して、アクセスしやすくします。
unzip travellist.zip mv travellist-laravel-demo-tutorial-1.0.1 travellist-demo
travellist-demo
ディレクトリに移動します。
cd travellist-demo
次のステップでは、.env
構成ファイルを作成してアプリケーションをセットアップします。
ステップ2—アプリケーションの.env
ファイルを設定する
Laravel構成ファイルは、アプリケーションのルートディレクトリ内のconfig
というディレクトリにあります。 さらに、.env
ファイルを使用して、環境に依存する構成をセットアップします。たとえば、クレデンシャルやデプロイ間で異なる可能性のある情報などです。 このファイルはリビジョン管理に含まれていません。
警告:環境構成ファイルには、データベースの資格情報やセキュリティキーなど、サーバーに関する機密情報が含まれています。 そのため、このファイルを公に共有しないでください。
.env
ファイルに含まれる値は、config
ディレクトリにある通常の構成ファイルに設定されている値よりも優先されます。 新しい環境にインストールするたびに、データベース接続設定、デバッグオプション、アプリケーションURLなど、アプリケーションが実行されている環境によって異なる可能性のある項目を定義するために、調整された環境ファイルが必要です。
次に、新しい.env
ファイルを作成して、セットアップする開発環境の構成オプションをカスタマイズします。 Laravelにはexample.env
ファイルが付属しており、これをコピーして独自のファイルを作成できます。
cp .env.example .env
nano
または選択したテキストエディタを使用して、このファイルを開きます。
nano .env
travellist
デモアプリケーションの現在の.env
ファイルには、127.0.0.1
をデータベースホストとして使用するローカルMySQLデータベースを使用するための設定が含まれています。 DB_HOST
変数を更新して、Docker環境で作成するデータベースサービスを指すようにする必要があります。 このガイドでは、データベースサービスをdb
と呼びます。 先に進み、リストされているDB_HOST
の値をデータベースサービス名に置き換えます。
.env
APP_NAME=Travellist APP_ENV=dev APP_KEY= APP_DEBUG=true APP_URL=http://localhost:8000 LOG_CHANNEL=stack DB_CONNECTION=mysql DB_HOST=db DB_PORT=3306 DB_DATABASE=travellist DB_USERNAME=travellist_user DB_PASSWORD=password ...
必要に応じて、データベース名、ユーザー名、およびパスワードも自由に変更してください。 これらの変数は、サービスを構成するためにdocker-compose.yml
ファイルを設定する後のステップで活用されます。
編集が終わったらファイルを保存します。 nano
を使用した場合は、Ctrl+x
、Y
、Enter
の順に押して確定します。
ステップ3—アプリケーションのDockerfileを設定する
MySQLサービスとNginxサービスはどちらも、 Docker Hub から取得したデフォルトのイメージに基づいていますが、アプリケーションコンテナ用のカスタムイメージを作成する必要があります。 そのための新しいDockerfileを作成します。
travellist イメージは、DockerHubのphp:7.4-fpm
公式PHPイメージに基づいています。 その基本的なPHP-FPM環境に加えて、いくつかの追加のPHPモジュールとComposer依存関係管理ツールをインストールします。
また、新しいシステムユーザーを作成します。 これは、アプリケーションの開発中にartisan
およびcomposer
コマンドを実行するために必要です。 uid
設定により、コンテナー内のユーザーは、Dockerを実行しているホストマシン上のシステムユーザーと同じuidを持つことが保証されます。 このようにして、これらのコマンドによって作成されたファイルはすべて、正しい権限でホストに複製されます。 これは、ホストマシンで選択したコードエディタを使用して、コンテナ内で実行されるアプリケーションを開発できることも意味します。
次のコマンドで新しいDockerfileを作成します。
nano Dockerfile
次の内容をDockerfileにコピーします。
Dockerfile
FROM php:7.4-fpm # Arguments defined in docker-compose.yml ARG user ARG uid # Install system dependencies RUN apt-get update && apt-get install -y \ git \ curl \ libpng-dev \ libonig-dev \ libxml2-dev \ zip \ unzip # Clear cache RUN apt-get clean && rm -rf /var/lib/apt/lists/* # Install PHP extensions RUN docker-php-ext-install pdo_mysql mbstring exif pcntl bcmath gd # Get latest Composer COPY --from=composer:latest /usr/bin/composer /usr/bin/composer # Create system user to run Composer and Artisan Commands RUN useradd -G www-data,root -u $uid -d /home/$user $user RUN mkdir -p /home/$user/.composer && \ chown -R $user:$user /home/$user # Set working directory WORKDIR /var/www USER $user
完了したら、ファイルを保存することを忘れないでください。
Dockerfileは、使用しているベースイメージphp:7.4-fpm
を定義することから始まります。
システムパッケージとPHP拡張機能をインストールした後、composer
実行可能ファイルを最新の公式イメージから独自のアプリケーションイメージにコピーしてComposerをインストールします。
次に、Dockerfileの先頭で宣言されたuser
およびuid
引数を使用して、新しいシステムユーザーが作成および設定されます。 これらの値は、ビルド時にDockerComposeによって挿入されます。
最後に、デフォルトの作業ディレクトリを/var/www
に設定し、新しく作成されたユーザーに変更します。 これにより、アプリケーションコンテナでcomposer
およびartisan
コマンドを実行するときに、通常のユーザーとして接続し、正しいディレクトリにいることが確認されます。
ステップ4—Nginx構成とデータベースダンプファイルの設定
Docker Composeを使用して開発環境を作成する場合、それらのサービスをセットアップまたはブートストラップするために、構成ファイルまたは初期化ファイルをサービスコンテナーと共有する必要があることがよくあります。 この方法により、アプリケーションの開発中に構成ファイルを変更して環境を微調整することが容易になります。
次に、サービスコンテナの構成と初期化に使用されるファイルを含むフォルダを設定します。
Nginxをセットアップするために、アプリケーションの提供方法を構成するtravellist.conf
ファイルを共有します。 次のコマンドでdocker-compose/nginx
フォルダーを作成します。
mkdir -p docker-compose/nginx
そのディレクトリ内にtravellist.conf
という名前の新しいファイルを開きます。
nano docker-compose/nginx/travellist.conf
次のNginx構成をそのファイルにコピーします。
docker-compose / nginx / travellist.conf
server { listen 80; index index.php index.html; error_log /var/log/nginx/error.log; access_log /var/log/nginx/access.log; root /var/www/public; location ~ \.php$ { try_files $uri =404; 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; } location / { try_files $uri $uri/ /index.php?$query_string; gzip_static on; } }
このファイルは、ポート80
でリッスンし、index.php
をデフォルトのインデックスページとして使用するようにNginxを構成します。 ドキュメントルートを/var/www/public
に設定し、ポート9000
でapp
サービスを使用して*.php
ファイルを処理するようにNginxを構成します。
編集が完了したら、ファイルを保存して閉じます。
MySQLデータベースをセットアップするために、コンテナーが初期化されるときにインポートされるデータベースダンプを共有します。 これは、そのコンテナで使用するMySQL5.7イメージによって提供される機能です。
docker-compose
フォルダー内にMySQL初期化ファイル用の新しいフォルダーを作成します。
mkdir docker-compose/mysql
新しい.sql
ファイルを開きます。
nano docker-compose/mysql/init_db.sql
次のMySQLダンプは、 LaravelonLEMPガイドで設定したデータベースに基づいています。 places
という名前の新しいテーブルが作成されます。 次に、サンプルの場所のセットをテーブルに入力します。
次のコードをファイルに追加します。
docker-compose / mysql / db_init.sql
DROP TABLE IF EXISTS `places`; CREATE TABLE `places` ( `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT, `name` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL, `visited` tinyint(1) NOT NULL DEFAULT '0', PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=12 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; INSERT INTO `places` (name, visited) VALUES ('Berlin',0),('Budapest',0),('Cincinnati',1),('Denver',0),('Helsinki',0),('Lisbon',0),('Moscow',1),('Nairobi',0),('Oslo',1),('Rio',0),('Tokyo',0);
places
テーブルには、id
、name
、およびvisited
の3つのフィールドが含まれています。 visited
フィールドは、まだ移動している場所を識別するために使用されるフラグです。 サンプルの場所を自由に変更するか、新しい場所を含めてください。 完了したら、ファイルを保存して閉じます。
アプリケーションのDockerfileとサービス構成ファイルの設定が完了しました。 次に、サービスの作成時にこれらのファイルを使用するようにDockerComposeを設定します。
ステップ5—DockerComposeを使用したマルチコンテナ環境の作成
Docker Composeを使用すると、Dockerで実行されているアプリケーション用のマルチコンテナー環境を作成できます。 サービス定義を使用して、ネットワークとデータボリュームを共有できる複数のコンテナーを備えた完全にカスタマイズ可能な環境を構築します。 これにより、アプリケーションコンポーネント間のシームレスな統合が可能になります。
サービス定義を設定するために、docker-compose.yml
という名前の新しいファイルを作成します。 通常、このファイルはアプリケーションフォルダーのルートにあり、コンテナーの構築に使用するベースイメージや、サービスの相互作用など、コンテナー化された環境を定義します。
docker-compose.yml
ファイルで、app
、db
、およびnginx
の3つの異なるサービスを定義します。
app
サービスは、以前に作成したDockerfileに基づいて、travellist
というイメージを構築します。 このサービスによって定義されたコンテナーは、php-fpm
サーバーを実行してPHPコードを解析し、結果をnginx
サービスに送り返します。このサービスは別のコンテナーで実行されます。 mysql
サービスは、MySQL5.7サーバーを実行するコンテナーを定義します。 当社のサービスは、travellist
という名前のブリッジネットワークを共有します。
アプリケーションファイルは、バインドマウントを介してapp
サービスとnginx
サービスの両方で同期されます。 バインドマウントは、ホストマシンとコンテナー間のパフォーマンスの高い双方向同期を可能にするため、開発環境で役立ちます。
アプリケーションフォルダのルートに新しいdocker-compose.yml
ファイルを作成します。
nano docker-compose.yml
一般的なdocker-compose.yml
ファイルは、バージョン定義で始まり、services
ノードが続き、その下ですべてのサービスが定義されます。 共有ネットワークは通常、そのファイルの下部に定義されています。
開始するには、このボイラープレートコードをdocker-compose.yml
ファイルにコピーします。
docker-compose.yml
version: "3.7" services: networks: travellist: driver: bridge
次に、services
ノードを編集して、app
、db
、およびnginx
サービスを含めます。
app
サービス
app
サービスは、travellist-app
という名前のコンテナーをセットアップします。 docker-compose.yml
ファイルと同じパスにあるDockerfileに基づいて新しいDockerイメージを構築します。 新しい画像はtravellist
という名前でローカルに保存されます。
アプリケーションとして提供されるドキュメントルートはnginx
コンテナー内にありますが、app
コンテナー内のどこかにアプリケーションファイルが必要なので、コマンドラインタスクを実行できます。 LaravelArtisanツールを使用します。
services
ノードの下のdocker-compose.yml
ファイル内に次のサービス定義をコピーします。
docker-compose.yml
app: build: args: user: sammy uid: 1000 context: ./ dockerfile: Dockerfile image: travellist container_name: travellist-app restart: unless-stopped working_dir: /var/www/ volumes: - ./:/var/www networks: - travellist
これらの設定は次のことを行います。
build
:この構成は、指定されたパス(コンテキスト)とDockerfileを使用して、app
サービスのローカルイメージを構築するようにDockerComposeに指示します。 引数user
およびuid
は、ビルド時にユーザー作成コマンドをカスタマイズするためにDockerfileに挿入されます。image
:作成中のイメージに使用される名前。container_name
:このサービスのコンテナ名を設定します。restart
:サービスが停止しない限り、常に再起動してください。working_dir
:このサービスのデフォルトディレクトリを/var/www
に設定します。volumes
:現在のディレクトリのコンテンツをコンテナ内の/var/www
に同期する共有ボリュームを作成します。 これはnginx
コンテナに存在するため、ドキュメントルートではないことに注意してください。networks
:travellist
という名前のネットワークを使用するようにこのサービスを設定します。
db
サービス
db
サービスは、DockerHubから事前に構築されたMySQL8.0イメージを使用します。 DockerComposeはdocker-compose.yml
ファイルと同じディレクトリにある.env
変数ファイルを自動的にロードするため、前の手順で作成したLaravel.env
ファイルからデータベース設定を取得できます。 。
app
サービスの直後に、services
ノードに次のサービス定義を含めます。
docker-compose.yml
db: image: mysql:8.0 container_name: travellist-db restart: unless-stopped environment: MYSQL_DATABASE: ${DB_DATABASE} MYSQL_ROOT_PASSWORD: ${DB_PASSWORD} MYSQL_PASSWORD: ${DB_PASSWORD} MYSQL_USER: ${DB_USERNAME} SERVICE_TAGS: dev SERVICE_NAME: mysql volumes: - ./docker-compose/mysql:/docker-entrypoint-initdb.d networks: - travellist
これらの設定は次のことを行います。
image
:このコンテナーに使用する必要があるDockerイメージを定義します。 この場合、DockerHubのMySQL5.7イメージを使用しています。container_name
:このサービスのコンテナー名を設定します:travellist-db
。restart
:明示的に停止されていない限り、常にこのサービスを再起動してください。environment
:新しいコンテナーで環境変数を定義します。 Laravel.env
ファイルから取得した値を使用してMySQLサービスをセットアップします。これにより、提供された環境変数に基づいて新しいデータベースとユーザーが自動的に作成されます。volumes
:アプリケーションデータベースの初期化に使用される.sql
データベースダンプを共有するボリュームを作成します。 MySQLイメージは、コンテナ内の/docker-entrypoint-initdb.d
ディレクトリに配置された.sql
ファイルを自動的にインポートします。networks
:travellist
という名前のネットワークを使用するようにこのサービスを設定します。
nginx
サービス
nginx
サービスは、軽量LinuxディストリビューションであるAlpineの上に構築済みのNginxイメージを使用します。 travellist-nginx
という名前のコンテナーを作成し、ports
定義を使用して、ホストシステムのポート8000
からコンテナー内のポート80
へのリダイレクトを作成します。 。
db
サービスの直後に、services
ノードに次のサービス定義を含めます。
docker-compose.yml
nginx: image: nginx:1.17-alpine container_name: travellist-nginx restart: unless-stopped ports: - 8000:80 volumes: - ./:/var/www - ./docker-compose/nginx:/etc/nginx/conf.d networks: - travellist
これらの設定は次のことを行います。
image
:このコンテナーに使用する必要があるDockerイメージを定義します。 この場合、AlpineNginx1.17イメージを使用しています。container_name
:このサービスのコンテナー名を設定します:travellist-nginx。restart
:明示的に停止されていない限り、常にこのサービスを再起動してください。ports
:ポート8000
を介して、コンテナー内のポート80
で実行されているWebサーバーへの外部アクセスを許可するポートリダイレクトを設定します。volumes
:2つの共有ボリュームを作成します。 1つ目は、現在のディレクトリのコンテンツをコンテナ内の/var/www
に同期します。 このように、アプリケーションファイルにローカルの変更を加えると、コンテナー内のNginxによって提供されるアプリケーションにすばやく反映されます。 2番目のボリュームでは、docker-compose/nginx/travellist.conf
にあるNginx構成ファイルがコンテナーのNginx構成フォルダーにコピーされていることを確認します。networks
:travellist
という名前のネットワークを使用するようにこのサービスを設定します。
完成したdocker-compose.yml
ファイル
完成したdocker-compose.yml
ファイルは次のようになります。
docker-compose.yml
version: "3.7" services: app: build: args: user: sammy uid: 1000 context: ./ dockerfile: Dockerfile image: travellist container_name: travellist-app restart: unless-stopped working_dir: /var/www/ volumes: - ./:/var/www networks: - travellist db: image: mysql:8.0 container_name: travellist-db restart: unless-stopped environment: MYSQL_DATABASE: ${DB_DATABASE} MYSQL_ROOT_PASSWORD: ${DB_PASSWORD} MYSQL_PASSWORD: ${DB_PASSWORD} MYSQL_USER: ${DB_USERNAME} SERVICE_TAGS: dev SERVICE_NAME: mysql volumes: - ./docker-compose/mysql:/docker-entrypoint-initdb.d networks: - travellist nginx: image: nginx:alpine container_name: travellist-nginx restart: unless-stopped ports: - 8000:80 volumes: - ./:/var/www - ./docker-compose/nginx:/etc/nginx/conf.d/ networks: - travellist networks: travellist: driver: bridge
完了したら、必ずファイルを保存してください。
ステップ6—DockerComposeを使用してアプリケーションを実行する
次に、docker-compose
コマンドを使用して、アプリケーションイメージを構築し、セットアップで指定したサービスを実行します。
次のコマンドを使用して、app
イメージを作成します。
docker-compose build app
このコマンドは、完了するまでに数分かかる場合があります。 次のような出力が表示されます。
OutputBuilding app Sending build context to Docker daemon 377.3kB Step 1/11 : FROM php:7.4-fpm ---> 8c08d993542f Step 2/11 : ARG user ---> e3ce3af04d87 Step 3/11 : ARG uid ---> 30cb921ef7df Step 4/11 : RUN apt-get update && apt-get install -y git curl libpng-dev libonig-dev libxml2-dev zip unzip . . . ---> b6dbc7a02e95 Step 5/11 : RUN apt-get clean && rm -rf /var/lib/apt/lists/* ---> 10ef9dde45ad . . . Step 6/11 : RUN docker-php-ext-install pdo_mysql mbstring exif pcntl bcmath gd . . . ---> 920e4f09ec75 Step 7/11 : COPY --from=composer:latest /usr/bin/composer /usr/bin/composer ---> dbbcd44e44af Step 8/11 : RUN useradd -G www-data,root -u $uid -d /home/$user $user ---> db98e899a69a Step 9/11 : RUN mkdir -p /home/$user/.composer && chown -R $user:$user /home/$user ---> 5119e26ebfea Step 10/11 : WORKDIR /var/www ---> 699c491611c0 Step 11/11 : USER $user ---> cf250fe8f1af Successfully built cf250fe8f1af Successfully tagged travellist:latest
ビルドが終了したら、次のコマンドを使用して環境をバックグラウンドモードで実行できます。
docker-compose up -d
OutputCreating travellist-db ... done Creating travellist-app ... done Creating travellist-nginx ... done
これにより、コンテナがバックグラウンドで実行されます。 アクティブなサービスの状態に関する情報を表示するには、次を実行します。
docker-compose ps
次のような出力が表示されます。
Output Name Command State Ports ----------------------------------------------------------------------------------------------- travellist-app docker-php-entrypoint php-fpm Up 9000/tcp travellist-db docker-entrypoint.sh mysqld Up 3306/tcp, 33060/tcp travellist-nginx nginx -g daemon off; Up 0.0.0.0:8000->80/tcp,:::8000->80/tcp
これで環境は稼働していますが、アプリケーションのセットアップを完了するには、まだいくつかのコマンドを実行する必要があります。 docker-compose exec
コマンドを使用して、ls -l
などのサービスコンテナ内のコマンドを実行し、アプリケーションディレクトリ内のファイルに関する詳細情報を表示できます。
docker-compose exec app ls -l
Outputtotal 256 -rw-r--r-- 1 sammy sammy 737 Apr 18 14:21 Dockerfile -rw-r--r-- 1 sammy sammy 101 Jan 7 2020 README.md drwxr-xr-x 6 sammy sammy 4096 Jan 7 2020 app -rwxr-xr-x 1 sammy sammy 1686 Jan 7 2020 artisan drwxr-xr-x 3 sammy sammy 4096 Jan 7 2020 bootstrap -rw-r--r-- 1 sammy sammy 1501 Jan 7 2020 composer.json -rw-r--r-- 1 sammy sammy 179071 Jan 7 2020 composer.lock drwxr-xr-x 2 sammy sammy 4096 Jan 7 2020 config drwxr-xr-x 5 sammy sammy 4096 Jan 7 2020 database drwxr-xr-x 4 sammy sammy 4096 Apr 18 14:22 docker-compose -rw-r--r-- 1 sammy sammy 1017 Apr 18 14:29 docker-compose.yml -rw-r--r-- 1 sammy sammy 1013 Jan 7 2020 package.json -rw-r--r-- 1 sammy sammy 1405 Jan 7 2020 phpunit.xml drwxr-xr-x 2 sammy sammy 4096 Jan 7 2020 public -rw-r--r-- 1 sammy sammy 273 Jan 7 2020 readme.md drwxr-xr-x 6 sammy sammy 4096 Jan 7 2020 resources drwxr-xr-x 2 sammy sammy 4096 Jan 7 2020 routes -rw-r--r-- 1 sammy sammy 563 Jan 7 2020 server.php drwxr-xr-x 5 sammy sammy 4096 Jan 7 2020 storage drwxr-xr-x 4 sammy sammy 4096 Jan 7 2020 tests -rw-r--r-- 1 sammy sammy 538 Jan 7 2020 webpack.mix.js
次に、composer install
を実行して、アプリケーションの依存関係をインストールします。
docker-compose exec app rm -rf vendor composer.lock docker-compose exec app composer install
次のような出力が表示されます。
OutputNo composer.lock file present. Updating dependencies to latest instead of installing from lock file. See https://getcomposer.org/install for more information. . . . Lock file operations: 89 installs, 0 updates, 0 removals - Locking doctrine/inflector (2.0.4) - Locking doctrine/instantiator (1.4.1) - Locking doctrine/lexer (1.2.3) - Locking dragonmantank/cron-expression (v2.3.1) - Locking egulias/email-validator (2.1.25) - Locking facade/flare-client-php (1.9.1) - Locking facade/ignition (1.18.1) - Locking facade/ignition-contracts (1.0.2) - Locking fideloper/proxy (4.4.1) - Locking filp/whoops (2.14.5) . . . Writing lock file Installing dependencies from lock file (including require-dev) Package operations: 89 installs, 0 updates, 0 removals - Downloading doctrine/inflector (2.0.4) - Downloading doctrine/lexer (1.2.3) - Downloading dragonmantank/cron-expression (v2.3.1) - Downloading symfony/polyfill-php80 (v1.25.0) - Downloading symfony/polyfill-php72 (v1.25.0) - Downloading symfony/polyfill-mbstring (v1.25.0) - Downloading symfony/var-dumper (v4.4.39) - Downloading symfony/deprecation-contracts (v2.5.1) . . . Generating optimized autoload files > Illuminate\Foundation\ComposerScripts::postAutoloadDump > @php artisan package:discover --ansi Discovered Package: facade/ignition Discovered Package: fideloper/proxy Discovered Package: laravel/tinker Discovered Package: nesbot/carbon Discovered Package: nunomaduro/collision Package manifest generated successfully.
アプリケーションをテストする前に最後に行う必要があるのは、artisan
Laravelコマンドラインツールを使用して一意のアプリケーションキーを生成することです。 このキーは、ユーザーセッションやその他の機密データを暗号化するために使用されます。
docker-compose exec app php artisan key:generate
OutputApplication key set successfully.
次に、ブラウザに移動して、ポート8000でサーバーのドメイン名またはIPアドレスにアクセスします。
http://server_domain_or_IP:8000
注:このデモをローカルマシンで実行している場合は、http://localhost:8000
を使用してブラウザからアプリケーションにアクセスしてください。
次のようなページが表示されます。
logs
コマンドを使用して、サービスによって生成されたログを確認できます。
docker-compose logs nginx
Attaching to travellist-nginx . . . travellist-nginx | 172.24.9.1 - - [18/Apr/2022:14:49:16 +0000] "GET / HTTP/1.1" 200 627 "-" "curl/7.82.0" travellist-nginx | 172.24.9.1 - - [18/Apr/2022:14:51:27 +0000] "GET / HTTP/1.1" 200 627 "-" "Mozilla/5.0 (X11; Linux x86_64; rv:89.0) Gecko/20100101 Firefox/89.0" travellist-nginx | 172.24.9.1 - - [18/Apr/2022:14:51:27 +0000] "GET /favicon.ico HTTP/1.1" 200 0 "http://localhost:8000/" "Mozilla/5.0 (X11; Linux x86_64; rv:89.0) Gecko/20100101 Firefox/89.0"
すべてのサービスの状態を維持したままDockerCompose環境を一時停止する場合は、次を実行します。
docker-compose pause
OutputPausing travellist-db ... done Pausing travellist-nginx ... done Pausing travellist-app ... done
その後、次の方法でサービスを再開できます。
docker-compose unpause
OutputUnpausing travellist-app ... done Unpausing travellist-nginx ... done Unpausing travellist-db ... done
Docker Compose環境をシャットダウンし、そのすべてのコンテナー、ネットワーク、およびボリュームを削除するには、次のコマンドを実行します。
docker-compose down
OutputStopping travellist-nginx ... done Stopping travellist-db ... done Stopping travellist-app ... done Removing travellist-nginx ... done Removing travellist-db ... done Removing travellist-app ... done Removing network travellist-laravel-demo_travellist
すべてのDockerComposeコマンドの概要については、DockerComposeコマンドラインリファレンスを確認してください。
結論
このガイドでは、Docker Composeを使用して3つのコンテナーでDocker環境をセットアップし、YAMLファイルでインフラストラクチャを定義しました。
この時点から、開発とテストのためにローカルWebサーバーをインストールしてセットアップしなくても、Laravelアプリケーションで作業できます。 さらに、簡単に複製および配布できる使い捨て環境で作業することになります。これは、アプリケーションの開発中や本番環境への移行時に役立ちます。