One place for hosting & domains

      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を実行する方法についても説明します。

      前提条件

      ステップ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ディレクトリに移動します。

      次のステップでは、アプリケーションを設定するための.env設定ファイルを作成します。

      ステップ2 —アプリケーションの.envファイルの設定

      Laravel設定ファイルは、アプリケーションのrootディレクトリ内のconfigというディレクトリにあります。さらに、資格情報やデプロイ間で異なる可能性のある情報など、環境に依存する設定を設定するために.envファイルが使用されます。このファイルはリビジョン管理に含まれません 。

      警告:環境設定ファイルには、データベース資格情報およびセキュリティキーなど、サーバーに関する機密性の高い情報が含まれています。そのため、このファイルは公開しないでください。

      .envファイルに含まれる値は、 config ディレクトリにある通常の設定ファイルに設定された値よりも優先されます。新しい環境にインストールするたびに、データベース接続設定、デバグオプション、アプリケーション URL など、アプリケーションが実行されている環境によって異なる可能性のある項目を定義するために、調整された環境ファイルが必要です。

      次に、セットアップする開発環境の設定オプションをカスタマイズするために新しい.envファイルを作成します。Laravelには、独自のファイルを作成するためにコピーできる.envのサンプルファイルが付属しています。

      nanoまたは適切なテキストエディターを使用してこのファイルを開きます。

      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を作成します。

      次の内容を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ファイルを作成します。

      一般的な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イメージを構築します。

      このコマンドは、完了するまでに数分かかる場合があります。次のような出力が表示されます。

      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

      ビルドが完了したら、次のコマンドを使用してこの動作環境をバックグラウンドモードで実行できます。

      Output

      Creating travellist-db ... done Creating travellist-app ... done Creating travellist-nginx ... done

      これにより、コンテナがバックグラウンドで実行されます。アクティブなサービスの状態に関する情報を表示するには、次のコマンドを使用します。

      出力は次のようになります。

      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

      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

      出力は次のようになります。

      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 > 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

      Output

      Application 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環境を一時停止する場合は、次のコマンドを使用します。

      Output

      Pausing travellist-db ... done Pausing travellist-nginx ... done Pausing travellist-app ... done

      その後、次のコマンドを使用してサービスを再開できます。

      Output

      Unpausing travellist-app ... done Unpausing travellist-nginx ... done Unpausing travellist-db ... done

      Docker Composeの環境をシャットダウンし、コンテナ、ネットワーク、ボリュームをすべて削除するには、次のコマンドを使用します。

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



      Source link