先來看看什么是Docker,Docker是一個可以輕松構(gòu)建、發(fā)布和運行應(yīng)用程序的容器平臺。它允許您使用容器將應(yīng)用程序打包到一個容器鏡像中,并在不同的環(huán)境下運行,而不必考慮運行環(huán)境或者應(yīng)用程序之間的沖突。
在Docker中啟動PHP FPM非常容易,只需要在Dockerfile中添加以下內(nèi)容:
FROM php:fpm
就可以啟動PHP FPM了。現(xiàn)在,讓我們看一下如何將PHP FPM集成到一個更完整的應(yīng)用程序中。
假設(shè)我們的應(yīng)用程序是一個使用PHP編寫的基本W(wǎng)eb應(yīng)用程序,需要使用MySQL數(shù)據(jù)庫和Redis緩存。我們可以使用Docker Compose來編排這個應(yīng)用程序,并使用PHP FPM容器作為應(yīng)用程序容器。
首先,我們需要編寫一個docker-compose.yml文件,定義我們的服務(wù),如下所示:
version: '3' services: app: build: context: . dockerfile: Dockerfile ports: - "8080:80" depends_on: - db - redis db: image: mysql:5.7 environment: MYSQL_ROOT_PASSWORD: example redis: image: redis:5
上述文件定義了三個服務(wù):應(yīng)用程序容器app、MySQL數(shù)據(jù)庫容器db和Redis緩存容器redis。應(yīng)用程序容器app構(gòu)建自一個名為Dockerfile的文件,該文件定義了PHP FPM及其依賴項。
下面是一個完整的Dockerfile示例:
FROM php:fpm RUN apt-get update && \ apt-get install -y --no-install-recommends \ libmcrypt-dev \ libjpeg-dev \ libpng-dev \ libfreetype6-dev \ libzip-dev \ zip \ unzip \ git RUN pecl install mcrypt-1.0.4 \ && docker-php-ext-enable mcrypt RUN docker-php-ext-install mysqli pdo pdo_mysql RUN docker-php-ext-configure gd --with-freetype-dir=/usr/include/ --with-jpeg-dir=/usr/include/ RUN docker-php-ext-install gd zip COPY php.ini /usr/local/etc/php/conf.d/
上述Dockerfile安裝了PHP的必要擴展和依賴項,并將自定義的php.ini文件復(fù)制到容器中。
最后,在應(yīng)用程序代碼中,我們可以使用以下Php FPM指令:
fastcgi_pass php:9000;
這個指令將Web服務(wù)器請求轉(zhuǎn)發(fā)到PHP FPM容器。
最后,我們可以使用Docker Compose啟動我們的應(yīng)用程序:
docker-compose up -d
這將啟動應(yīng)用程序容器和其他所有容器,并將它們連接到網(wǎng)絡(luò)中,以便它們能夠向彼此通信。
如此簡單,我們就啟動了一個PHP基本W(wǎng)eb應(yīng)用程序,并使用Docker集成了MySQL和Redis。Docker的強大性在于,我們可以很容易地構(gòu)建、測試和部署這個應(yīng)用程序,并保證在不同的環(huán)境下運行。