Ubuntu 20.04でDockerComposeを使用してLaravel、Nginx、およびMySQLをセットアップする方法
著者は、 Write for DOnations プログラムの一環として、 FreeBSDFoundationを選択して寄付を受け取りました。
序章
過去数年間、 Docker は、一時的なコンテナーでのアプリケーションの実行とデプロイを簡素化する方法のおかげで、アプリケーションをデプロイするために頻繁に使用されるソリューションになりました。 たとえば、 PHP 、 Nginx 、 MySQL 、および Laravel フレームワークでLEMPアプリケーションスタックを使用している場合、Dockerは大幅にセットアッププロセスを合理化します。
Docker Compose は、開発者がアプリケーションサービス、ネットワーク、ボリュームなどのインフラストラクチャを1つのファイルで定義できるようにすることで、開発プロセスをさらに簡素化しました。 Docker Composeは、複数のdocker container create
およびdocker container run
コマンドを実行するための効率的な代替手段を提供します。
このチュートリアルでは、Laravelフレームワークを使用してWebアプリケーションを構築します。NginxをWebサーバー、MySQLをデータベースとして、すべてDockerコンテナー内に配置します。 スタック構成全体をdocker-compose
ファイルで定義し、PHP、MySQL、およびNginxの構成ファイルも定義します。
前提条件
始める前に、次のものが必要です。
- 1台のUbuntu20.04サーバー、および
sudo
権限を持つ非root
ユーザー。 Ubuntu 20.04を使用したサーバーの初期設定チュートリアルに従って、これを設定します。 - Ubuntu20.04にDockerをインストールして使用する方法の手順1と2に従ってDockerをインストールしました。
- Ubuntu 20.04にDockerComposeをインストールする方法のステップ1に従って、DockerComposeをインストールしました。
ステップ1—Laravelのダウンロードと依存関係のインストール
最初のステップとして、最新バージョンのLaravelを入手し、PHPのアプリケーションレベルのパッケージマネージャーであるComposerを含むプロジェクトの依存関係をインストールします。 Composerをグローバルにインストールする必要がないように、Dockerを使用してこれらの依存関係をインストールします。
まず、ホームディレクトリにいることを確認し、最新のLaravelリリースをlaravel-app
というディレクトリに複製します。
- cd ~
- git clone https://github.com/laravel/laravel.git laravel-app
laravel-app
ディレクトリに移動します。
- cd ~/laravel-app
次に、Dockerの composer image を使用して、Laravelプロジェクトに必要なディレクトリをマウントし、Composerをグローバルにインストールするオーバーヘッドを回避します。
- docker run --rm -v $(pwd):/app composer install
-v
および--rm
フラグをdocker run
とともに使用すると、削除される前に現在のディレクトリにバインドマウントされるエフェメラルコンテナが作成されます。 これにより、~/laravel-app
ディレクトリの内容がコンテナにコピーされ、Composerがコンテナ内に作成するvendor
フォルダが現在のディレクトリに確実にコピーされます。
最後のステップとして、プロジェクトディレクトリに権限を設定して、root以外のユーザーが所有するようにします。
- sudo chown -R sammy:sammy ~/laravel-app
これは、ステップ4でアプリケーションイメージのDockerfileを作成するときに重要になります。これにより、アプリケーションコードを操作し、root以外のユーザーとしてコンテナー内のプロセスを実行できるようになります。
アプリケーションコードを配置したら、DockerComposeを使用したサービスの定義に進むことができます。
ステップ2—Docker作成ファイルを作成する
Docker Composeを使用してアプリケーションを構築すると、インフラストラクチャのセットアップとバージョン管理のプロセスが簡素化されます。 Laravelアプリケーションをセットアップするには、Webサーバー、データベース、およびアプリケーションサービスを定義するdocker-compose
ファイルを作成します。
ファイルを開きます。
- nano ~/laravel-app/docker-compose.yml
docker-compose
ファイルでは、app
、webserver
、およびdb
の3つのサービスを定義します。 次のコードをファイルに追加します。必ず、db
サービスで環境変数として定義されているMYSQL_ROOT_PASSWORD
を、選択した強力なパスワードに置き換えてください。
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: laravel
MYSQL_ROOT_PASSWORD: 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から nginx:alpine image をプルし、ポート80
と443
を公開します。db
:このサービス定義はDockerから mysql:5.7.22 image をプルし、アプリケーション用のlaravel
と呼ばれるデータベースや[X196X ]データベースのroot