Docker作為目前流行的容器化技術,可以幫我們在同一機器上運行多個不同的服務或應用程序。在Web應用中,往往需要不同的PHP版本來運行不同的應用。這時候,Docker就能派上用場了。
首先,我們需要一個基礎鏡像。采用官方的PHP鏡像作為基礎,然后利用Dockerfile的多階段構建機制完成各版本PHP環境的構建。
下面我們以PHP5.6版本和PHP7.2版本為例,來詳細展示如何構建。
1、首先,創建一個名字為php代碼的目錄,里面存放三個文件
Dockerfile
php5.6/Dockerfile
php7.2/Dockerfile
2、Dockerfile 文件內容如下:
# 基礎鏡像php:7.2-fpm
FROM php:7.2-fpm
WORKDIR /var/www
# 安裝依賴
RUN apt-get update && apt-get install -y \
libfreetype6-dev \
libjpeg62-turbo-dev \
libpng-dev \
libmcrypt-dev \
libxml2-dev \
libcurl4-openssl-dev \
# 安裝php擴展
RUN docker-php-ext-install -j$(nproc) iconv mcrypt mysqli pdo_mysql xml curl
# 安裝composer
RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer
# 啟動php-fpm服務
CMD ["php-fpm"]
3、php5.6/Dockerfile 文件內容如下:
# 基礎鏡像php:5.6-fpm
FROM php:5.6-fpm
WORKDIR /var/www
# 安裝依賴
RUN apt-get update && apt-get install -y \
libfreetype6-dev \
libjpeg62-turbo-dev \
libpng-dev \
libmcrypt-dev \
libxml2-dev \
libcurl4-openssl-dev \
# 安裝php擴展
RUN docker-php-ext-install -j$(nproc) iconv mcrypt mysqli pdo_mysql xml curl
# 安裝composer
RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer
# 啟動php-fpm服務
CMD ["php-fpm"]
4、php7.2/Dockerfile 文件內容如下:
# 基礎鏡像php:7.2-fpm
FROM php:7.2-fpm
WORKDIR /var/www
# 安裝依賴
RUN apt-get update && apt-get install -y \
libfreetype6-dev \
libjpeg62-turbo-dev \
libpng-dev \
libxml2-dev \
libcurl4-openssl-dev \
# 安裝php擴展
RUN docker-php-ext-install -j$(nproc) iconv mysqli pdo_mysql xml curl
# 安裝composer
RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer
# 啟動php-fpm服務
CMD ["php-fpm"]
這里我們分別使用了php:5.6-fpm和php:7.2-fpm作為基礎鏡像。使用Docker的多階段構建,只需要前兩行就可以完成共同的構建動作,這樣就可以避免構建過程中的冗余操作,顯著縮短鏡像構建過程。
接下來,我們需要在docker-compose.yml文件中定義這兩個服務,如下所示:
version: '3.9'
services:
php56:
build:
context: ./php56
dockerfile: Dockerfile
volumes:
- ./php56/www:/var/www
ports:
- 9001:9000
php72:
build:
context: ./php72
dockerfile: Dockerfile
volumes:
- ./php72/www:/var/www
ports:
- 9002:9000
在定義好服務之后,只需要運行以下命令即可啟動:
docker-compose up
這時候,兩個服務就都可以訪問了。可以通過瀏覽器輸入以下地址進行訪問:
http://127.0.0.1:9001
http://127.0.0.1:9002
以上就是Docker多PHP環境的構建方式。利用Docker構建多版本PHP環境,讓Web應用更加靈活。
需要注意的是,在Docker多容器場景中,不同容器之間需要通過網絡相互訪問,最好采用docker-compose編排工具進行容器編排,方便管理和維護。
總結:Docker 的多階段構建機制可以幫助我們非常方便地構建多版本的 PHP 環境,這樣可以避免對主機進行一些不必要的修改和設置。同時, docker-compose 提供的快速編排多容器的方式也是非常方便和實用的。綜上所述,Docker 的應用將為開發人員和運維人員帶來更加便捷的服務管理方式。