Docker php ext cài đặt openssl

Có nhiều người trên internet nói rằng vấn đề đã được giải quyết nhưng tôi không biết truy cập gói solr đã giải quyết đó ở đâu

Đây là một Dockerfile hoạt động

TỪ php. 7. 0

CHẠY apt-get update \
&& apt-get install -y libcurl4-openssl-dev libxml2-dev \
&& pecl install solr- . 4. 0 \
&& docker-php-ext-enable solr

Sau đó, bạn có thể đăng ký một vùng chứa từ Dockerfile này mà solr đã được kích hoạt trong chứng thư

Nhưng chỉ cần đổi sang sử dụng php. 7. 2 và docker không xây dựng được

TỪ php. 7. 2

CHẠY apt-get update \
&& apt-get install -y libcurl4-openssl-dev libxml2-dev \
&& pecl install solr- . 4. 0 \
&& docker-php-ext-enable solr

Đây không phải là sự cố docker, tôi là sự cố với php7. 2 và phần mở rộng solr này. Tôi cần điều này để làm việc với docker trong Dockerfile, vì vậy tính linh hoạt mà tôi có để thay đổi nội dung gói pecl là tối thiểu

Trong một bài đăng trước, tôi đã trình bày chi tiết về cách phối hợp Docker với PHP và lưu ý rằng Zend hiện cung cấp sổ đăng ký bộ chứa riêng với các hình ảnh ZendPHP. Chúng tôi cũng cung cấp một

$ docker build \
> --build-arg OS=debian \
> --build-arg OS_VERSION=10 \
> --build-arg ZENDPHP_VERSION=8.1 \
> --build-arg ZEND_EXTENSIONS_LIST=mysqli,gd,intl \
> --build-arg POST_BUILD_BASH=setup.sh \
> -f Dockerfile.custom \
> -t mybiz/php-fpm-8.1
1 có thể tải xuống, linh hoạt, có thể tùy chỉnh cho các hình ảnh ZendPHP [tìm thấy ở đây] có thể đơn giản hóa rất nhiều việc tạo hình ảnh, đặc biệt khi sử dụng các công nghệ điều phối

Trong bài đăng này, tôi sẽ trình bày chi tiết về

$ docker build \
> --build-arg OS=debian \
> --build-arg OS_VERSION=10 \
> --build-arg ZENDPHP_VERSION=8.1 \
> --build-arg ZEND_EXTENSIONS_LIST=mysqli,gd,intl \
> --build-arg POST_BUILD_BASH=setup.sh \
> -f Dockerfile.custom \
> -t mybiz/php-fpm-8.1
1 đó, chỉ ra cách bạn có thể sử dụng cùng một tệp để tạo các hình ảnh Docker PHP tùy chỉnh khác nhau, cũng như trình bày một số kỹ thuật bổ sung mà bạn có thể sử dụng

Dockerfile là gì?

Một

$ docker build \
> --build-arg OS=debian \
> --build-arg OS_VERSION=10 \
> --build-arg ZENDPHP_VERSION=8.1 \
> --build-arg ZEND_EXTENSIONS_LIST=mysqli,gd,intl \
> --build-arg POST_BUILD_BASH=setup.sh \
> -f Dockerfile.custom \
> -t mybiz/php-fpm-8.1
1 là một tệp văn bản mô tả cách xây dựng trạng thái ban đầu của vùng chứa hoặc hình ảnh. Hầu hết người tiêu dùng sẽ mở rộng hình ảnh Docker hiện có và thêm các hướng dẫn bổ sung vào đó để cung cấp các cài đặt cụ thể cho ứng dụng của riêng họ. Hình ảnh cơ sở có thể là một hệ điều hành [e. g. , Ubuntu20. 04, Alpine Linux hoặc CentOS 8] hoặc một hình ảnh khác được xây dựng trên các

Tôi có thể chạy PHP trong Docker không?

Thông thường, hình ảnh cơ sở sẽ cung cấp thời gian chạy ngôn ngữ trên hình ảnh hệ điều hành cơ sở, đảm bảo rằng bạn có thể chạy các ứng dụng nhắm mục tiêu ngôn ngữ đó trong hệ điều hành đó. PHP cũng không khác và có một số hình ảnh PHP khác nhau mà bạn có thể nhắm mục tiêu trong ứng dụng của mình

$ docker build \
> --build-arg OS=debian \
> --build-arg OS_VERSION=10 \
> --build-arg ZENDPHP_VERSION=8.1 \
> --build-arg ZEND_EXTENSIONS_LIST=mysqli,gd,intl \
> --build-arg POST_BUILD_BASH=setup.sh \
> -f Dockerfile.custom \
> -t mybiz/php-fpm-8.1
1. Chúng tôi cung cấp hình ảnh cơ sở của riêng mình cho ZendPHP và cung cấp công cụ mở rộng để giúp định cấu hình thời gian chạy PHP của bạn dễ dàng hơn, giảm lượng kiến ​​thức bạn cần để thành công với PHP trong Docker

Dockerfile

Một phiên bản không có chú thích của

$ docker build \
> --build-arg OS=debian \
> --build-arg OS_VERSION=10 \
> --build-arg ZENDPHP_VERSION=8.1 \
> --build-arg ZEND_EXTENSIONS_LIST=mysqli,gd,intl \
> --build-arg POST_BUILD_BASH=setup.sh \
> -f Dockerfile.custom \
> -t mybiz/php-fpm-8.1
1 trông giống như sau

ARG OS=ubuntu
ARG OS_VERSION=20.04
ARG ZENDPHP_VERSION=7.4
ARG BASE_IMAGE=fpm

FROM cr.zend.com/zendphp/${ZENDPHP_VERSION}:${OS}-${OS_VERSION}-${BASE_IMAGE}

ARG TIMEZONE=UTC
ARG INSTALL_COMPOSER=
ARG SYSTEM_PACKAGES
ARG ZEND_EXTENSIONS_LIST
ARG PECL_EXTENSIONS_LIST
ARG POST_BUILD_BASH
ENV TZ=$TIMEZONE \
    YUM_y='-y'
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone

# ADD or COPY any files or directories needed in your image here.

RUN ZendPHPCustomizeWithBuildArgs.sh

$ docker build \
> --build-arg OS=debian \
> --build-arg OS_VERSION=10 \
> --build-arg ZENDPHP_VERSION=8.1 \
> --build-arg ZEND_EXTENSIONS_LIST=mysqli,gd,intl \
> --build-arg POST_BUILD_BASH=setup.sh \
> -f Dockerfile.custom \
> -t mybiz/php-fpm-8.1
1 ở trên sẽ xây dựng một PHP-FPM 7. 4 hình ảnh sử dụng Ubuntu 20. 04, sử dụng danh sách mở rộng cơ sở

Bạn sẽ nhận thấy rằng bạn có thể tùy chỉnh nó bằng nhiều đối số bản dựng

OSHệ điều hành. Chúng tôi hiện có các bản dựng Ubuntu, CentOS và Debian trong sổ đăng ký vùng chứa của chúng tôi. OS_VERSIONPhiên bản hệ điều hành. Chúng tôi hỗ trợ Ubuntu 20. 04, Debian 10, CentOS 7 và 8 hiện có trong sổ đăng ký bộ chứa của chúng tôi. ZENDPHP_VERSIONBạn muốn cài đặt phiên bản ZendPHP nào. 5. 6, 7. 1, 7. 2, 7. 3, 7. 4, 8. 0 hoặc 8. 1 đều có sẵn, mặc dù phiên bản LTS [tất cả trước 7. 4] yêu cầu một số thiết lập bổ sung để hoạt động, vì chúng yêu cầu giấy phép Zend. BASE_IMAGEMột trong số "cli" hoặc "fpm". Phiên bản CLI cung cấp bản dựng chỉ với nhị phân PHP CLI, trong khi phiên bản FPM cung cấp cả nhị phân CLI và PHP-FPM. Các phiên bản CLI thường hữu ích trong đường dẫn CI/CD cho những việc như chạy PHPUnit, PHPCS hoặc phân tích tĩnh. Các tệp nhị phân PHP-FPM có thể được sử dụng phía sau bất kỳ máy chủ web nào hỗ trợ FastCGI. TIMEZONEMúi giờ hệ thống sẽ sử dụng. Chúng tôi khuyên bạn nên sử dụng UTC, nhưng nếu bạn cần sử dụng múi giờ địa phương, thì bạn có thể đặt múi giờ đó thông qua đối số bản dựng. INSTALL_COMPOSERNếu giá trị "trung thực", hình ảnh sẽ cài đặt Composer trong quá trình xây dựng. SYSTEM_PACKAGESDanh sách các gói hệ thống bổ sung được phân tách bằng dấu phẩy hoặc dấu cách để cài đặt, nếu có. ZEND_EXTENSIONS_LISTDanh sách các tiện ích mở rộng PHP bổ sung được phân tách bằng dấu phẩy hoặc dấu cách có sẵn trong kho lưu trữ ZendPHP để cài đặt; . g. "mysqli"] thay vì tên gói đầy đủ. PECL_EXTENSIONS_LISTDanh sách tiện ích mở rộng PECL được phân tách bằng dấu phẩy hoặc dấu cách để xây dựng và cài đặt. Đây có thể chỉ là tên mở rộng PECL [e. g. , "inotify"], tên và phiên bản [e. g. , "thông báo-0. 1. 6"] và/hoặc tiền tố cho biết mức độ ưu tiên khởi tạo sau khi cài đặt [e. g. , "30-swool"; . POST_BUILD_BASHTập lệnh shell hoặc tệp thực thi khác để thực thi ở bước xây dựng cuối cùng. Điều này có thể hữu ích khi thực hiện những việc như di chuyển tệp xung quanh, đặt quyền hoặc các tác vụ khác cần thiết để đảm bảo vùng chứa sẵn sàng chạy.  

Đây là rất nhiều đối số xây dựng và bạn có thể sẽ không muốn chỉ định chúng trên dòng lệnh thường xuyên

$ docker build \
> --build-arg OS=debian \
> --build-arg OS_VERSION=10 \
> --build-arg ZENDPHP_VERSION=8.1 \
> --build-arg ZEND_EXTENSIONS_LIST=mysqli,gd,intl \
> --build-arg POST_BUILD_BASH=setup.sh \
> -f Dockerfile.custom \
> -t mybiz/php-fpm-8.1

Bởi vì bạn sẽ không có tệp ứng dụng nào, chỉ có một bản cài đặt PHP trống, hãy tìm cách tùy chỉnh hình ảnh

Tùy chỉnh hình ảnh Docker PHP

Khi thực hiện điều phối với Docker, thông thường bạn sẽ sử dụng một công nghệ khác như Compose, Swarm hoặc Kubernetes. Mỗi công nghệ này cho phép bạn mô tả các dịch vụ và [nói chung] những mô tả này cho phép bạn chỉ định một hình ảnh để sử dụng và tùy chỉnh với các biến số khối lượng, mạng và môi trường hoặc một

$ docker build \
> --build-arg OS=debian \
> --build-arg OS_VERSION=10 \
> --build-arg ZENDPHP_VERSION=8.1 \
> --build-arg ZEND_EXTENSIONS_LIST=mysqli,gd,intl \
> --build-arg POST_BUILD_BASH=setup.sh \
> -f Dockerfile.custom \
> -t mybiz/php-fpm-8.1
1 và bối cảnh bản dựng [có thể bao gồm những thứ như bản dựng . Đó là cái sau mà tôi muốn xem xét bây giờ

Để giữ cho các ví dụ đơn giản, tôi sẽ sử dụng Compose tại đây. Tuy nhiên, chúng có thể được ngoại suy thành Swarm, Kubernetes, Helm và các giải pháp khác

Chúng tôi sẽ sử dụng cơ sở

$ docker build \
> --build-arg OS=debian \
> --build-arg OS_VERSION=10 \
> --build-arg ZENDPHP_VERSION=8.1 \
> --build-arg ZEND_EXTENSIONS_LIST=mysqli,gd,intl \
> --build-arg POST_BUILD_BASH=setup.sh \
> -f Dockerfile.custom \
> -t mybiz/php-fpm-8.1
1 và cung cấp cấu hình cho bản dựng

services:
  php:
    build: 
      context: .
      dockerfile: Dockerfile
      args:
        OS: debian
        OS_VERSION: 10
        ZENDPHP_VERSION: 8.1
        INSTALL_COMPOSER: 'true'
        ZEND_EXTENSIONS_LIST: 'bz2 curl intl mbstring opcache xsl zip'
        POST_BUILD_BASH: '/var/www/scripts/setup.sh'
    volumes:
      - .:/var/www/

Ý chí trên

  • Tạo PHP-FPM 8. 1 hình ảnh sử dụng Debian 10
  • Cài đặt Trình soạn thảo
  • Thêm và kích hoạt các tiện ích mở rộng bz2, curl, intl, mbstring, opcache, xsl và zip
  • Ánh xạ thư mục hiện tại tới
    $ docker build \
    > --build-arg OS=debian \
    > --build-arg OS_VERSION=10 \
    > --build-arg ZENDPHP_VERSION=8.1 \
    > --build-arg ZEND_EXTENSIONS_LIST=mysqli,gd,intl \
    > --build-arg POST_BUILD_BASH=setup.sh \
    > -f Dockerfile.custom \
    > -t mybiz/php-fpm-8.1
    5
  • Chạy tập lệnh hậu xây dựng liên quan đến thư mục được ánh xạ

Cách tiếp cận này cho phép bạn trở nên hiệu quả ngay lập tức trong quá trình phát triển. Bạn có thể điều chỉnh danh sách tiện ích mở rộng, thay đổi phiên bản PHP và hơn thế nữa bằng các chỉnh sửa nhỏ

Đây là tệp Soạn thảo mô tả vùng chứa sử dụng OpenSwoole thay thế

version: '3.3'

services:
  php:
    build: 
      context: .
      dockerfile: Dockerfile
      args:
        OS: ubuntu
        OS_VERSION: 20.04
        ZENDPHP_VERSION: 8.1
        BASE_IMAGE: cli
        INSTALL_COMPOSER: 'true'
        ZEND_EXTENSIONS_LIST: 'bz2 curl intl mbstring opcache xsl zip'
        PECL_EXTENSIONS_LIST: '30-openswoole-4.9.0'
        POST_BUILD_BASH: '/var/www/scripts/setup.sh'
    volumes:
      - .:/var/www/

Xin lưu ý rằng khi sử dụng PECL_EXTENSIONS_LIST, bạn cũng có thể cần chỉ định các gói phát triển trong đối số bản dựng SYSTEM_PACKAGES được yêu cầu để tạo tiện ích mở rộng. Khi thực hiện cài đặt PECL, gói phát triển ZendPHP [e. g. , php-7. 4-zend-dev hoặc php74-zend-php-devel] và/hoặc gói PEAR cũng sẽ được cài đặt trong thời gian xây dựng

Cái hay của mỗi thứ này là tôi có thể dùng đi dùng lại cùng một

$ docker build \
> --build-arg OS=debian \
> --build-arg OS_VERSION=10 \
> --build-arg ZENDPHP_VERSION=8.1 \
> --build-arg ZEND_EXTENSIONS_LIST=mysqli,gd,intl \
> --build-arg POST_BUILD_BASH=setup.sh \
> -f Dockerfile.custom \
> -t mybiz/php-fpm-8.1
1 mà không cần thay đổi. Bằng cách sử dụng đối số bản dựng và biến môi trường, tôi có thể tùy chỉnh hình ảnh mà mình tạo

Xây dựng hình ảnh docker PHP cho sản xuất

Các ví dụ trước là một khởi đầu tốt. Tuy nhiên, trong quá trình sản xuất, chúng tôi thường muốn đảm bảo rằng các tệp ứng dụng được sao chép vào hình ảnh và không được gắn qua ổ đĩa. Điều này đặc biệt đúng khi chúng tôi xem xét các hệ thống phối hợp nhiều vùng chứa và/hoặc nhiều máy chủ

Như vậy, chúng tôi sẽ cần tùy chỉnh

$ docker build \
> --build-arg OS=debian \
> --build-arg OS_VERSION=10 \
> --build-arg ZENDPHP_VERSION=8.1 \
> --build-arg ZEND_EXTENSIONS_LIST=mysqli,gd,intl \
> --build-arg POST_BUILD_BASH=setup.sh \
> -f Dockerfile.custom \
> -t mybiz/php-fpm-8.1
1 để làm như vậy

Nếu bạn chú ý đến

$ docker build \
> --build-arg OS=debian \
> --build-arg OS_VERSION=10 \
> --build-arg ZENDPHP_VERSION=8.1 \
> --build-arg ZEND_EXTENSIONS_LIST=mysqli,gd,intl \
> --build-arg POST_BUILD_BASH=setup.sh \
> -f Dockerfile.custom \
> -t mybiz/php-fpm-8.1
1 cơ bản, bạn sẽ nhận thấy rằng nó có rất ít chỉ thị; . Trong hầu hết các trường hợp, bạn có thể cung cấp các tùy chỉnh của mình ở một trong hai vị trí

  • Ngay trước cuộc gọi tới
    $ docker build \
    > --build-arg OS=debian \
    > --build-arg OS_VERSION=10 \
    > --build-arg ZENDPHP_VERSION=8.1 \
    > --build-arg ZEND_EXTENSIONS_LIST=mysqli,gd,intl \
    > --build-arg POST_BUILD_BASH=setup.sh \
    > -f Dockerfile.custom \
    > -t mybiz/php-fpm-8.1
    9
  • Ngay sau cuộc gọi tới
    $ docker build \
    > --build-arg OS=debian \
    > --build-arg OS_VERSION=10 \
    > --build-arg ZENDPHP_VERSION=8.1 \
    > --build-arg ZEND_EXTENSIONS_LIST=mysqli,gd,intl \
    > --build-arg POST_BUILD_BASH=setup.sh \
    > -f Dockerfile.custom \
    > -t mybiz/php-fpm-8.1
    9

Ví dụ, tôi có thể sao chép các tệp ứng dụng trong

ARG OS=ubuntu
ARG OS_VERSION=20.04
ARG ZENDPHP_VERSION=7.4
ARG BASE_IMAGE=fpm

FROM cr.zend.com/zendphp/${ZENDPHP_VERSION}:${OS}-${OS_VERSION}-${BASE_IMAGE}

ARG TIMEZONE=UTC
ARG INSTALL_COMPOSER=
ARG SYSTEM_PACKAGES
ARG ZEND_EXTENSIONS_LIST
ARG PECL_EXTENSIONS_LIST
ARG POST_BUILD_BASH
ENV TZ=$TIMEZONE \
    YUM_y='-y'
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone

# ADD or COPY any files or directories needed in your image here.
COPY . /var/www/

RUN ZendPHPCustomizeWithBuildArgs.sh

Một lợi ích to lớn cho điều này là chúng ta vẫn có thể sử dụng lại

$ docker build \
> --build-arg OS=debian \
> --build-arg OS_VERSION=10 \
> --build-arg ZENDPHP_VERSION=8.1 \
> --build-arg ZEND_EXTENSIONS_LIST=mysqli,gd,intl \
> --build-arg POST_BUILD_BASH=setup.sh \
> -f Dockerfile.custom \
> -t mybiz/php-fpm-8.1
1 với nhiều ứng dụng. Chúng tôi có thể giả định rằng ở cả thời gian xây dựng và thời gian chạy, ứng dụng được cài đặt tới
services:
  php:
    build: 
      context: .
      dockerfile: Dockerfile
      args:
        OS: debian
        OS_VERSION: 10
        ZENDPHP_VERSION: 8.1
        INSTALL_COMPOSER: 'true'
        ZEND_EXTENSIONS_LIST: 'bz2 curl intl mbstring opcache xsl zip'
        POST_BUILD_BASH: '/var/www/scripts/setup.sh'
    volumes:
      - .:/var/www/
2, cho phép chúng tôi chỉ định các tập lệnh sau khi xây dựng hoặc định cấu hình máy chủ web hỗ trợ FastCGI của chúng tôi để chuyển yêu cầu đến vị trí đó. Trong quá trình phát triển, chúng tôi có thể sử dụng Compose, nơi chúng tôi có thể ánh xạ một ổ đĩa để khi chúng tôi thực hiện các thay đổi, chúng sẽ được phản ánh trong ứng dụng đang chạy

Bản dựng nhiều giai đoạn

Trong ví dụ trước, tôi đã lưu ý rằng khi chỉ định PECL_EXTENSIONS_LIST, tôi có thể cần chỉ định các gói phát triển hệ thống để xây dựng tiện ích mở rộng. Trong quá trình sản xuất, tôi có thể không muốn những thứ đó kéo dài

Một cách để giải quyết những vấn đề đó là thêm một bước xây dựng khác để loại bỏ các gói phát triển

RUN apt-get remove {list of development packages here}

Một cách khác là đảm bảo chúng không bao giờ xuất hiện ngay từ đầu, điều này có thể được thực hiện với bản dựng nhiều giai đoạn. Ví dụ, gần đây tôi muốn xây dựng OpenSwoole cho bộ chứa ZendPHP. Tôi có một giai đoạn thực hiện quá trình xây dựng, yêu cầu các gói bổ sung. Hình ảnh sản xuất sau đó sao chép các tệp từ giai đoạn đó vào chính nó

$ docker build \
> --build-arg OS=debian \
> --build-arg OS_VERSION=10 \
> --build-arg ZENDPHP_VERSION=8.1 \
> --build-arg ZEND_EXTENSIONS_LIST=mysqli,gd,intl \
> --build-arg POST_BUILD_BASH=setup.sh \
> -f Dockerfile.custom \
> -t mybiz/php-fpm-8.1
0

Cách tiếp cận này đảm bảo rằng tôi không có công cụ xây dựng nào trong hình ảnh cuối cùng của mình, chỉ có kết quả của việc xây dựng [tệp mở rộng và các thư viện của nó].

$ docker build \
> --build-arg OS=debian \
> --build-arg OS_VERSION=10 \
> --build-arg ZENDPHP_VERSION=8.1 \
> --build-arg ZEND_EXTENSIONS_LIST=mysqli,gd,intl \
> --build-arg POST_BUILD_BASH=setup.sh \
> -f Dockerfile.custom \
> -t mybiz/php-fpm-8.1
1 vẫn có thể được sử dụng lại cho bất kỳ hình ảnh dựa trên OpenSwoole nào mà tôi muốn hiển thị và giờ đây tôi nhận được lợi ích của bộ nhớ đệm bản dựng Docker bất cứ khi nào tôi tạo những hình ảnh như vậy, vì chúng sẽ lưu vào bộ đệm giai đoạn "swoole"

Lợi ích của hình ảnh Docker ZendPHP

Lợi ích chính của hình ảnh ZendPHP Docker là dễ dàng tùy chỉnh. bạn có thể sử dụng cùng một

$ docker build \
> --build-arg OS=debian \
> --build-arg OS_VERSION=10 \
> --build-arg ZENDPHP_VERSION=8.1 \
> --build-arg ZEND_EXTENSIONS_LIST=mysqli,gd,intl \
> --build-arg POST_BUILD_BASH=setup.sh \
> -f Dockerfile.custom \
> -t mybiz/php-fpm-8.1
1 và tạo các hình ảnh tùy chỉnh thông qua các đối số bản dựng, có thể được chỉ định trong các tệp điều phối và được lưu trong kho kiểm soát phiên bản của bạn. Cách tiếp cận này cho phép bạn tạo các hình ảnh tiêu chuẩn có thể tái sử dụng trong nhiều ngữ cảnh mà không tốn nhiều công sức

Và bài viết này chỉ sơ lược về những gì bạn có thể làm với ZendPHP Docker image. Ngoài các tính năng được hiển thị ở đây, chúng tôi cũng có các công cụ cho phép chạy nhiều dịch vụ trong vùng chứa của bạn một cách an toàn, cũng như các cơ chế để tạo các vùng chứa đang chạy không root hoặc không có đặc quyền. Hãy theo dõi để biết thêm về điều đó trong các blog sắp tới

Chủ Đề