Docker ComposeでLaravel、Nginx、MySQLをセットアップする方法

著者はhttps://www.brightfunds.org/organizations/the-freebsd-foundation[The FreeBSD Foundation]を選択して、https://do.co/w4do-cta [Donationsの書き込み]プログラムの一環として寄付を受け取りました.

前書き

過去数年間、https://docs.docker.com/ [Docker]は、一時的なhttps://www.docker.com/resourcesでアプリケーションの実行とデプロイを簡素化する方法のおかげで、アプリケーションをデプロイするために頻繁に使用されるソリューションになりました。 / what-c​​ontainer [コンテナ]。 たとえば、https://php.net/docs.php [PHP]、https://nginx.org/en/ [Nginx]、https://dev.mysql.com/でLEMPアプリケーションスタックを使用する場合doc / [MySQL]およびhttps://laravel.com/docs/5.6[Laravel]フレームワークにより、Dockerはセットアッププロセスを大幅に合理化できます。

Docker Composeは、開発者がアプリケーションサービス、ネットワーク、ボリュームなどのインフラストラクチャを単一のファイルで定義できるようにすることで、開発プロセスをさらに簡素化しました。 Docker Composeは、複数の `+ docker container create `および ` docker container run +`コマンドを実行するための効率的な代替手段を提供します。

このチュートリアルでは、NginxをWebサーバー、MySQLをデータベースとして、すべてDockerコンテナー内で、Laravelフレームワークを使用してWebアプリケーションを構築します。 PHP、MySQL、およびNginxの設定ファイルとともに、スタック設定全体を `+ docker-compose +`ファイルで定義します。

前提条件

開始する前に、次のものが必要です。

ステップ1-Laravelのダウンロードと依存関係のインストール

最初のステップとして、Laravelの最新バージョンを取得し、PHPのアプリケーションレベルパッケージマネージャーであるhttps://github.com/composer/docker[Composer]を含むプロジェクトの依存関係をインストールします。 Composerをグローバルにインストールする必要がないように、これらの依存関係をDockerでインストールします。

最初に、ホームディレクトリにいることを確認し、最新のLaravelリリースを `++`というディレクトリにクローンします:

cd ~
git clone https://github.com/laravel/laravel.git

`++`ディレクトリに移動します。

cd ~/

次に、Dockerのhttps://hub.docker.com/r/library/composer/ [+ composer + image]を使用して、Laravelプロジェクトに必要なディレクトリをマウントし、Composerをグローバルにインストールするオーバーヘッドを回避します。

docker run --rm -v $(pwd):/app composer install

`+ -v `および `-rm `フラグを ` docker run `と共に使用すると、削除される前に現在のディレクトリにバインドマウントされる一時的なコンテナが作成されます。 これにより、 `〜/ `ディレクトリの内容がコンテナにコピーされ、Composerがコンテナ内に作成する ` vendor +`フォルダが現在のディレクトリに確実にコピーされるようになります。

最後の手順として、プロジェクトディレクトリにアクセス権を設定して、非* root *ユーザーが所有するようにします。

sudo chown -R $USER:$USER ~/laravel-app

これは、ステップ4でアプリケーションイメージのDockerfileを作成するときに重要です。アプリケーションコードを操作し、非* root *ユーザーとしてコンテナでプロセスを実行できるからです。

アプリケーションコードを配置したら、Docker Composeを使用してサービスの定義に進むことができます。

ステップ2-Docker Composeファイルの作成

Docker Composeを使用してアプリケーションを構築すると、インフラストラクチャのセットアップとバージョン管理のプロセスが簡素化されます。 Laravelアプリケーションをセットアップするには、Webサーバー、データベース、およびアプリケーションサービスを定義する `+ docker-compose +`ファイルを作成します。

ファイルを開きます。

nano ~/laravel-app/docker-compose.yml

+ docker-compose`ファイルでは、3つのサービスを定義します: + app`、 + web server、および` + db + `。 次のコードをファイルに追加します。必ず、https://docs.docker.com/compose/compose-file/#environment [environment variable]として定義されている `+ MYSQL_ROOT_PASSWORD `の* root *パスワードを置き換えてください。選択した強力なパスワードを使用した ` db +`サービス:

〜/ laravel-app / docker-compose.yml

version: '3'
services:

 #PHP Service
 app:
   build:
     context: .
     dockerfile: Dockerfile
   image: digitalocean.com/php
   container_name: app
   restart: unless-stopped
   tty: true
   environment:
     SERVICE_NAME: app
     SERVICE_TAGS: dev
   working_dir: /var/www
   networks:
     - app-network

 #Nginx Service
 webserver:
   image: nginx:alpine
   container_name: webserver
   restart: unless-stopped
   tty: true
   ports:
     - "80:80"
     - "443:443"
   networks:
     - app-network

 #MySQL Service
 db:
   image: mysql:5.7.22
   container_name: db
   restart: unless-stopped
   tty: true
   ports:
     - "3306:3306"
   environment:
     MYSQL_DATABASE:
     MYSQL_ROOT_PASSWORD:
     SERVICE_TAGS: dev
     SERVICE_NAME: mysql
   networks:
     - app-network

#Docker Networks
networks:
 app-network:
   driver: bridge

ここで定義されるサービスは次のとおりです。

  • + app +:このサービス定義にはLaravelアプリケーションが含まれ、ステップ4で定義するカスタムDockerイメージ + digitalocean.com / php +`を実行します。 また、コンテナの `+ working dir`を + / var / www`に設定します。

  • + webserver +:このサービス定義は、Dockerからhttps://hub.docker.com/_/nginx/ [+ nginx:alpine + image]をプルし、ポート `+ 80 `および ` 443 +`を公開します。

  • + db +:このサービス定義は、Dockerからhttps://hub.docker.com/_/mysql/ [+ mysql:5.7.22 + image]をプルし、 `というデータベースを含むいくつかの環境変数を定義しますアプリケーションの `とデータベースの* root *パスワード。 任意の名前をデータベースに自由に付けることができ、 ``を独自の強力なパスワードに置き換える必要があります。 このサービス定義は、ホストのポート「3306」をコンテナのポート「3306」にマップします。

各 `+ container_name +`プロパティは、サービスの名前に対応するコンテナの名前を定義します。 このプロパティを定義しない場合、Dockerは、歴史的に有名な人の名前とアンダースコアで区切られたランダムな単語を組み合わせて、各コンテナに名前を割り当てます。

コンテナ間の通信を容易にするために、サービスは「+ app-network 」と呼ばれるブリッジネットワークに接続されます。 ブリッジネットワークは、同じブリッジネットワークに接続されたコンテナが相互に通信できるようにするソフトウェアブリッジを使用します。 ブリッジドライバは、異なるブリッジネットワーク上のコンテナが互いに直接通信できないように、ホストマシンにルールを自動的にインストールします。 これにより、アプリケーションのセキュリティレベルが向上し、関連するサービスのみが相互に通信できるようになります。 また、関連する機能に接続する複数のネットワークとサービスを定義できることも意味します。たとえば、フロントエンドアプリケーションサービスは「 frontend 」ネットワークを使用でき、バックエンドサービスは「 backend +」ネットワークを使用できます。

ボリュームを追加してマウントをサービス定義にバインドし、アプリケーションデータを保持する方法を見てみましょう。

ステップ3-データの永続化

Dockerには、データを永続化するための強力で便利な機能があります。 このアプリケーションでは、https://docs.docker.com/storage/volumes/ [volumes]およびhttps://docs.docker.com/storage/bind-mounts/[bind mounts]を使用して、データベース、アプリケーションおよび構成ファイル。 ボリュームは、コンテナのライフサイクルを超えたバックアップと永続性の柔軟性を提供し、バインドマウントは開発中のコード変更を容易にし、コンテナでホストファイルまたはディレクトリの変更をすぐに利用できるようにします。 私たちのセットアップは両方を利用します。

`+ docker-compose `ファイルで、 ` db `サービス定義の下に ` dbdata +`というボリュームを定義して、MySQLデータベースを永続化します。

〜/ laravel-app / docker-compose.yml

...
#MySQL Service
db:
 ...


   networks:
     - app-network
 ...

名前付きボリューム `+ dbdata `は、コンテナ内にある ` / var / lib / mysql `フォルダーの内容を保持します。 これにより、データを失うことなく、「 db +」サービスを停止および再起動できます。

ファイルの下部で、 `+ dbdata +`ボリュームの定義を追加します。

〜/ laravel-app / docker-compose.yml

...
#Volumes
volumes:
 dbdata:
   driver: local

この定義を導入すると、サービス全体でこのボリュームを使用できるようになります。

次に、ステップ7で作成するMySQL構成ファイルのバインドマウントを `+ db +`サービスに追加します。

〜/ laravel-app / docker-compose.yml

...
#MySQL Service
db:
 ...
   volumes:
     - dbdata:/var/lib/mysql

 ...

このバインドマウントは、コンテナの `〜/ laravel-app / mysql / my.cnf +`を ` / etc / mysql / my.cnf +`にバインドします。

次に、バインドマウントを `+ webserver +`サービスに追加します。 2つあります。1つはアプリケーションコード用で、もう1つは手順6で作成するNginx構成定義用です。

〜/ laravel-app / docker-compose.yml

#Nginx Service
webserver:
 ...



 networks:
     - app-network

最初のバインドマウントは、 +〜/ laravel-app`ディレクトリ内のアプリケーションコードをコンテナ内の + / var / www`ディレクトリにバインドします。 `〜/ laravel-app / nginx / conf.d / +`に追加する設定ファイルは、コンテナ内の ` / etc / nginx / conf.d / +`にもマウントされ、追加できるようになります。または、必要に応じて構成ディレクトリの内容を変更します。

最後に、アプリケーションコードと設定ファイルのために、次のバインドマウントを「+ app +」サービスに追加します。

〜/ laravel-app / docker-compose.yml

#PHP Service
app:
 ...



 networks:
     - app-network

+ app +`サービスは、アプリケーションコードを含む `+〜/ laravel-app`フォルダーをコンテナーの + / var / www`フォルダーにバインドマウントします。 これにより、ローカルアプリケーションディレクトリに加えられた変更がコンテナ内に即座に反映されるため、開発プロセスが高速化されます。 また、PHP構成ファイル `〜/ laravel-app / php / local.ini +`をコンテナ内の ` / usr / local / etc / php / conf.d / local.ini +`にバインドしています。 手順5でローカルPHP構成ファイルを作成します。

`+ docker-compose +`ファイルは次のようになります。

〜/ laravel-app / docker-compose.yml

version: '3'
services:

 #PHP Service
 app:
   build:
     context: .
     dockerfile: Dockerfile
   image: digitalocean.com/php
   container_name: app
   restart: unless-stopped
   tty: true
   environment:
     SERVICE_NAME: app
     SERVICE_TAGS: dev
   working_dir: /var/www
   volumes:
     - ./:/var/www
     - ./php/local.ini:/usr/local/etc/php/conf.d/local.ini
   networks:
     - app-network

 #Nginx Service
 webserver:
   image: nginx:alpine
   container_name: webserver
   restart: unless-stopped
   tty: true
   ports:
     - "80:80"
     - "443:443"
   volumes:
     - ./:/var/www
     - ./nginx/conf.d/:/etc/nginx/conf.d/
   networks:
     - app-network

 #MySQL Service
 db:
   image: mysql:5.7.22
   container_name: db
   restart: unless-stopped
   tty: true
   ports:
     - "3306:3306"
   environment:
     MYSQL_DATABASE:
     MYSQL_ROOT_PASSWORD:
     SERVICE_TAGS: dev
     SERVICE_NAME: mysql
   volumes:
     - dbdata:/var/lib/mysql/
     - ./mysql/my.cnf:/etc/mysql/my.cnf
   networks:
     - app-network

#Docker Networks
networks:
 app-network:
   driver: bridge
#Volumes
volumes:
 dbdata:
   driver: local

ファイルを保存し、変更が完了したらエディターを終了します。

`+ docker-compose +`ファイルを作成したら、アプリケーションのカスタムイメージをビルドできます。

ステップ4-Dockerfileの作成

Dockerでは、_Dockerfile_を使用して個々のコンテナ内の環境を指定できます。 Dockerfileを使用すると、アプリケーションに必要なソフトウェアをインストールし、要件に基づいて設定を構成するために使用できるカスタムイメージを作成できます。 作成したカスタムイメージをhttps://hub.docker.com/[Docker Hub]または任意のプライベートレジストリにプッシュできます。

+ Dockerfile`は +〜/ laravel-app`ディレクトリにあります。 ファイルを作成します。

nano ~/laravel-app/Dockerfile

この `+ Dockerfile +`はベースイメージを設定し、Laravelアプリケーションイメージをビルドするために必要なコマンドと指示を指定します。 ファイルに次のコードを追加します。

〜/ laravel-app / php / Dockerfile

FROM php:7.2-fpm

# Copy composer.lock and composer.json
COPY composer.lock composer.json /var/www/

# Set working directory
WORKDIR /var/www

# Install dependencies
RUN apt-get update && apt-get install -y \
   build-essential \
   mysql-client \
   libpng-dev \
   libjpeg62-turbo-dev \
   libfreetype6-dev \
   locales \
   zip \
   jpegoptim optipng pngquant gifsicle \
   vim \
   unzip \
   git \
   curl

# Clear cache
RUN apt-get clean && rm -rf /var/lib/apt/lists/*

# Install extensions
RUN docker-php-ext-install pdo_mysql mbstring zip exif pcntl
RUN docker-php-ext-configure gd --with-gd --with-freetype-dir=/usr/include/ --with-jpeg-dir=/usr/include/ --with-png-dir=/usr/include/
RUN docker-php-ext-install gd

# Install composer
RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer

# Add user for laravel application
RUN groupadd -g 1000 www
RUN useradd -u 1000 -ms /bin/bash -g www www

# Copy existing application directory contents
COPY . /var/www

# Copy existing application directory permissions
COPY --chown=www:www . /var/www

# Change current user to www
USER www

# Expose port 9000 and start php-fpm server
EXPOSE 9000
CMD ["php-fpm"]

最初に、Dockerfileはhttps://hub.docker.com/_/php/ [+ php:7.2-fpm + Docker image]の上にイメージを作成します。 これは、Debianベースのイメージで、PHP FastCGI実装https://php-fpm.org/[PHP-FPM]がインストールされています。 このファイルは、Laravelの必須パッケージである + mcrypt ++ pdo_mysql ++ mbstring +、および `+ imagick `と ` composer +`もインストールします。

`+ RUN `ディレクティブは、コンテナ内の設定を更新、インストール、設定するコマンドを指定します。これには、* www *という専用のユーザーとグループの作成が含まれます。 ` WORKDIR `命令は、アプリケーションの作業ディレクトリとして ` / var / www +`ディレクトリを指定します。

権限が制限された専用のユーザーとグループを作成すると、デフォルトで* root として実行されるDockerコンテナーを実行する際の固有の脆弱性が緩和されます。 このコンテナを root として実行する代わりに、 www *ユーザーを作成しました。このユーザーは、+ varアプリケーションフォルダのパーミッションをコピーするための `-chown +`フラグ。

最後に、 `+ EXPOSE `コマンドは、 ` php-fpm `サーバーのコンテナ、 ` 9000 `のポートを公開します。 ` CMD `は、コンテナの作成後に実行するコマンドを指定します。 ここで、 ` CMD `はサーバーを起動する `" php-fpm "+`を指定します。

ファイルを保存し、変更が完了したらエディターを終了します。

これで、PHP構成の定義に進むことができます。

ステップ5-PHPの構成

`+ docker-compose +`ファイルでインフラストラクチャを定義したので、Nginxからの着信リクエストに対してPHPプロセッサとして機能するようにPHPサービスを設定できます。

PHPを設定するには、 + php`フォルダー内に + local.ini`ファイルを作成します。 これは、ステップ2でコンテナ内の `+ / usr / local / etc / php / conf.d / local.ini `にバインドマウントしたファイルです。 このファイルを作成すると、PHPが起動時に読み込むデフォルトの ` php.ini`ファイルをオーバーライドできます。

`+ php +`ディレクトリを作成します:

mkdir ~/laravel-app/php

次に、 `+ local.ini +`ファイルを開きます:

nano ~/laravel-app/php/local.ini

PHPの構成方法を示すため、次のコードを追加して、アップロードされるファイルのサイズ制限を設定します。

〜/ laravel-app / php / local.ini

upload_max_filesize=40M
post_max_size=40M

`+ upload_max_filesize `および ` post_max_size `ディレクティブは、アップロードされたファイルの最大許容サイズを設定し、 ` local.ini `ファイルから ` php.ini `設定を設定する方法を示します。 ` local.ini +`ファイルに上書きしたいPHP固有の設定を置くことができます。

ファイルを保存して、エディターを終了します。

PHPの `+ local.ini +`ファイルを配置したら、Nginxの構成に進むことができます。

ステップ6-Nginxの構成

PHPサービスを構成したら、Nginxサービスを変更して、動的コンテンツを提供するFastCGIサーバーとしてPHP-FPMを使用できます。 FastCGIサーバーは、対話型プログラムをWebサーバーとインターフェイスさせるためのバイナリプロトコルに基づいています。 詳細については、https://www.digitalocean.com/community/tutorials/understanding-and-implementing-fastcgi-proxying-in-nginx [NginxでのFastCGIプロキシの理解と実装]のこの記事を参照してください。

Nginxを設定するには、 `〜/ laravel-app / nginx / conf.d / +`フォルダーにサービス設定で ` app.conf +`ファイルを作成します。

最初に、 `+ nginx / conf.d / +`ディレクトリを作成します:

mkdir -p ~/laravel-app/nginx/conf.d

次に、 `+ app.conf +`設定ファイルを作成します:

nano ~/laravel-app/nginx/conf.d/app.conf

次のコードをファイルに追加して、Nginx構成を指定します。

〜/ laravel-app / nginx / conf.d / app.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;
   }
}

server blockは、次のディレクティブを使用してNginx Webサーバーの構成を定義します。

  • + listen +:このディレクティブは、サーバーが着信リクエストをリッスンするポートを定義します。

  • + error_log +`および `+ access_log +:これらのディレクティブは、ログを書き込むためのファイルを定義します。

  • + root +:このディレクティブはルートフォルダーパスを設定し、ローカルファイルシステム上のリクエストされたファイルへの完全なパスを形成します。

+ php`ロケーションブロックでは、 + fastcgi_pass`ディレクティブは `+ app `サービスがポート ` 9000 `のTCPソケットをリッスンしていることを指定します。 これにより、PHP-FPMサーバーは、Unixソケットではなくネットワーク経由でリッスンします。 Unixソケットは、TCPソケットよりも速度がわずかに優れていますが、ネットワークプロトコルがないため、ネットワークスタックをスキップします。 ホストが1台のマシンにある場合、Unixソケットは理にかなっていますが、異なるホストで実行されているサービスがある場合、TCPソケットには分散サービスに接続できるという利点があります。 ` app `コンテナは ` webserver +`コンテナとは異なるホストで実行されているため、設定にはTCPソケットが最も理にかなっています。

ファイルを保存し、変更が完了したらエディターを終了します。

ステップ2で作成したバインドマウントのおかげで、 `+ nginx / conf.d / `フォルダー内で行った変更はすべて、 ` webserver +`コンテナー内に直接反映されます。

次に、MySQLの設定を見てみましょう。

ステップ7-MySQLの構成

PHPとNginxを構成すると、MySQLをアプリケーションのデータベースとして機能させることができます。

MySQLを設定するには、 + mysql`フォルダーに + my.cnf`ファイルを作成します。 これは、ステップ2でコンテナ内の `+ / etc / mysql / my.cnf `にバインドマウントしたファイルです。 このバインドマウントにより、必要に応じて ` my.cnf +`設定をオーバーライドできます。

これがどのように機能するかを示すために、一般的なクエリログを有効にし、ログファイルを指定する設定を `+ my.cnf +`ファイルに追加します。

まず、 `+ mysql`ディレクトリを作成します:

mkdir ~/laravel-app/mysql

次に、 `+ my.cnf +`ファイルを作成します。

nano ~/laravel-app/mysql/my.cnf

ファイルに次のコードを追加して、クエリログを有効にし、ログファイルの場所を設定します。

〜/ laravel-app / mysql / my.cnf

[mysqld]
general_log = 1
general_log_file = /var/lib/mysql/general.log

この「+ my.cnf 」ファイルはログを有効にし、「 general_log 」設定を「+1」として定義して一般的なログを許可します。 `+ general_log_file +`設定は、ログが保存される場所を指定します。

ファイルを保存して、エディターを終了します。

次のステップは、コンテナを起動することです。

ステップ8-コンテナーの実行と環境設定の変更

+ docker-compose +`ファイルですべてのサービスを定義し、これらのサービスの設定ファイルを作成したので、コンテナーを開始できます。 ただし、最後のステップとして、Laravelにデフォルトで含まれる `+ .env.example`ファイルのコピーを作成し、コピーに + .env`という名前を付けます。これは、Laravelが環境を定義するために必要なファイルです。

cp .env.example .env

コンテナを開始したら、このファイルで設定の特定の詳細を設定します。

`+ docker-compose +`ファイルですべてのサービスを定義したら、1つのコマンドを発行するだけで、すべてのコンテナを起動し、ボリュームを作成し、ネットワークをセットアップして接続するだけです。

docker-compose up -d

初めて `+ docker-compose up `を実行すると、必要なすべてのDockerイメージがダウンロードされます。これには時間がかかる場合があります。 イメージがダウンロードされてローカルマシンに保存されると、Composeはコンテナを作成します。 ` -d +`フラグはプロセスをデーモン化し、バックグラウンドでコンテナを実行します。

プロセスが完了したら、次のコマンドを使用して、実行中のすべてのコンテナーを一覧表示します。

docker ps

+ app、` + web server`、および `+ db`コンテナに関する詳細を含む次の出力が表示されます。

OutputCONTAINER ID        NAMES               IMAGE                             STATUS              PORTS
c31b7b3251e0        db                  mysql:5.7.22                      Up 2 seconds        0.0.0.0:3306->3306/tcp
ed5a69704580        app                 digitalocean.com/php              Up 2 seconds        9000/tcp
5ce4ee31d7c0        webserver           nginx:alpine                      Up 2 seconds        0.0.0.0:80->80/tcp, 0.0.0.0:443->443/tcp

この出力の「+ CONTAINER ID 」は各コンテナの一意の識別子であり、「 NAMES 」は各コンテナに関連付けられたサービス名をリストします。 これらの識別子の両方を使用して、コンテナにアクセスできます。 「 IMAGE 」は各コンテナのイメージ名を定義し、「 STATUS +」はコンテナの状態に関する情報を提供します:コンテナの実行中、再起動中、停止中。

これで、 `+ app `コンテナの ` .env +`ファイルを変更して、設定に関する特定の詳細を含めることができます。

`+ docker-compose exec +`を使用してファイルを開きます。これにより、コンテナで特定のコマンドを実行できます。 この場合、ファイルを編集用に開いています。

docker-compose exec  nano .env

`+ DB_CONNECTION +`を指定しているブロックを見つけて、セットアップの詳細を反映するように更新します。 次のフィールドを変更します。

  • `+ DB_HOST `は ` db +`データベースコンテナになります。

  • `+ DB_DATABASE `は `+`データベースになります。

  • `+ DB_USERNAME `は、データベースに使用するユーザー名になります。 この場合、 `+`を使用します。

  • `+ DB_PASSWORD +`は、このユーザーアカウントに使用する安全なパスワードです。

/var/www/.env

DB_CONNECTION=mysql
DB_HOST=
DB_PORT=3306
DB_DATABASE=
DB_USERNAME=
DB_PASSWORD=

変更を保存して、エディターを終了します。

次に、 `+ php artisan key:generate`コマンドでLaravelアプリケーションのアプリケーションキーを設定します。 このコマンドはキーを生成し、それを `+ .env +`ファイルにコピーして、ユーザーセッションと暗号化されたデータが安全に保たれるようにします:

docker-compose exec  php artisan key:generate

これで、アプリケーションの実行に必要な環境設定ができました。 これらの設定をファイルにキャッシュして、アプリケーションの読み込み速度を上げるには、次を実行します:

docker-compose exec  php artisan config:cache

構成設定は、コンテナの `+ / var / www / bootstrap / cache / config.php +`にロードされます。

最後のステップとして、ブラウザーで「+ http:// +」にアクセスします。 Laravelアプリケーションの次のホームページが表示されます。

image:https://assets.digitalocean.com/articles/laravel_docker/laravel_home.png [Laravelホームページ]

コンテナを実行し、構成情報を設定したら、「+ db 」コンテナの「+」データベースのユーザー情報の構成に進むことができます。

ステップ9-MySQL用のユーザーの作成

デフォルトのMySQLインストールでは、* root 管理アカウントのみが作成されます。このアカウントには、データベースサーバーに対する無制限の権限があります。 一般に、データベースとやり取りするときは root *管理アカウントを使用しない方が良いでしょう。 代わりに、アプリケーションのLaravelデータベース専用のデータベースユーザーを作成しましょう。

新しいユーザーを作成するには、 `+ docker-compose exec `で ` db +`コンテナでインタラクティブなbashシェルを実行します:

docker-compose exec  bash

コンテナ内で、MySQL * root *管理アカウントにログインします。

mysql -u root -p

`+ docker-compose +`ファイルでのインストール中に、MySQL * root *アカウントに設定したパスワードの入力を求められます。

まず、 `+ docker-compose `ファイルで定義した `+`というデータベースを確認します。 既存のデータベースを確認するには、 `+ show databases +`コマンドを実行します:

show databases;

出力にリストされた `++`データベースが表示されます。

Output+--------------------+
| Database           |
+--------------------+
| information_schema |
|             |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
5 rows in set (0.00 sec)

次に、このデータベースへのアクセスを許可するユーザーアカウントを作成します。 ユーザー名は「+」になりますが、必要に応じて別の名前に置き換えることもできます。 ここのユーザー名とパスワードが、前のステップで ` .env +`ファイルに設定した詳細と一致していることを確認してください:

GRANT ALL ON laravel.* TO ''@'%' IDENTIFIED BY '';

特権をフラッシュして、MySQLサーバーに変更を通知します。

FLUSH PRIVILEGES;

MySQLを終了します。

EXIT;

最後に、コンテナを終了します。

exit

Laravelアプリケーションデータベースのユーザーアカウントを構成し、データを移行してTinkerコンソールを使用する準備ができました。

ステップ10-データの移行とTinker Consoleの操作

アプリケーションを実行して、データを移行し、 `+ tinker `コマンドを試すことができます。これにより、Laravelがプリロードされたhttp://psysh.org/[_PsySH_]コンソールが開始されます。 PsySHは、ランタイム開発者コンソールおよびPHP用の対話型デバッガーであり、TinkerはLaravel専用のREPLです。 ` tinker +`コマンドを使用すると、インタラクティブシェルのコマンドラインからLaravelアプリケーションと対話できます。

最初に、コンテナ内からデータベースに `+ migrations `テーブルを作成するLaravel ` artisan migrate +`コマンドを実行して、MySQLへの接続をテストします。

docker-compose exec  php artisan migrate

このコマンドは、デフォルトのLaravelテーブルを移行します。 移行を確認する出力は次のようになります。

Output
Migration table created successfully.
Migrating: 2014_10_12_000000_create_users_table
Migrated:  2014_10_12_000000_create_users_table
Migrating: 2014_10_12_100000_create_password_resets_table
Migrated:  2014_10_12_100000_create_password_resets_table

移行が完了したら、クエリを実行して、 `+ tinker +`コマンドを使用してデータベースに適切に接続されているかどうかを確認できます。

docker-compose exec  php artisan tinker

移行したデータを取得して、MySQL接続をテストします。

\DB::table('migrations')->get();

次のような出力が表示されます。

Output=> Illuminate\Support\Collection {#2856
    all: [
      {#2862
        +"id": 1,
        +"migration": "2014_10_12_000000_create_users_table",
        +"batch": 1,
      },
      {#2865
        +"id": 2,
        +"migration": "2014_10_12_100000_create_password_resets_table",
        +"batch": 1,
      },
    ],
  }

「+ tinker +」を使用して、データベースとやり取りしたり、サービスやモデルを実験したりできます。

Laravelアプリケーションが準備できたら、さらに開発と実験を行う準備が整います。

結論

サーバーでLEMPスタックアプリケーションが実行されました。Laravelのウェルカムページにアクセスし、MySQLデータベースの移行を作成してテストしました。

このインストールのシンプルさの鍵はDocker Composeです。これにより、単一のコマンドで単一ファイルに定義されたDockerコンテナーのグループを作成できます。 Docker ComposeでCIを行う方法の詳細については、https://www.digitalocean.com/community/tutorials/how-to-configure-a-continuous-integration-testing-environment-をご覧ください。 with-docker-and-docker-compose-on-ubuntu-16-04 [Ubuntu 16.04でDockerおよびDocker Composeを使用して継続的統合テスト環境を構成する方法]。 Laravelアプリケーションの展開プロセスを合理化する場合、https://www.digitalocean.com/community/tutorials/automatically-deploy-laravel-applications-deployer-ubuntu [Ubuntu 16.04のDeployerでLaravelアプリケーションを自動的に展開する方法]関連するリソースであること。

前の投稿:Ubuntu 16.04に最新のMySQLをインストールする方法
次の投稿:Ubuntu 16.04でrbenvを使用してRuby on Railsをインストールする方法