著者は、 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というディレクトリに複製します。

  1. cd ~
  2. git clone https://github.com/laravel/laravel.git laravel-app

laravel-appディレクトリに移動します。

  1. cd ~/laravel-app

次に、Dockerの composer image を使用して、Laravelプロジェクトに必要なディレクトリをマウントし、Composerをグローバルにインストールするオーバーヘッドを回避します。

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

-vおよび--rmフラグをdocker runとともに使用すると、削除される前に現在のディレクトリにバインドマウントされるエフェメラルコンテナが作成されます。 これにより、~/laravel-appディレクトリの内容がコンテナにコピーされ、Composerがコンテナ内に作成するvendorフォルダが現在のディレクトリに確実にコピーされます。

最後のステップとして、プロジェクトディレクトリに権限を設定して、root以外のユーザーが所有するようにします。

  1. sudo chown -R sammy:sammy ~/laravel-app

これは、ステップ4でアプリケーションイメージのDockerfileを作成するときに重要になります。これにより、アプリケーションコードを操作し、root以外のユーザーとしてコンテナー内のプロセスを実行できるようになります。

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

ステップ2—Docker作成ファイルを作成する

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

ファイルを開きます。

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

docker-composeファイルでは、appwebserver、およびdbの3つのサービスを定義します。 次のコードをファイルに追加します。必ず、dbサービスで環境変数として定義されているMYSQL_ROOT_PASSWORDを、選択した強力なパスワードに置き換えてください。

〜/ 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: 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 をプルし、ポート80443を公開します。
  • db:このサービス定義はDockerから mysql:5.7.22 image をプルし、アプリケーション用のlaravelと呼ばれるデータベースや[X196X ]データベースのroot