Table of Contents
はじめに
アプリケーションの*コンテナ化*とは、コンテナと呼ばれる軽量環境で実行できるように、アプリケーションおよびそのコンポーネントを適応させるプロセスを指します。このような環境は他から分離され、使い捨てできるため、アプリケーションの開発、テスト、および実稼働環境へのデプロイに活用できます。
このガイドでは、開発用にDocker Composeを使用してLaravelアプリケーションをコンテナ化します。終了すると、3つの別々のサービスコンテナで実行されるデモ用Laravelアプリケーションが作成されます。
- PHP7.4-FPMを実行する
appサービス。
- MySQL 5.7を実行する
dbサービス。
- Laravelアプリケーションを最終ユーザーに提供する前に、
appサービスを利用してPHPコードを解析するnginxサービス。
前提条件
- sudo権限を持つroot以外のユーザーとして、Ubuntu 20.04ローカルマシンまたは開発サーバーにアクセス。リモートサーバーを使用している場合、アクティブなファイアウォールをインストールしておくことをお勧めします。これらのセットアップは、Ubuntu 20.04の初期サーバー設定ガイドを参照してください。
- Ubuntu 20.04へのDockerのインストールおよび使用方法のステップ1と2に従って、サーバーにDockerをインストールします。
- Ubuntu 20.04へのDocker Composeのインストールおよび使用方法のステップ1に従って、サーバーにDocker Composeをインストールします。
ステップ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設定ファイルは、アプリケーションのrootディレクトリ内のconfigというディレクトリにあります。さらに、資格情報やデプロイ間で異なる可能性のある情報など、環境に依存する設定を設定するために.envファイルが使用されます。このファイルはリビジョン管理に含まれません 。
[warning]
警告:環境設定ファイルには、データベース資格情報およびセキュリティキーなど、サーバーに関する機密性の高い情報が含まれています。そのため、このファイルは公開しないでください。
.envファイルに含まれる値は、 config ディレクトリにある通常の設定ファイルに設定された値よりも優先されます。新しい環境にインストールするたびに、データベース接続設定、デバグオプション、アプリケーション URL など、アプリケーションが実行されている環境によって異なる可能性のある項目を定義するために、調整された環境ファイルが必要です。
次に、セットアップする開発環境の設定オプションをカスタマイズするために新しい.envファイルを作成します。Laravelには、独自のファイルを作成するためにコピーできる.envのサンプルファイルが付属しています。
cp .env.example .env
nanoまたは適切なテキストエディターを使用してこのファイルを開きます。
nano .env
travellistデモアプリケーションの現在の.envファイルには、127.0.0.1をデータベースホストとして、ローカルのMySQLデータベースを使用するための設定が含まれています。Docker環境で作成するデータベースサービスを指すように、DB_HOST変数を更新する必要があります。このガイドでは、データベースサービスdbを呼び出します。それでは、DB_HOSTのリストの値をデータベースサービス名に置き換えます。
[label .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を作成します。
また、新しいシステムユーザーを作成します。これは、アプリケーションの開発中にartisanおよびcomposerコマンドを実行するために必要です。このuid設定により、コンテナ内のユーザーはDockerを実行しているホストマシン上のシステムユーザーと同じuidを持つことができます。このようにして、これらのコマンドによって作成されたファイルは、適切なアクセス権が付与されホストに複製されます。つまり、ホストマシンで選択したコードエディターを使用して、コンテナ内で実行されるアプリケーションを開発することもできます。
次のコマンドを使用して、新しいDockerfileを作成します。
nano Dockerfile
次の内容をDockerfileにコピーします。
[label 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引数を使用して新しいシステムユーザーが作成され、設定されます。これらの値は、ビルド時にDocker Composeによって挿入されます。
最後に、デフォルトの作業ディレクトリを/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設定をそのファイルにコピーします。
[label 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を設定します。ドキュメントrootを/var/www/publicに設定し、Nginxがポート9000でappサービスを使用して*.phpファイルを処理するように設定します。
編集が完了したら、ファイルを保存して閉じます。
MySQLデータベースをセットアップするために、コンテナの初期化時にインポートされるデータベースダンプを共有します。これは、コンテナで使用するMySQL 5.7イメージが提供する機能です。
docker-composeフォルダ内にMySQL初期化ファイル用の新しいフォルダを作成します。
mkdir docker-compose/mysql
新しい.sqlファイルを開きます。
nano docker-compose/mysql/init_db.sql
次のMySQLダンプは、LEMPでのLaravel ガイドで設定したデータベースに基づいています。placesという名前の新しいテーブルが作成されます。次に、テーブルに場所のサンプルデータが入力されます。
次のコードをファイルに追加します。
[label 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とサービス設定ファイルのセットアップを完了しました。次に、サービスの作成時にこれらのファイルを使用するように、Docker Composeを設定します。
ステップ5 — Docker Composeを使用したマルチコンテナ環境の作成
Docker Composeを使用すると、Dockerで実行されるアプリケーション用のマルチコンテナ環境を作成できます。*サービス定義*を使用して、ネットワークやデータボリュームを共有できる複数のコンテナで完全にカスタマイズ可能な環境を構築します。これにより、アプリケーションコンポーネント間のシームレスな統合が可能になります。
サービス定義を設定するために、docker-compose.ymlという新しいファイルを作成します。通常、このファイルはアプリケーションフォルダのrootにあり、コンテナの構築に使用するベースイメージ、およびサービスの相互作用など、コンテナ化された環境を定義します。
docker-compose.ymlファイルでapp、db、nginxの3つの異なるサービスを定義します。
appサービスは、既に作成したDockerfileに基づいて、travellistというイメージを作成します。このサービスで定義されたコンテナは、php-fpmサーバーを実行してPHPコードを解析し、結果を別のコンテナで実行されるnginxサービスに返します。mysqlサービスは、MySQL 5.7サーバーを実行するコンテナを定義します。このサービスは、travellistというブリッジネットワークを共有します。
アプリケーションファイルは、バインドマウントによってappサービスとnginxサービスの両方で同期されます。バインドマウントは、ホストマシンとコンテナ間で優れたパフォーマンスの双方向同期を可能にするため、開発環境で役立ちます。
アプリケーションフォルダーのrootに新しいdocker-compose.ymlファイルを作成します。
nano docker-compose.yml
一般的なdocker-compose.ymlファイルは、バージョン定義で始まり、次にservicesノードが続き、その下にすべてのサービスが定義されます。共有ネットワークは、通常ファイルの最後に定義されます。
開始するには、このボイラープレートコードをdocker-compose.ymlファイルにコピーします。
[label docker-compose.yml]
version: "3.7"
services:
networks:
<^>travellist<^>:
driver: bridge
ここで、app、db、nginxサービスを加えるようにservicesノードを編集します。
appサービス
appサービスは、travellist-appという名前のコンテナを設定します。Docker-compose.ymlファイルと同じパスにあるDockerファイルに基づいて、新しいDockerイメージを構築します。新しいイメージは、travellistという名前でローカルに保存されます。
アプリケーションとして提供されているドキュメントrootはnginxコンテナにありますが、appコンテナ内のどこかにアプリケーションファイルも必要なので、Laravel Artisanツールを使用してコマンドラインタスクを実行します。
次のサービス定義を、docker-compose.ymlファイル内のservicesノードの下にコピーします。
[label 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を使用して、Docker Composeにappサービスのローカルイメージを構築するよう指示します。引数userとuidはDockerfileに挿入され、ビルド時にユーザー作成コマンドをカスタマイズします。
image: 作成中のイメージに使用される名前。
container_name:サービスのコンテナ名を設定します。
restart:サービスが停止されない限り、常に再起動します。
working_dir:サービスのデフォルトディレクトリを/var/wwwに設定します。
volumes:現在のディレクトリの内容をコンテナ内の/var/wwwに同期する共有ボリュームを作成します。nginxコンテナ内にあるため、これはドキュメントrootではないことに注意してください。
networks:travellistというネットワークを使用するように、サービスを設定します。
dbサービス
dbサービスは、Docker Hubの構築済みのMySQL 5.7イメージを使用します。Docker Composeはdocker-compose.ymlファイルと同じディレクトリにある.env変数ファイルを自動的に読み込むため、前のステップで作成したLaravel .envファイルからデータベース設定を取得できます。
appサービスの直後に、servicesノードに次のサービス定義を加えます。
[label docker-compose.yml]
db:
image: <^>mysql:5.7<^>
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イメージを定義します。この場合、Docker HubのMySQL 5.7イメージを使用してします。
container_name:サービスのコンテナ名をtravellist-dbに設定します。
restart:明示的に停止しない限り、 常にサービスを再起動します。
environment: 新しいコンテナで環境変数を定義します。Laravel.envファイルから取得した値を使用してMySQLサービスを設定します。これにより、指定された環境変数に基づいて新しいデータベースとユーザーが自動的に作成されます。
volumes:アプリケーションデータベースの初期化に使用される.sqlデータベースダンプを共有するボリュームを作成します。MySQLイメージは、コンテナ内の/docker-entrypoint-initdb.dディレクトリに配置された.sqlファイルを自動的にインポートします。
networks:travellistというネットワークを使用するように、サービスを設定します。
nginxサービス
dbサービスの直後に、servicesノードに次のサービス定義を加えます。
[label 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イメージを定義します。この場合、Alpine Nginx 1.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ファイルは次のようになります。
[label 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:5.7
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 — Docker Composeを使用してアプリケーションを実行する
これから、docker-composeコマンドを使用してアプリケーションイメージを構築し、セットアップで指定したサービスを実行します。
次のコマンドを使用して、appイメージを構築します。
docker-compose build app
このコマンドは、完了するまでに数分かかる場合があります。次のような出力が表示されます。
[secondary_label Output]
Building app
Step 1/11 : FROM php:7.4-fpm
---> fa37bd6db22a
Step 2/11 : ARG user
---> Running in f71eb33b7459
Removing intermediate container f71eb33b7459
---> 533c30216f34
Step 3/11 : ARG uid
---> Running in 60d2d2a84cda
Removing intermediate container 60d2d2a84cda
---> 497fbf904605
Step 4/11 : RUN apt-get update && apt-get install -y git curl libpng-dev libonig-dev ...
Step 7/11 : COPY --from=composer:latest /usr/bin/composer /usr/bin/composer
---> e499f74896e3
Step 8/11 : RUN useradd -G www-data,root -u $uid -d /home/$user $user
---> Running in 232ef9c7dbd1
Removing intermediate container 232ef9c7dbd1
---> 870fa3220ffa
Step 9/11 : RUN mkdir -p /home/$user/.composer && chown -R $user:$user /home/$user
---> Running in 7ca8c0cb7f09
Removing intermediate container 7ca8c0cb7f09
---> 3d2ef9519a8e
Step 10/11 : WORKDIR /var/www
---> Running in 4a964f91edfa
Removing intermediate container 4a964f91edfa
---> 00ada639da21
Step 11/11 : USER $user
---> Running in 9f8e874fede9
Removing intermediate container 9f8e874fede9
---> fe176ff4702b
Successfully built fe176ff4702b
Successfully tagged travellist:latest
ビルドが完了したら、次のコマンドを使用してこの動作環境をバックグラウンドモードで実行できます。
docker-compose up -d
[secondary_label Output]
Creating travellist-db ... done
Creating travellist-app ... done
Creating travellist-nginx ... done
これにより、コンテナがバックグラウンドで実行されます。アクティブなサービスの状態に関する情報を表示するには、次のコマンドを使用します。
docker-compose ps
出力は次のようになります。
[secondary_label 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<^> /docker-entrypoint.sh ngin ... Up 0.0.0.0:8000->80/tcp
これで動作環境が起動して稼働中になりましたが、アプリケーションのセットアップを完了するには、いくつかのコマンドを実行する必要があります。docker-compose execコマンドを使用して、ls -lなどのサービスコンテナ内のコマンドを実行し、アプリケーションディレクトリ内のファイルに関する詳細情報を表示できます。
docker-compose exec <^>app<^> <^>ls -l<^>
[secondary_label Output]
total 260
-rw-rw-r-- 1 sammy sammy 737 Jun 9 11:19 Dockerfile
-rw-rw-r-- 1 sammy sammy 101 Jan 7 08:05 README.md
drwxrwxr-x 6 sammy sammy 4096 Jan 7 08:05 app
-rwxr-xr-x 1 sammy sammy 1686 Jan 7 08:05 artisan
drwxrwxr-x 3 sammy sammy 4096 Jan 7 08:05 bootstrap
-rw-rw-r-- 1 sammy sammy 1501 Jan 7 08:05 composer.json
-rw-rw-r-- 1 sammy sammy 179071 Jan 7 08:05 composer.lock
drwxrwxr-x 2 sammy sammy 4096 Jan 7 08:05 config
drwxrwxr-x 5 sammy sammy 4096 Jan 7 08:05 database
drwxrwxr-x 4 sammy sammy 4096 Jun 9 11:19 docker-compose
-rw-rw-r-- 1 sammy sammy 965 Jun 9 11:27 docker-compose.yml
-rw-rw-r-- 1 sammy sammy 1013 Jan 7 08:05 package.json
-rw-rw-r-- 1 sammy sammy 1405 Jan 7 08:05 phpunit.xml
drwxrwxr-x 2 sammy sammy 4096 Jan 7 08:05 public
-rw-rw-r-- 1 sammy sammy 273 Jan 7 08:05 readme.md
drwxrwxr-x 6 sammy sammy 4096 Jan 7 08:05 resources
drwxrwxr-x 2 sammy sammy 4096 Jan 7 08:05 routes
-rw-rw-r-- 1 sammy sammy 563 Jan 7 08:05 server.php
drwxrwxr-x 5 sammy sammy 4096 Jan 7 08:05 storage
drwxrwxr-x 4 sammy sammy 4096 Jan 7 08:05 tests
drwxrwxr-x 41 sammy sammy 4096 Jun 9 11:32 vendor
-rw-rw-r-- 1 sammy sammy 538 Jan 7 08:05 webpack.mix.js
次に、composer installを実行してアプリケーションの依存関係をインストールします。
docker-compose exec app <^>composer install<^>
出力は次のようになります。
[secondary_label Output]
Loading composer repositories with package information
Installing dependencies (including require-dev) from lock file
Package operations: 85 installs, 0 updates, 0 removals
- Installing doctrine/inflector (1.3.1): Downloading (100%)
- Installing doctrine/lexer (1.2.0): Downloading (100%)
- Installing dragonmantank/cron-expression (v2.3.0): Downloading (100%)
- Installing erusev/parsedown (1.7.4): Downloading (100%)
- Installing symfony/polyfill-ctype (v1.13.1): Downloading (100%)
- Installing phpoption/phpoption (1.7.2): Downloading (100%)
- Installing vlucas/phpdotenv (v3.6.0): Downloading (100%)
- Installing symfony/css-selector (v5.0.2): Downloading (100%)
…
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<^>
[secondary_label Output]
Application 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 | /docker-entrypoint.sh: Launching /docker-entrypoint.d/20-envsubst-on-templates.sh
travellist-nginx | /docker-entrypoint.sh: Configuration complete; ready for start up
travellist-nginx | 192.168.0.1 - - [09/Jun/2020:11:46:34 +0000] "GET / HTTP/1.1" 200 627 "-" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.61 Safari/537.36"
travellist-nginx | 192.168.0.1 - - [09/Jun/2020:11:46:35 +0000] "GET / HTTP/1.1" 200 627 "-" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.61 Safari/537.36"
すべてのサービスの状態を維持したまま、Docker Compose環境を一時停止する場合は、次のコマンドを使用します。
docker-compose pause
[secondary_label Output]
Pausing travellist-db ... done
Pausing travellist-nginx ... done
Pausing travellist-app ... done
その後、次のコマンドを使用してサービスを再開できます。
docker-compose unpause
[secondary_label Output]
Unpausing travellist-app ... done
Unpausing travellist-nginx ... done
Unpausing travellist-db ... done
Docker Composeの環境をシャットダウンし、コンテナ、ネットワーク、ボリュームをすべて削除するには、次のコマンドを使用します。
docker-compose down
[secondary_label Output]
Stopping 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
すべてのDocker Composeコマンドの概要については、Docker Composeコマンドラインリファレンスを参照してください。
まとめ
このガイドでは、Docker Composeを使用して3つのコンテナでDocker環境を設定し、YAMLファイルにインフラストラクチャを定義しました。
今後は、開発・テスト用にローカル Webサーバーをインストールおよびセットアップする必要なく、Laravelアプリケーションで作業できます。さらに、複製や分散が容易な使い捨てできる環境で作業することもできるので、アプリケーションの開発や実稼働環境への移行に役立ちます。