Ubuntu22.04でDockerComposeを使用してLaravelをインストールおよびセットアップする方法

提供:Dev Guides
移動先:案内検索

序章

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+xYEnterの順に押して確定します。

ステップ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に設定し、ポート9000appサービスを使用して*.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テーブルには、idname、およびvisitedの3つのフィールドが含まれています。 visitedフィールドは、まだ移動している場所を識別するために使用されるフラグです。 サンプルの場所を自由に変更するか、新しい場所を含めてください。 完了したら、ファイルを保存して閉じます。

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

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

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

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

docker-compose.ymlファイルで、appdb、および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ノードを編集して、appdb、および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コンテナに存在するため、ドキュメントルートではないことに注意してください。
  • networkstravellistという名前のネットワークを使用するようにこのサービスを設定します。

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ファイルを自動的にインポートします。
  • networkstravellistという名前のネットワークを使用するようにこのサービスを設定します。

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サーバーへの外部アクセスを許可するポートリダイレクトを設定します。
  • volumes2つの共有ボリュームを作成します。 1つ目は、現在のディレクトリのコンテンツをコンテナ内の/var/wwwに同期します。 このように、アプリケーションファイルにローカルの変更を加えると、コンテナー内のNginxによって提供されるアプリケーションにすばやく反映されます。 2番目のボリュームでは、docker-compose/nginx/travellist.confにあるNginx構成ファイルがコンテナーのNginx構成フォルダーにコピーされていることを確認します。
  • networkstravellistという名前のネットワークを使用するようにこのサービスを設定します。

完成した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.

アプリケーションをテストする前に最後に行う必要があるのは、artisanLaravelコマンドラインツールを使用して一意のアプリケーションキーを生成することです。 このキーは、ユーザーセッションやその他の機密データを暗号化するために使用されます。

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アプリケーションで作業できます。 さらに、簡単に複製および配布できる使い捨て環境で作業することになります。これは、アプリケーションの開発中や本番環境への移行時に役立ちます。