はじめに
アプリケーションのコンテナ化とは、コンテナと呼ばれる軽量環境で実行できるように、アプリケーションおよびそのコンポーネントを適応させるプロセスを指します。このような環境は他から分離され、使い捨てできるため、アプリケーションの開発、テスト、および実稼働環境へのデプロイに活用できます。
このガイドでは、開発用にDocker Composeを使用してLaravelアプリケーションをコンテナ化します。終了すると、3つの別々のサービスコンテナで実行されるデモ用Laravelアプリケーションが作成されます。
- PHP7.4-FPMを実行する
app
サービス。 - MySQL 5.7を実行する
db
サービス。 - Laravelアプリケーションを最終ユーザーに提供する前に、
app
サービスを利用してPHPコードを解析するnginx
サービス。
開発プロセスを合理化し、アプリケーションのデバグを容易にするために、共有ボリュームを使用してアプリケーションファイルの同期を維持します。また、docker-compose exec
コマンドを使用して、app
コンテナでComposerおよびArtisanを実行する方法についても説明します。
前提条件
- 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
ファイルが使用されます。このファイルはリビジョン管理に含まれません 。
警告:環境設定ファイルには、データベース資格情報およびセキュリティキーなど、サーバーに関する機密性の高い情報が含まれています。そのため、このファイルは公開しないでください。
.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
のリストの値をデータベースサービス名に置き換えます。
.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イメージは、Docker Hubの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
引数を使用して新しいシステムユーザーが作成され、設定されます。これらの値は、ビルド時に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設定をそのファイルにコピーします。
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
という名前の新しいテーブルが作成されます。次に、テーブルに場所のサンプルデータが入力されます。
次のコードをファイルに追加します。
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
ファイルにコピーします。
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
ノードの下にコピーします。
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
ノードに次のサービス定義を加えます。
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
サービス
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イメージを定義します。この場合、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
ファイルは次のようになります。
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
このコマンドは、完了するまでに数分かかる場合があります。次のような出力が表示されます。
OutputBuilding 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
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 /docker-entrypoint.sh ngin ... Up 0.0.0.0:8000->80/tcp
これで動作環境が起動して稼働中になりましたが、アプリケーションのセットアップを完了するには、いくつかのコマンドを実行する必要があります。docker-compose exec
コマンドを使用して、ls -l
などのサービスコンテナ内のコマンドを実行し、アプリケーションディレクトリ内のファイルに関する詳細情報を表示できます。
- docker-compose exec app ls -l
Outputtotal 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
出力は次のようになります。
OutputLoading 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 > IlluminateFoundationComposerScripts::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 | /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
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
すべてのDocker Composeコマンドの概要については、Docker Composeコマンドラインリファレンスを参照してください。
まとめ
このガイドでは、Docker Composeを使用して3つのコンテナでDocker環境を設定し、YAMLファイルにインフラストラクチャを定義しました。
今後は、開発・テスト用にローカル Webサーバーをインストールおよびセットアップする必要なく、Laravelアプリケーションで作業できます。さらに、複製や分散が容易な使い捨てできる環境で作業することもできるので、アプリケーションの開発や実稼働環境への移行に役立ちます。