Laravel Docker · 6 min read · Sep 23, 2025

Ubuntu 22.04にDockerでLaravelをインストールする方法

Laravelは、モダンなPHPアプリケーションを構築するためのツールとリソースのセットを提供する無料のオープンソースPHPフレームワークです。互換性のあるパッケージや拡張機能が豊富にあり、Laravelは人気を博し、多くの開発者が選択するフレームワークとなっています。Laravelは、Eloquentと呼ばれるORM(オブジェクトリレーショナルマッパー)を含む強力なデータベースツールを提供し、データベースマイグレーションを作成するための組み込みメカニズムも備えています。新しいモデル、コントローラー、その他のアプリケーションコンポーネントをブートストラップするために使用できるコマンドラインツールArtisanが付属しており、全体的なアプリケーション開発を加速します。

アプリケーションをコンテナ化するとは、アプリケーションとそのコンポーネントを適応させて、コンテナと呼ばれる軽量環境で実行できるようにするプロセスを指します。このガイドでは、Docker Composeを使用して開発用のLaravelアプリケーションをコンテナ化します。

私たちは、Laravelアプリケーションのために3つのDockerコンテナを作成します。

  • PHP 8.2-FPMを実行するappサービス
  • MySQL 8.0を実行するdbサービス
  • Laravelアプリケーションをユーザーに提供する前にPHPコードを解析するためにappサービスを使用するnginxサービス

また、Let’s Encryptを使用してLaravelウェブサイトのSSL証明書も作成します。

前提条件

  • Ubuntu 22.04を実行しているサーバー。
  • sudo権限を持つ非rootユーザー。
  • サーバーを指す完全修飾ドメイン名(FQDN)。ここでは、example.comをドメイン名として使用します。
  • すべてが更新されていることを確認してください。 $ sudo apt update
  • 基本的なユーティリティパッケージをインストールします。いくつかはすでにインストールされているかもしれません。 $ sudo apt install wget curl nano software-properties-common dirmngr apt-transport-https gnupg gnupg2 ca-certificates lsb-release ubuntu-keyring unzip -y

ステップ1 - ファイアウォールの設定

最初のステップは、ファイアウォールを設定することです。Ubuntuにはデフォルトでufw(Uncomplicated Firewall)が付属しています。

ファイアウォールが実行中かどうかを確認します。

$ sudo ufw status

次の出力が得られるはずです。

Status: inactive

SSHポートを許可して、ファイアウォールを有効にしたときに現在の接続が切断されないようにします。

$ sudo ufw allow OpenSSH

HTTPおよびHTTPSポートも許可します。

$ sudo ufw allow http
$ sudo ufw allow https

ファイアウォールを有効にします。

$ sudo ufw enable
コマンドは既存のssh接続を中断する可能性があります。操作を続行しますか(y|n)? y
ファイアウォールはアクティブで、システム起動時に有効になっています

再度ファイアウォールの状態を確認します。

$ sudo ufw status

同様の出力が表示されるはずです。

Status: active

To                         Action      From
--                         ------      ----
OpenSSH                    ALLOW       Anywhere
80/tcp                     ALLOW       Anywhere
443                        ALLOW       Anywhere
OpenSSH (v6)               ALLOW       Anywhere (v6)
80/tcp (v6)                ALLOW       Anywhere (v6)
443 (v6)                   ALLOW       Anywhere (v6)

ステップ2 - SSLのインストール

先に進む前に、まずドメインのSSL証明書を作成しましょう。これはDockerの外部で作成するため、管理が容易です。後で証明書をコンテナに同期させ、定期的に更新およびリフレッシュします。

SSL証明書を生成するためにCertbotをインストールする必要があります。Ubuntuのリポジトリを使用してCertbotをインストールするか、Snapdツールを使用して最新バージョンを取得できます。ここではSnapdバージョンを使用します。

Ubuntu 22.04にはデフォルトでSnapdがインストールされています。次のコマンドを実行して、Snapdのバージョンが最新であることを確認します。Snapdのバージョンが最新であることを確認してください。

$ sudo snap install core
$ sudo snap refresh core

Certbotをインストールします。

$ sudo snap install --classic certbot

次のコマンドを使用して、Certbotコマンドが/usr/binディレクトリへのシンボリックリンクを作成することによって実行されることを確認します。

$ sudo ln -s /snap/bin/certbot /usr/bin/certbot

次のコマンドを実行してSSL証明書を生成します。

$ sudo certbot certonly --standalone --agree-tos --no-eff-email --staple-ocsp --preferred-challenges http -m [email protected] -d example.com

上記のコマンドは、サーバーの/etc/letsencrypt/live/example.comディレクトリに証明書をダウンロードします。

Diffie-Hellmanグループ証明書を生成します。

$ sudo openssl dhparam -dsaparam -out /etc/ssl/certs/dhparam.pem 4096

プロセスのドライランを行い、SSL更新が正常に機能しているかを確認します。

$ sudo certbot renew --dry-run

エラーが表示されなければ、すべて準備完了です。証明書は自動的に更新されます。

Dockerを設定し、Laravelをインストールした後、更新プロセスを変更する必要があります。これについては後のセクションで説明します。

ステップ3 - DockerとDocker Composeのインストール

Ubuntu 22.04には古いバージョンのDockerが付属しています。最新バージョンをインストールするには、まずDocker GPGキーをインポートします。

$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg

Dockerリポジトリファイルを作成します。

$ echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
  $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

システムリポジトリリストを更新します。

$ sudo apt update

最新バージョンのDockerをインストールします。

$ sudo apt install docker-ce docker-ce-cli containerd.io docker-compose-plugin

実行中であることを確認します。

$ sudo systemctl status docker
? docker.service - Docker Application Container Engine
     Loaded: loaded (/lib/systemd/system/docker.service; enabled; vendor preset: enabled)
     Active: active (running) since Sat 2023-01-14 10:41:35 UTC; 2min 1s ago
TriggeredBy: ? docker.socket
       Docs: https://docs.docker.com
   Main PID: 2054 (dockerd)
      Tasks: 52
     Memory: 22.5M
        CPU: 248ms
     CGroup: /system.slice/docker.service
             ??  2054 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock

デフォルトでは、Dockerはroot権限を必要とします。dockerコマンドを実行するたびにsudoを使用したくない場合は、ユーザー名をdockerグループに追加します。

$ sudo usermod -aG docker $(whoami)

この変更を有効にするには、サーバーからログアウトして再度同じユーザーでログインする必要があります。または、次のコマンドを使用します。

$ su - ${USER}

ユーザーがDockerグループに追加されたことを確認します。

$ groups
navjot wheel docker

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

最初のステップは、最新のLaravelバージョンをダウンロードし、PHPパッケージマネージャーであるComposerを含む依存関係をインストールすることです。

Laravelアプリケーションディレクトリを作成します。

$ mkdir ~/laravel

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

$ cd ~/laravel

最新のLaravelリリースをディレクトリにクローンします。コマンドの末尾に.を忘れないでください。これはGitがファイルを現在のディレクトリにクローンすることを意味します。

$ git clone https://github.com/laravel/laravel.git .

DockerのComposeイメージを使用して、Laravelプロジェクトに必要なディレクトリをマウントします。これにより、Composerをグローバルにインストールする必要がなくなります。

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

上記のコマンドは、一時的なコンテナを作成し、現在のディレクトリにバインドマウントされ、削除されます。Laravelディレクトリの内容をコンテナにコピーし、コンテナ内でComposerが作成するvendorフォルダーが現在のディレクトリにコピーされることを保証します。

Laravelディレクトリの権限を設定し、現在ログインしているユーザーが所有するようにします。

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

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

Docker composeファイルを作成し、編集のために開きます。

$ nano docker-compose.yml

以下のコードを貼り付けます。ここでは、3つのサービスappwebserverdbを定義します。dbサービスの下のMYSQL_ROOT_PASSWORDを、選択した強力なパスワードに置き換えます。

services:
  app:
    build:
      context: .
      dockerfile: Dockerfile
    image: howtoforge/app
    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

  webserver:
    container_name: webserver
    image: nginx:alpine
    restart: unless-stopped
    tty: true
    ports:
        - 80:80
        - 443:443
    volumes:
        - ./:/var/www
        - ./nginx/conf.d:/etc/nginx/conf.d
        - ./nginx/logs:/var/log/nginx
        - /etc/ssl/certs/dhparam.pem:/etc/ssl/certs/dhparam.pem
        - /etc/letsencrypt:/etc/letsencrypt
    logging:
        options:
            max-size: "10m"
            max-file: "3"
    networks:
      - app-network

  db:
    image: mysql:latest
    container_name: db
    restart: unless-stopped
    tty: true
    ports:
      - "3306:3306"
    environment:
      MYSQL_DATABASE: laravel
      MYSQL_ROOT_PASSWORD: MYSQL_ROOT_PASSWORD
      MYSQL_USER: laraveluser
      MYSQL_PASSWORD: password
      SERVICE_TAGS: dev
      SERVICE_NAME: mysql
    volumes:
      - dbdata:/var/lib/mysql
      - ./mysql/my.cnf:/etc/mysql/my.cnf
    networks:
      - app-network

volumes:
  dbdata:
    driver: local

networks:
  app-network:
    driver: bridge

ファイルを保存するには、Ctrl + Xを押し、プロンプトが表示されたらYを入力します。

サービスを詳しく見てみましょう。

  • app - このサービスはLaravelアプリケーションを定義し、howtoforge/appというカスタムDockerイメージを実行します。このイメージは次のステップで作成します。コンテナ内のLaravelの作業ディレクトリは/var/wwwに設定されており、ホストの現在のディレクトリにマッピングされています。また、PHPコンテナにコピーされるPHP設定ファイルもマウントします。これについては後のステップで設定します。
  • webserver - このサービスはNginx Dockerイメージを使用してコンテナを作成し、ホストにポート80と443を公開します。また、Nginxのログ、カスタム設定、Laravelアプリケーションディレクトリ、SSL証明書のためのボリュームをバインドマウントします。
  • db - このサービスはMySQL Dockerイメージを使用してコンテナを作成し、データベース名とMySQLのrootパスワードを設定する環境変数を定義します。データベースの名前は任意に設定でき、MYSQL_ROOT_PASSWORDを選択した強力なパスワードに置き換えます。また、データベースにアクセスするMySQLユーザー名(MYSQL_USER_NAME)とパスワード(MYSQL_USER_PASSWORD)を設定します。このサービスは、コンテナのポート3306をホストのポート3306にマッピングします。また、カスタムMySQL設定のためのボリュームとMySQLデータのためのローカルボリュームもバインドマウントします。これにより、データを失うことなくdbサービスを再起動できます。

サービス間の通信を可能にするために、app-networkというDockerネットワークを作成しました。これはブリッジネットワークとして設定されています。これにより、接続されたコンテナが互いに通信できるようになります。ブリッジネットワークドライバーは、ホストマシンにルールをインストールし、異なるブリッジネットワーク上のコンテナが直接通信できないようにします。

ステップ6 - Dockerfileの作成

Dockerfileはカスタムイメージを作成するために使用されます。Laravelの標準イメージは存在しないため、Laravel用のカスタムイメージを作成するためにDockerfileを定義する必要があります。これには、アプリケーションのニーズに応じてパッケージをインストールし、Linux環境を構成するためのコマンドが含まれています。また、カスタムイメージをDocker Hubや任意のプライベートDockerレジストリに公開することもできます。Dockerfileのチュートリアルで詳細を学ぶことができます。

Dockerfileを作成し、編集のために開きます。

$ nano Dockerfile

以下のコードを貼り付けます。

FROM php:8.2-fpm

# composer.lockとcomposer.jsonをコピー
COPY composer.lock composer.json /var/www/

# 作業ディレクトリを設定
WORKDIR /var/www

# 依存関係をインストール
RUN apt-get update && apt-get install -y \
    build-essential \
    libpng-dev \
    libjpeg62-turbo-dev \
    libfreetype6-dev \
    locales \
    zip \
    jpegoptim optipng pngquant gifsicle \
    vim \
    libzip-dev \
    unzip \
    git \
    curl \
    libonig-dev

# キャッシュをクリア
RUN apt-get clean && rm -rf /var/lib/apt/lists/*

# 拡張機能をインストール
RUN docker-php-ext-install pdo_mysql mbstring zip exif pcntl
RUN docker-php-ext-configure gd --enable-gd --with-freetype --with-jpeg
RUN docker-php-ext-install gd

# composerをインストール
RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer

# 既存のアプリケーションディレクトリの内容を作業ディレクトリにコピー
COPY . /var/www

# 作業ディレクトリの権限をwww-dataユーザーに割り当て
RUN chown -R www-data:www-data \
        /var/www/storage \
        /var/www/bootstrap/cache

# ログとフレームワークディレクトリに書き込み権限を割り当て
RUN chmod 775 storage/logs \
        /var/www/storage/framework/sessions \
        /var/www/storage/framework/views

# ポート9000を公開し、php-fpmサーバーを起動
EXPOSE 9000
CMD ["php-fpm"]

ファイルを保存するには、Ctrl + Xを押し、プロンプトが表示されたらYを入力します。

ここで何が起こっているのか見てみましょう。まず、php:8.2-fpm Dockerイメージの上にカスタムイメージを作成します。これはPHP 8.2-FPMがインストールされたDebianベースのイメージです。Dockerfileは、さまざまなディレクティブを使用して操作を実行します。RUNディレクティブは、コンテナ内での設定の更新、インストール、および構成を指定するコマンドを指定し、COPYディレクティブはファイルをコンテナにコピーし、EXPOSEディレクティブはコンテナ内のポートを公開し、CMDディレクティブはコマンドを実行します。

最初に、ホストのLaravelディレクトリからComposerファイルをコンテナ内の/var/wwwディレクトリにコピーします。また、コンテナの作業ディレクトリを/var/wwwに設定します。次に、Laravelが動作するために必要なさまざまな前提条件やパッケージをインストールします。これには、mbstring、gd、exif、zip、pdo_mysql、pcntlなどのPHP拡張が含まれます。次に、Composerパッケージマネージャーをインストールします。

次に、Laravelディレクトリのすべてのファイルをコンテナにコピーし、www-dataユーザーの作業ディレクトリの権限を設定します。これは、DebianプラットフォームでPHPがデフォルトで使用するユーザーです。次に、Laravelのログ、セッション、およびビューのディレクトリに正しい書き込み権限を設定します。

最後に、PHP-FPMサービス用に9000ポートを公開し、コンテナを起動するためのPHPコマンドを実行します。

ステップ7 - PHPの設定

PHPディレクトリを作成します。

$ mkdir ~/laravel/php

local.iniファイルを作成し、編集のために開きます。

$ nano local.ini

以下のコードを貼り付けます。

upload_max_filesize=40M
post_max_size=40M

ファイルを保存するには、Ctrl + Xを押し、プロンプトが表示されたらYを入力します。これらのディレクティブは、アップロードされたファイルの最大サイズを設定します。要件に応じて値を変更できます。デフォルトのディレクティブを上書きするために、任意のPHP特有の設定を追加できます。

ステップ8 - Nginxの設定

サイト設定用のNginxディレクトリを作成します。

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

Laravelを提供するためにPHP-FPMをFastCGIサーバーとして使用するNginx設定ファイルを作成する必要があります。

app.confファイルを作成し、編集のために開きます。

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

以下のコードを貼り付けます。

server {
    # httpリクエストをhttpsにリダイレクト
    listen 80;
    listen [::]:80;
    server_name example.com;
    return 301 https://$host$request_uri;
}

server {
    listen 443 ssl http2;
    listen [::]:443 ssl http2;
    index index.php index.html;

    error_log  /var/log/nginx/error.log;
    access_log /var/log/nginx/access.log;

    root /var/www/public;
    client_max_body_size 40m;

    ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
    ssl_trusted_certificate /etc/letsencrypt/live/example.com/chain.pem;
    ssl_session_timeout 1d;
    ssl_session_cache shared:SSL:10m;
    ssl_session_tickets off;
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384;
    ssl_prefer_server_ciphers off;
    ssl_ecdh_curve secp384r1;
    ssl_dhparam /etc/ssl/certs/dhparam.pem;

    # OCSPスタンピング
    ssl_stapling on;
    ssl_stapling_verify on;
    resolver 8.8.8.8 8.8.4.4 valid=300s;
    resolver_timeout 5s;

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

ファイルを保存するには、Ctrl + Xを押し、プロンプトが表示されたらYを入力します。

上記のファイルは、NginxがLaravelサイトのHTTPおよびHTTPSバージョンの両方を提供し、HTTPリクエストを自動的にHTTPSにリダイレクトするように設定します。client_max_body_sizeの値が前のステップで設定したアップロードサイズと一致することを確認してください。

PHPのロケーションブロックでは、fastcgi_passディレクティブがappサービスがポート9000のTCPソケットでリッスンしていることを指定します。PHP-FPMサーバーはUnixソケットでもリッスンできますが、TCPソケットよりも利点があります。しかし、サービスが異なるホストで実行されている場合は機能しません。ここでは、appコンテナがwebserverコンテナとは異なるホストで実行されています。

ステップ9 - MySQLの設定

一般的なクエリログを有効にし、対応するログファイルを指定するためにMySQLを設定します。

MySQLディレクトリを作成します。

$ mkdir ~/laravel/mysql

my.cnfファイルを作成し、編集のために開きます。

$ nano ~/laravel/my.cnf

以下のコードを貼り付けます。

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

ファイルを保存するには、Ctrl + Xを押し、プロンプトが表示されたらYを入力します。

ステップ10 - 環境ファイルの設定

すべてのサービスを作成し、設定したので、コンテナを起動する時間です。しかし、その前にLaravelの環境変数を設定する必要があります。Laravelにはデフォルトの環境ファイル.env.exampleが付属しています。

例の環境ファイルのコピーを作成します。

$ cp .env.example .env

.envファイルを編集のために開きます。

$ nano .env

DB_CONNECTIONで始まるブロックを見つけ、変数の値を要件に応じて更新します。

DB_CONNECTION=mysql
DB_HOST=db
DB_PORT=3306
DB_DATABASE=laravel
DB_USERNAME=laraveluser
DB_PASSWORD=your_laravel_db_password

DB_HOSTの値はdbサービスになります。DB_NAMEDB_USERNAMEDB_PASSWORDは、Docker composeファイルのステップ4で選択したデータベース名、ユーザー名、およびパスワードになります。

ファイルを保存するには、Ctrl + Xを押し、プロンプトが表示されたらYを入力します。

ステップ11 - コンテナを起動し、Laravelのインストールを完了する

ついにコンテナを起動する時間です。

$ docker compose up -d

このコマンドを初めて実行すると、NginxMySQLイメージがプルされ、作成したDockerfileを使用してappイメージが作成されます。プロセスが完了したら、次のコマンドを使用してコンテナの状態を確認できます。

$ docker ps

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

CONTAINER ID   IMAGE            COMMAND                  CREATED       STATUS       PORTS                                                                      NAMES
a57be976c0fa   mysql:latest     "docker-entrypoint.s…"   6 hours ago   Up 6 hours   0.0.0.0:3306->3306/tcp, :::3306->3306/tcp, 33060/tcp                       db
85e515c4a404   howtoforge/app   "docker-php-entrypoi…"   6 hours ago   Up 6 hours   9000/tcp                                                                   app
8418bbc83bd3   nginx:alpine     "/docker-entrypoint.…"   6 hours ago   Up 6 hours   0.0.0.0:80->80/tcp, :::80->80/tcp, 0.0.0.0:443->443/tcp, :::443->443/tcp   webserver

コンテナが実行中になったら、docker compose execコマンドを使用してコンテナ内でコマンドを実行し、Laravelのインストールを完了する時間です。

アプリケーションキーを生成し、ユーザーセッションを保護し、ユーザーデータを暗号化するために.envファイルにコピーします。

$ docker compose exec app php artisan key:generate

Laravelアプリケーションキャッシュを作成します。

$ docker compose exec app php artisan config:cache

このコマンドは、設定設定を/var/www/bootstrap/cache/config.phpファイルにロードします。

ブラウザでhttps://example.comにアクセスすると、Laravelのインストールが成功したことを示すページが表示されます。

Laravelのホームページ

ステップ12 - SSL更新の設定

Laravelサイトがアクティブになったので、SSL設定を再度確認し、更新を設定する時間です。これには、更新を開始する前にwebserverサービスを停止し、証明書が更新された後にサービスを再起動するスクリプトを作成する必要があります。Certbotは、この目的のためにpre_hookpost_hookの2つのフックを提供します。

スクリプトを保存するためのSSLディレクトリを作成します。

$ mkdir ~/laravel/ssl

server-stop.shスクリプトを作成します。

$ sh -c 'printf "#!/bin/sh\ndocker stop webserver\n" > ~/laravel/ssl/server-stop.sh'

server-start.shスクリプトを作成します。

$ sh -c 'printf "#!/bin/sh\ndocker start webserver\n" > ~/laravel/ssl/server-start.sh'

スクリプトを実行可能にします。

$ chmod +x ~/laravel/ssl/server-*.sh

次に、Certbotにこれらのスクリプトを使用するように指示する必要があります。/etc/letsencrypt/renewal/example.com.confファイルを編集のために開きます。

$ sudo nano /etc/letsencrypt/renewal/example.com.conf

ファイルの最後に次の行を貼り付けます。

pre_hook = /home//laravel/ssl/server-stop.sh
post_hook = /home//laravel/ssl/server-start.sh

ファイルを保存するには、Ctrl + Xを押し、プロンプトが表示されたらYを入力します。

証明書更新プロセスをドライランでテストします。

$ sudo certbot renew --dry-run

成功を確認する似たような出力が得られます。

Saving debug log to /var/log/letsencrypt/letsencrypt.log

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Processing /etc/letsencrypt/renewal/example.com.conf
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Account registered.
Hook 'pre-hook' ran with output:
 webserver
Simulating renewal of an existing certificate for example.com

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Congratulations, all simulated renewals succeeded:
  /etc/letsencrypt/live/example.com/fullchain.pem (success)
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Hook 'post-hook' ran with output:
 webserver

これで、SSL証明書は自動的に更新され、DockerコンテナによってLaravelアプリケーションを提供するために使用されます。

ステップ13 - データ移行とTinkerコンソール

アプリケーションが実行されているので、データを移行し、tinkerコマンドを試すことができます。TinkerはLaravelのためのREPL(Read-Eval-Print Loop)です。tinkerコマンドは、Laravelが事前にロードされたPsySHコンソールを起動します。PsySHはPHPのためのランタイム開発者コンソールおよびインタラクティブデバッガです。tinkerコマンドを使用すると、インタラクティブシェルでコマンドラインからLaravelアプリケーションと対話できます。

コンテナ内でartisan migrateコマンドを使用してMySQL接続をテストします。これにより、データベースにmigrationsテーブルが作成されます。

$ docker compose exec app php artisan migrate

次のような出力が得られます。

 INFO  Preparing database.

  Creating migration table .............................................................................................. 32ms DONE

 INFO  Running migrations.

  2014_10_12_000000_create_users_table .................................................................................. 184ms DONE
  2014_10_12_100000_create_password_resets_table ......................................................................... 259ms DONE
  2019_08_19_000000_create_failed_jobs_table ............................................................................ 102ms DONE
  2019_12_14_000001_create_personal_access_tokens_table .................................................................. 46ms DONE

次に、tinkerコマンドを使用してPsySHコンソールを起動します。

$ docker compose exec app php artisan tinker

次のプロンプトが表示されます。

Psy Shell v0.11.10 (PHP 8.2.1 — cli) by Justin Hileman
>

コンソールプロンプトで、移行したデータを取得するために次のコマンドを実行してMySQL接続をテストします。

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

次のような出力が得られます。

= Illuminate\Support\Collection {#3670
    all: [
      {#3679
        +"id": 1,
        +"migration": "2014_10_12_000000_create_users_table",
        +"batch": 1,
      },
      {#3681
        +"id": 2,
        +"migration": "2014_10_12_100000_create_password_resets_table",
        +"batch": 1,
      },
      {#3682
        +"id": 3,
        +"migration": "2019_08_19_000000_create_failed_jobs_table",
        +"batch": 1,
      },
      {#3683
        +"id": 4,
        +"migration": "2019_12_14_000001_create_personal_access_tokens_table",
        +"batch": 1,
      },
    ],
  }

コンソールから出るにはexitと入力します。

> exit
   INFO  Goodbye.

tinkerを使用してデータベースと対話したり、サービスやモデルを試したりできます。これで、Laravelを使用してさらなる開発を開始できます。

結論

これで、Docker、MySQL、PHPを使用してLaravelアプリケーションをコンテナ化してインストールし、安全なドメイン名でアプリケーションを提供する方法を学びました。質問がある場合は、下のコメントに投稿してください。

Share: X/Twitter LinkedIn

新しい投稿を受信箱で受け取る

スパムはありません。いつでも購読を解除できます。