Bắt đầu với PHP 7. 4, PEAR bị tắt theo mặc định, điều đó có nghĩa là PECL không còn khả dụng để cài đặt tiện ích mở rộng. Có một số lý do cho quyết định đó, vì vậy chúng ta sẽ phải làm. Tôi mất vài giờ để cập nhật Dockerfile của mình và thay thế lệnh gọi PECL bằng cài đặt thủ công, thao tác MongoDB đó khá phức tạp. Tôi đã viết bài viết này vì tôi muốn chơi với PHP 7. 4 nhưng gặp khó khăn khi cài đặt tiện ích mở rộng. Tôi hy vọng nó sẽ giúp được gì đó
CHỈNH SỬA. Tôi nghĩ rằng tôi đã tìm thấy một giải pháp đơn giản hơn bằng cách sử dụng các gói PECL
Dockerfile ban đầu, với PECL
Đây là Dockerfile của hình ảnh cơ sở của một trong các dịch vụ của tôi. Nó sẽ là điểm khởi đầu của chúng tôi. Chúng tôi có một loạt các tiện ích mở rộng trong đó. Một số đi kèm với PHP như
FROM php:7.3.2-fpm-stretch
ENV EXT_APCU_VERSION=5.1.17
RUN docker-php-source extract \
# ext-apcu
&& mkdir -p /usr/src/php/ext/apcu \
&& curl -fsSL //github.com/krakjoe/apcu/archive/v$EXT_APCU_VERSION.tar.gz | tar xvz -C /usr/src/php/ext/apcu --strip 1 \
&& docker-php-ext-install apcu \
# cleanup
&& docker-php-source delete
3 hoặc FROM php:7.3.2-fpm-stretch
ENV EXT_APCU_VERSION=5.1.17
RUN docker-php-source extract \
# ext-apcu
&& mkdir -p /usr/src/php/ext/apcu \
&& curl -fsSL //github.com/krakjoe/apcu/archive/v$EXT_APCU_VERSION.tar.gz | tar xvz -C /usr/src/php/ext/apcu --strip 1 \
&& docker-php-ext-install apcu \
# cleanup
&& docker-php-source delete
4. Một số cần được cài đặt thủ công như FROM php:7.3.2-fpm-stretch
ENV EXT_APCU_VERSION=5.1.17
RUN docker-php-source extract \
# ext-apcu
&& mkdir -p /usr/src/php/ext/apcu \
&& curl -fsSL //github.com/krakjoe/apcu/archive/v$EXT_APCU_VERSION.tar.gz | tar xvz -C /usr/src/php/ext/apcu --strip 1 \
&& docker-php-ext-install apcu \
# cleanup
&& docker-php-source delete
5, FROM php:7.3.2-fpm-stretch
ENV EXT_APCU_VERSION=5.1.17
RUN docker-php-source extract \
# ext-apcu
&& mkdir -p /usr/src/php/ext/apcu \
&& curl -fsSL //github.com/krakjoe/apcu/archive/v$EXT_APCU_VERSION.tar.gz | tar xvz -C /usr/src/php/ext/apcu --strip 1 \
&& docker-php-ext-install apcu \
# cleanup
&& docker-php-source delete
6 hoặc FROM php:7.3.2-fpm-stretch
ENV EXT_APCU_VERSION=5.1.17
RUN docker-php-source extract \
# ext-apcu
&& mkdir -p /usr/src/php/ext/apcu \
&& curl -fsSL //github.com/krakjoe/apcu/archive/v$EXT_APCU_VERSION.tar.gz | tar xvz -C /usr/src/php/ext/apcu --strip 1 \
&& docker-php-ext-install apcu \
# cleanup
&& docker-php-source delete
7FROM php:7.3.2-fpm-stretch
RUN apt-get update && \
pecl channel-update pecl.php.net && \
pecl install apcu igbinary mongodb && \
# compile Redis with igbinary support
pecl bundle redis && cd redis && phpize && ./configure --enable-redis-igbinary && make && make install && \
docker-php-ext-install bcmath sockets && \
docker-php-ext-enable apcu igbinary mongodb opcache redis && \
docker-php-source delete && \
rm -r /tmp/* /var/cache/* /var/www/html/*
RUN echo '\
opcache.interned_strings_buffer=16\n\
opcache.load_comments=Off\n\
opcache.max_accelerated_files=16000\n\
opcache.save_comments=Off\n\
' >> /usr/local/etc/php/conf.d/docker-php-ext-opcache.ini
Tập lệnh có sẵn trong hình ảnh docker
Trước khi bắt đầu, hãy xem tổng quan nhanh về các tập lệnh có sẵn trong hình ảnh Docker
Trước tiên, chúng tôi có
FROM php:7.3.2-fpm-stretch
ENV EXT_APCU_VERSION=5.1.17
RUN docker-php-source extract \
# ext-apcu
&& mkdir -p /usr/src/php/ext/apcu \
&& curl -fsSL //github.com/krakjoe/apcu/archive/v$EXT_APCU_VERSION.tar.gz | tar xvz -C /usr/src/php/ext/apcu --strip 1 \
&& docker-php-ext-install apcu \
# cleanup
&& docker-php-source delete
0, trích xuất nguồn PHP cần thiết để xây dựng các tiện ích mở rộng và cũng xóa nó. Tiếp theo, chúng tôi có FROM php:7.3.2-fpm-stretch
ENV EXT_APCU_VERSION=5.1.17
RUN docker-php-source extract \
# ext-apcu
&& mkdir -p /usr/src/php/ext/apcu \
&& curl -fsSL //github.com/krakjoe/apcu/archive/v$EXT_APCU_VERSION.tar.gz | tar xvz -C /usr/src/php/ext/apcu --strip 1 \
&& docker-php-ext-install apcu \
# cleanup
&& docker-php-source delete
1, định cấu hình tiện ích mở rộng trước khi cài đặt. Và cuối cùng chúng ta có FROM php:7.3.2-fpm-stretch
ENV EXT_APCU_VERSION=5.1.17
RUN docker-php-source extract \
# ext-apcu
&& mkdir -p /usr/src/php/ext/apcu \
&& curl -fsSL //github.com/krakjoe/apcu/archive/v$EXT_APCU_VERSION.tar.gz | tar xvz -C /usr/src/php/ext/apcu --strip 1 \
&& docker-php-ext-install apcu \
# cleanup
&& docker-php-source delete
2, cài đặt [các] tiện ích mở rộng. Về cơ bản, hầu hết mọi thứ chúng tôi làm với tiện ích mở rộng cần phải diễn ra trong khoảng thời gian từ FROM php:7.3.2-fpm-stretch
ENV EXT_APCU_VERSION=5.1.17
RUN docker-php-source extract \
# ext-apcu
&& mkdir -p /usr/src/php/ext/apcu \
&& curl -fsSL //github.com/krakjoe/apcu/archive/v$EXT_APCU_VERSION.tar.gz | tar xvz -C /usr/src/php/ext/apcu --strip 1 \
&& docker-php-ext-install apcu \
# cleanup
&& docker-php-source delete
3 đến FROM php:7.3.2-fpm-stretch
ENV EXT_APCU_VERSION=5.1.17
RUN docker-php-source extract \
# ext-apcu
&& mkdir -p /usr/src/php/ext/apcu \
&& curl -fsSL //github.com/krakjoe/apcu/archive/v$EXT_APCU_VERSION.tar.gz | tar xvz -C /usr/src/php/ext/apcu --strip 1 \
&& docker-php-ext-install apcu \
# cleanup
&& docker-php-source delete
4Các tập lệnh được mô tả trong phần của hình ảnh chính thức README
Cài đặt tiện ích mở rộng
Cài đặt tiện ích mở rộng theo cách thủ công theo cùng một mẫu, chủ yếu
- Tạo thư mục tương ứng trong
5FROM php:7.3.2-fpm-stretch ENV EXT_APCU_VERSION=5.1.17 RUN docker-php-source extract \ # ext-apcu && mkdir -p /usr/src/php/ext/apcu \ && curl -fsSL //github.com/krakjoe/apcu/archive/v$EXT_APCU_VERSION.tar.gz | tar xvz -C /usr/src/php/ext/apcu --strip 1 \ && docker-php-ext-install apcu \ # cleanup && docker-php-source delete
- Giải nén nguồn trong thư mục đó. Nguồn thường có sẵn trên GitHub
- Gọi
2 để cài đặt tiện ích mở rộngFROM php:7.3.2-fpm-stretch ENV EXT_APCU_VERSION=5.1.17 RUN docker-php-source extract \ # ext-apcu && mkdir -p /usr/src/php/ext/apcu \ && curl -fsSL //github.com/krakjoe/apcu/archive/v$EXT_APCU_VERSION.tar.gz | tar xvz -C /usr/src/php/ext/apcu --strip 1 \ && docker-php-ext-install apcu \ # cleanup && docker-php-source delete
Một số tiện ích mở rộng yêu cầu nhiều công việc hơn một chút so với những tiện ích mở rộng khác, nhưng đây là ý chính của nó. Hãy bắt đầu với một cài đặt đơn giản như ________ 17
Đang cài ext-apcu
Chúng tôi sẽ nhận được nguồn
FROM php:7.3.2-fpm-stretch
ENV EXT_APCU_VERSION=5.1.17
RUN docker-php-source extract \
# ext-apcu
&& mkdir -p /usr/src/php/ext/apcu \
&& curl -fsSL //github.com/krakjoe/apcu/archive/v$EXT_APCU_VERSION.tar.gz | tar xvz -C /usr/src/php/ext/apcu --strip 1 \
&& docker-php-ext-install apcu \
# cleanup
&& docker-php-source delete
7 từ GitHub. Chúng tôi sẽ sử dụng FROM php:7.3.2-fpm-stretch
ENV EXT_APCU_VERSION=5.1.17
RUN docker-php-source extract \
# ext-apcu
&& mkdir -p /usr/src/php/ext/apcu \
&& curl -fsSL //github.com/krakjoe/apcu/archive/v$EXT_APCU_VERSION.tar.gz | tar xvz -C /usr/src/php/ext/apcu --strip 1 \
&& docker-php-ext-install apcu \
# cleanup
&& docker-php-source delete
9 để xác định phiên bản chúng tôi muốn để dễ dàng phát hiện và điều chỉnhFROM php:7.3.2-fpm-stretch
ENV EXT_APCU_VERSION=5.1.17
RUN docker-php-source extract \
# ext-apcu
&& mkdir -p /usr/src/php/ext/apcu \
&& curl -fsSL //github.com/krakjoe/apcu/archive/v$EXT_APCU_VERSION.tar.gz | tar xvz -C /usr/src/php/ext/apcu --strip 1 \
&& docker-php-ext-install apcu \
# cleanup
&& docker-php-source delete
Cài đặt ext-redis với ext-igbinary
Bây giờ mọi thứ trở nên phức tạp hơn một chút, chúng tôi muốn cài đặt
FROM php:7.3.2-fpm-stretch
ENV EXT_APCU_VERSION=5.1.17
RUN docker-php-source extract \
# ext-apcu
&& mkdir -p /usr/src/php/ext/apcu \
&& curl -fsSL //github.com/krakjoe/apcu/archive/v$EXT_APCU_VERSION.tar.gz | tar xvz -C /usr/src/php/ext/apcu --strip 1 \
&& docker-php-ext-install apcu \
# cleanup
&& docker-php-source delete
20 với FROM php:7.3.2-fpm-stretch
ENV EXT_APCU_VERSION=5.1.17
RUN docker-php-source extract \
# ext-apcu
&& mkdir -p /usr/src/php/ext/apcu \
&& curl -fsSL //github.com/krakjoe/apcu/archive/v$EXT_APCU_VERSION.tar.gz | tar xvz -C /usr/src/php/ext/apcu --strip 1 \
&& docker-php-ext-install apcu \
# cleanup
&& docker-php-source delete
21 làm bộ nối tiếp. Chúng tôi sẽ sử dụng FROM php:7.3.2-fpm-stretch
ENV EXT_APCU_VERSION=5.1.17
RUN docker-php-source extract \
# ext-apcu
&& mkdir -p /usr/src/php/ext/apcu \
&& curl -fsSL //github.com/krakjoe/apcu/archive/v$EXT_APCU_VERSION.tar.gz | tar xvz -C /usr/src/php/ext/apcu --strip 1 \
&& docker-php-ext-install apcu \
# cleanup
&& docker-php-source delete
1 để định cấu hình FROM php:7.3.2-fpm-stretch
ENV EXT_APCU_VERSION=5.1.17
RUN docker-php-source extract \
# ext-apcu
&& mkdir -p /usr/src/php/ext/apcu \
&& curl -fsSL //github.com/krakjoe/apcu/archive/v$EXT_APCU_VERSION.tar.gz | tar xvz -C /usr/src/php/ext/apcu --strip 1 \
&& docker-php-ext-install apcu \
# cleanup
&& docker-php-source delete
20 trước khi cài đặt. Ngoài ra, nó giống như FROM php:7.3.2-fpm-stretch
ENV EXT_APCU_VERSION=5.1.17
RUN docker-php-source extract \
# ext-apcu
&& mkdir -p /usr/src/php/ext/apcu \
&& curl -fsSL //github.com/krakjoe/apcu/archive/v$EXT_APCU_VERSION.tar.gz | tar xvz -C /usr/src/php/ext/apcu --strip 1 \
&& docker-php-ext-install apcu \
# cleanup
&& docker-php-source delete
7FROM php:7.3.2-fpm-stretch
ENV EXT_APCU_VERSION=5.1.17
RUN docker-php-source extract \
# ext-apcu
&& mkdir -p /usr/src/php/ext/apcu \
&& curl -fsSL //github.com/krakjoe/apcu/archive/v$EXT_APCU_VERSION.tar.gz | tar xvz -C /usr/src/php/ext/apcu --strip 1 \
&& docker-php-ext-install apcu \
# cleanup
&& docker-php-source delete
2Cài đặt ext-mongodb
Bây giờ mọi thứ trở nên rối rắm, việc biên dịch
FROM php:7.3.2-fpm-stretch
ENV EXT_APCU_VERSION=5.1.17
RUN docker-php-source extract \
# ext-apcu
&& mkdir -p /usr/src/php/ext/apcu \
&& curl -fsSL //github.com/krakjoe/apcu/archive/v$EXT_APCU_VERSION.tar.gz | tar xvz -C /usr/src/php/ext/apcu --strip 1 \
&& docker-php-ext-install apcu \
# cleanup
&& docker-php-source delete
25 cần nhiều công sức hơn một chút. Chúng tôi sẽ sử dụng bản dựng nhiều giai đoạn để giữ cho hình ảnh kết quả của chúng tôi rõ ràng nhất có thể. Kho lưu trữ sử dụng các mô-đun con và đáng buồn là chúng không được đưa vào kho lưu trữ, vì vậy chúng tôi sẽ phải sao chép kho lưu trữ, điều này không lý tưởng. Về việc cài đặt, tôi chủ yếu làm theo hướng dẫn trong sách hướng dẫnFROM php:7.3.2-fpm-stretch
ENV EXT_APCU_VERSION=5.1.17
RUN docker-php-source extract \
# ext-apcu
&& mkdir -p /usr/src/php/ext/apcu \
&& curl -fsSL //github.com/krakjoe/apcu/archive/v$EXT_APCU_VERSION.tar.gz | tar xvz -C /usr/src/php/ext/apcu --strip 1 \
&& docker-php-ext-install apcu \
# cleanup
&& docker-php-source delete
9Ghi chú. Nếu hình ảnh cơ sở của bạn là
FROM php:7.3.2-fpm-stretch
ENV EXT_APCU_VERSION=5.1.17
RUN docker-php-source extract \
# ext-apcu
&& mkdir -p /usr/src/php/ext/apcu \
&& curl -fsSL //github.com/krakjoe/apcu/archive/v$EXT_APCU_VERSION.tar.gz | tar xvz -C /usr/src/php/ext/apcu --strip 1 \
&& docker-php-ext-install apcu \
# cleanup
&& docker-php-source delete
26, bạn cần thay thế FROM php:7.3.2-fpm-stretch
ENV EXT_APCU_VERSION=5.1.17
RUN docker-php-source extract \
# ext-apcu
&& mkdir -p /usr/src/php/ext/apcu \
&& curl -fsSL //github.com/krakjoe/apcu/archive/v$EXT_APCU_VERSION.tar.gz | tar xvz -C /usr/src/php/ext/apcu --strip 1 \
&& docker-php-ext-install apcu \
# cleanup
&& docker-php-source delete
27 bằng FROM php:7.3.2-fpm-stretch
ENV EXT_APCU_VERSION=5.1.17
RUN docker-php-source extract \
# ext-apcu
&& mkdir -p /usr/src/php/ext/apcu \
&& curl -fsSL //github.com/krakjoe/apcu/archive/v$EXT_APCU_VERSION.tar.gz | tar xvz -C /usr/src/php/ext/apcu --strip 1 \
&& docker-php-ext-install apcu \
# cleanup
&& docker-php-source delete
28Dockerfile cuối cùng, không có PECL
Đây là Dockerfile cuối cùng của chúng tôi, không có PECL. Nó khá dài dòng, nhưng bây giờ chúng ta có thể chơi với PHP 7. 4 hoặc thậm chí PHP 8. 0