docker構建phpfpm鏡像並添加擴展

1. 拉取官方鏡像

docker pull php:7.3-fpm

這裏以 7.3-fpm 版本爲例

2. 鏡像運行生成容器

docker run -p 9007:9000 --name phpfpm73 -v d:\Docker\www:/var/www/html -v d:\Docker\php-fpm73:/usr/local/etc/php -v d:\Docker\logs:/var/log -d php:7.3-fpm

將容器命名爲 phpfpm73,
將容器的 9000 端口映射到宿主機的 9007 端口(也可更改爲其他端口),
掛載工作目錄、配置目錄(宿主機的d:\Docker\php-fpm73目錄下要先弄好配置文件 php.ini )、日誌目錄。

3. 添加擴展

php鏡像添加擴展主要用到以下幾個命令:

  • docker-php-source
  • docker-php-ext-install
  • docker-php-ext-enable
  • docker-php-ext-configure

docker-php-source 用於創建或刪除 /usr/src/php 目錄,PHP 鏡像中自帶的擴展源碼存放的路徑:/usr/src/php/ext,
docker-php-ext-install 用於安裝並啓動 /usr/src/php/ext 目錄下的擴展,
docker-php-ext-enable 用於啓用擴展,比如通過 pecl 安裝的擴展默認是沒有啓用的,通過這個命令,可以無需到 php.ini 配置文件中去配置,
docker-php-ext-configure 一般都是需要跟 docker-php-ext-install 搭配使用,它的作用就是安裝擴展的時候,需要自定義配置時,就可以使用它。

3.1 啓用擴展庫

確保鏡像 /usr/src/php/ext 目錄存在,如果不存在的話,可以通過下列命令調出鏡像默認的擴展庫

docker-php-source extract

3.2 添加容器擴展庫中已有的擴展

在容器中,通過 ls -al /usr/src/php/ext 可以查看擴展庫中已有的擴展,並通過下列命令可以直接安裝並啓用該擴展:

docker-php-ext-install [Package]

如:

docker-php-ext-install mcrypt \
&& docker-php-ext-install mysql \
&& docker-php-ext-install mysqli \
&& docker-php-ext-install pdo_mysql \
&& docker-php-ext-install sockets \
&& docker-php-ext-install bcmath \
&& docker-php-ext-install gettext \
&& docker-php-ext-install soap

安裝擴展的時候有時候會提示缺少某些依賴,這時就需要先安裝其所需依賴,在執行 docker-php-ext-install
如:

apt-get update \
&& apt-get install -y libmcrypt-dev \
&& apt-get install -y libxml2-dev \
&& apt-get install -y libssl-dev

而對於有些擴展,是需要通過 docker-php-ext-configure 進行配置的,比如安裝 PHP 的圖像擴展:

apt-get install -y libjpeg-dev \
&& apt-get install -y libpng-dev \
&& apt-get install -y libfreetype6-dev \
&& docker-php-ext-configure gd --with-jpeg-dir --with-png-dir --with-freetype-dir \
&& docker-php-ext-install -j$(nproc) gd

3.3 添加容器擴展庫中不存在的擴展

3.3.1 通過pecl安裝

通過 pecl 安裝的擴展默認沒有啓用,需要執行 docker-php-ext-enable 進行啓用。
先在 pecl 上找到需要的擴展,然後執行下列操作:

pecl install [Package]

接着啓用該擴展

docker-php-ext-enable [Package]

如:pecl install mongodb && docker-php-ext-enable mongodb

3.3.2 通過下載源碼安裝

可將下載的擴展源碼解壓後放置於 /usr/src/php/ext 目錄下,然後使用 docker-php-ext-install 命令進行安裝,如安裝 PHP 的 redis 擴展:

curl -L -o /tmp/redis.tar.gz https://github.com/phpredis/phpredis/archive/$PHPREDIS_VERSION.tar.gz \
    && tar xfz /tmp/redis.tar.gz \
    && rm -r /tmp/redis.tar.gz \
    && mkdir -p /usr/src/php/ext \
    && mv phpredis-$PHPREDIS_VERSION /usr/src/php/ext/redis \
    && docker-php-ext-install redis

3.4 刪除擴展庫

docker-php-source delete

4. 卸載擴展

直接刪除 /usr/local/etc/php/conf.d 目錄下對應的配置文件

5. 容器生成鏡像並推送到 Docker Hub

至此,phpfpm 鏡像已經制作完成,爲了避免下次重做,可以將該phpfpm容器保存爲鏡像,然後推送到Docker Hub上,下次就可以直接拉下來使用了。
將容器保存爲鏡像:

docker commit -m="add some extension." -a="Hongxuan" phpfpm73 1758677739/phpfpm:7.3

通過docker images可以看到新生成的1758677739/phpfpm:7.3鏡像(名字自己定)
接着將鏡像推送到 Docker Hub:

docker push 1758677739/phpfpm:7.3

完結。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章