首頁  >  文章  >  後端開發  >  使用Docker Compose、Nginx和MariaDB建構可伸縮的PHP應用程式集群

使用Docker Compose、Nginx和MariaDB建構可伸縮的PHP應用程式集群

WBOY
WBOY原創
2023-10-12 13:39:17551瀏覽

使用Docker Compose、Nginx和MariaDB构建可伸缩的PHP应用程序集群

使用Docker Compose、Nginx和MariaDB建構可伸縮的PHP應用程式叢集

引言:
在現代應用程式開發中,建構可伸縮的應用程序集群是至關重要的。透過使用Docker Compose、Nginx和MariaDB,我們可以輕鬆地建立一個可伸縮的PHP應用程式集群,為我們的應用程式提供高可用性和靈活性。在本文中,我們將探討如何使用這些工具建立一個簡單而強大的PHP應用程式集群,並提供具體的程式碼範例。

第一部分:環境建構

在開始之前,我們需要確保已經安裝了Docker和Docker Compose。在你的開發環境中打開終端,並運行以下命令來檢查它們是否已正確安裝:

$ docker --version
$ docker-compose --version

如果返回了相應的版本信息,說明已經成功安裝了Docker和Docker Compose。接下來,我們將建立一個新的專案目錄,並在其中建立一個docker-compose.yml檔案。

$ mkdir my-php-cluster
$ cd my-php-cluster
$ touch docker-compose.yml

第二部分:編寫Docker Compose檔案
接下來,我們將在docker-compose.yml檔案中定義我們的應用程式叢集的配置。此配置將包括PHP、Nginx和MariaDB的服務定義。以下是一個基本的docker-compose.yml檔案的範例:

version: '3'

services:
  php:
    build:
      context: .
      dockerfile: Dockerfile.php
    restart: always
    ports:
      - "8000:80"
  nginx:
    build:
      context: .
      dockerfile: Dockerfile.nginx
    restart: always
    ports:
      - "80:80"
    depends_on:
      - php
  db:
    image: mariadb
    command: --default-authentication-plugin=mysql_native_password
    restart: always
    ports:
      - "3306:3306"
    environment:
      MYSQL_ROOT_PASSWORD: secret

在該範例中,我們定義了三個服務:php、nginx和db。 php服務將建置一個包含PHP的Docker映像,並將連接埠對應到主機的8000連接埠。 nginx服務將建置一個包含Nginx的Docker映像,並將連接埠對應到主機的80連接埠。 db服務將使用MariaDB官方提供的Docker映像,並將連接埠對應到主機的3306連接埠。最後,我們也指定了db服務的環境變量,用於設定root密碼。

第三部分:編寫Dockerfile檔案
為了讓我們的映像檔能夠建置成功,我們還需要編寫Dockerfile檔。

首先,我們建立一個名為Dockerfile.php的文件,並將以下內容複製到文件中:

FROM php:7.4-fpm

WORKDIR /var/www/html

RUN apt-get update && apt-get install -y 
    libzip-dev 
    zip 
    unzip 
    && docker-php-ext-install zip

COPY . .

RUN composer install --no-dev

這個Dockerfile使用了官方的PHP 7.4 FPM映像作為基礎鏡像,並透過RUN指令安裝了一些額外的依賴項。然後,我們將整個應用程式目錄複製到容器的/var/www/html目錄下,並執行composer install命令來安裝PHP相依性。

接下來,我們建立一個名為Dockerfile.nginx的文件,並將以下內容複製到檔案中:

FROM nginx:latest

COPY nginx.conf /etc/nginx/nginx.conf

這個Dockerfile使用了最新的Nginx官方映像作為基礎鏡像,並將自訂的nginx.conf檔案複製到容器的/etc/nginx/目錄下。

第四部分:建立Nginx設定檔
在我們的Dockerfile中,我們提到了一個名為nginx.conf的設定檔。現在,我們建立一個名為nginx.conf的文件,並將以下內容複製到檔案中:

events {}

http {
  upstream php {
    server php:9000;
  }

  server {
    listen 80;

    location / {
      proxy_pass http://php;
      proxy_set_header Host $host;
      proxy_set_header X-Real-IP $remote_addr;
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
      proxy_set_header X-Forwarded-Proto $scheme;
    }
  }
}

這個nginx.conf設定檔定義了一個名為php的上游伺服器,該伺服器將代理請求到php服務的9000埠。然後,我們定義了一個監聽80埠的server區塊,並將所有請求代理到php上游伺服器。

第五部分:執行應用程式叢集
現在,我們已經完成了所有的配置,並且可以透過執行docker-compose up命令來啟動我們的應用程式叢集。

在終端機中,進入我們的專案目錄,並執行以下命令:

$ docker-compose up -d

以上命令將會在後台啟動我們的應用程式叢集。請稍等片刻,直到所有服務成功啟動。

第六部分:測試應用程式叢集
一旦我們的應用程式叢集成功啟動,我們可以透過瀏覽器存取http://localhost來測試它。

在瀏覽器中輸入http://localhost,並按下回車鍵。如果一切正常,你應該能夠看到你的應用程式正在運行。

第七部分:擴展應用程式叢集
透過使用Docker Compose的scale功能,我們可以輕鬆地擴展我們的應用程式叢集。

假設我們要增加php服務的實例數,我們可以執行以下指令:

$ docker-compose up -d --scale php=3

以上指令將啟動3個php實例,實作我們的應用程式叢集的橫向擴充。

結束語:
透過使用Docker Compose、Nginx和MariaDB,我們可以輕鬆地建立一個可伸縮的PHP應用程式叢集。在本文中,我們提供了一個基本的範例,以幫助你入門,並提供了詳細的程式碼範例。希望本文對你有所幫助,並啟發你建立更強大的應用程式叢集。

以上是使用Docker Compose、Nginx和MariaDB建構可伸縮的PHP應用程式集群的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn