Ubuntu 20.04でDocker Composeを使用してLaravelをインストールおよびセットアップする方法

はじめに

アプリケーションのコンテナ化とは、コンテナと呼ばれる軽量環境で実行できるように、アプリケーションおよびそのコンポーネントを適応させるプロセスを指します。このような環境は他から分離され、使い捨てできるため、アプリケーションの開発、テスト、および実稼働環境へのデプロイに活用できます。

このガイドでは、開発用に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+XYENTERを押して保存ができます。

ステップ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がポート9000appサービスを使用して*.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テーブルには、idnamevisitedの3つのフィールドがあります。 visitedフィールドは、まだ訪れていない場所を識別するために使用されるフラグです。必要に応じてサンプルの場所を変更したり、新しい場所を加えたりしてください。完了したら、ファイルを保存して閉じます。

アプリケーションのDockerfileとサービス設定ファイルのセットアップを完了しました。次に、サービスの作成時にこれらのファイルを使用するように、Docker Composeを設定します。

ステップ5 — Docker Composeを使用したマルチコンテナ環境の作成

Docker Composeを使用すると、Dockerで実行されるアプリケーション用のマルチコンテナ環境を作成できます。サービス定義を使用して、ネットワークやデータボリュームを共有できる複数のコンテナで完全にカスタマイズ可能な環境を構築します。これにより、アプリケーションコンポーネント間のシームレスな統合が可能になります。

サービス定義を設定するために、docker-compose.ymlという新しいファイルを作成します。通常、このファイルはアプリケーションフォルダのrootにあり、コンテナの構築に使用するベースイメージ、およびサービスの相互作用など、コンテナ化された環境を定義します。

docker-compose.ymlファイルでappdbnginxの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 

ここで、appdbnginxサービスを加えるように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サービスのローカルイメージを構築するよう指示します。引数useruidは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を使用して、ブラウザからアプリケーションにアクセスしてください。

以下のページが表示されます。

Laravelアプリケーションのデモ

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アプリケーションで作業できます。さらに、複製や分散が容易な使い捨てできる環境で作業することもできるので、アプリケーションの開発や実稼働環境への移行に役立ちます。