PhalconPHP в Docker

Я создаю контейнер докеров с PhalconPHP, установленным на моем локальном компьютере (Mac), следующим образом:

FROM php:7.2-apache

...

RUN git clone --depth=1 git://github.com/phalcon/cphalcon.git /cphalcon
WORKDIR /cphalcon/build
RUN ./install
RUN touch /usr/local/etc/php/conf.d/docker-php-ext-phalcon.ini \
    && echo "extension=/usr/local/lib/php/extensions/no-debug-non-zts-20170718/phalcon.so" >> /usr/local/etc/php/conf.d/docker-php-ext-phalcon.ini

...

Затем я собираю его следующим способом:

docker build -t {registry url}/images/php72/apache/mongo:phalcon-dev -f {filename} .

После сборки я могу выполнить развертывание на своем локальном компьютере с помощью docker-compose, и он отлично работает.

Затем я отправлю его в свой частный реестр докеров, размещенный на GitLab, как таковой:

docker push {registry uri}/images/php72/apache/mongo:phalcon-dev

Но когда я вытаскиваю его на свой промежуточный сервер (цент) и развертываю его с помощью docker-compose как такового:

docker pull {registry uri}/images/php72/apache/mongo:phalcon-dev

Контейнер действует так, как будто он потерял установку Phalcon.

Я могу ввести в контейнер командную строку и перестроить Phalcon, используя команды из Dockerfile, и все будет работать как надо.

Мне что-то не хватает в команде build, push или pull?

Любая помощь приветствуется!

Файлы:

Dockerfile

FROM php:7.2-apache

RUN apt-get update && apt-get install -y \
        libssl-dev \
        unzip \
        git

RUN apt-get install -y curl gnupg make g++ \
        && curl -sL https://deb.nodesource.com/setup_8.x | bash - \
        && apt-get install -y nodejs

RUN pecl install mongodb
RUN touch /usr/local/etc/php/conf.d/docker-php-ext-mongo.ini \
    && echo "extension=mongodb.so" >> /usr/local/etc/php/conf.d/docker-php-ext-mongo.ini

RUN git clone --depth=1 git://github.com/phalcon/cphalcon.git /cphalcon
WORKDIR /cphalcon/build
RUN ./install
RUN touch /usr/local/etc/php/conf.d/docker-php-ext-phalcon.ini \
    && echo "extension=/usr/local/lib/php/extensions/no-debug-non-zts-20170718/phalcon.so" >> /usr/local/etc/php/conf.d/docker-php-ext-phalcon.ini

RUN a2enmod rewrite

RUN echo "\n \
<Directory /var/www/html>\n \
    RewriteEngine on\n \
    RewriteCond %{REQUEST_FILENAME} !-d\n \
    RewriteCond %{REQUEST_FILENAME} !-f\n \
    RewriteRule ^(.*)$ index.php?_url=/\$1 [QSA,L]\n \
</Directory>\n \
" >> /etc/apache2/apache2.conf

RUN php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');" \
    && php composer-setup.php \
    && mv composer.phar /usr/local/bin/composer \
    && php -r "unlink('composer-setup.php');"

RUN apt-get clean \
    && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* \
    && apt-get purge -y --auto-remove

WORKDIR /var/www/html

Файл Docker-Compose:

version: "3"

networks:
    proxy:
        external: true
    site:
        external: true

services:
    db:
        container_name: {container name}
        environment:
            - MONGODB_ROOT_PASSWORD = {password}
            - MONGODB_DATABASE = {database}
        image: bitnami/mongodb:latest
        networks:
            - site
        restart: "always"
        volumes:
            - ./db:/bitnami/mongodb
    www:
        container_name: {container name}
        environment:
            - VIRTUAL_HOST = {hostname}
            - VIRTUAL_PORT=80
        image: {registry name}/images/php72/apache/mongo:phalcon-dev
        networks:
            - site
            - proxy
        restart: "always"
        volumes:
            - ./www:/var/www/html

У вас нет команды CMD или ENTRYPOINT, которая запускала бы PhalconPHP при создании контейнера из образа. Когда он запущен, он ничего не сделает. Я думаю, что это, наверное, тоже не работает локально. Вы каким-то образом запускаете контейнер, а затем запускаете процесс явно, когда запускаете его локально? Пожалуйста, поделитесь своим файлом docker-compose.

DazWilkin 17.08.2018 00:42

Я добавил и Dockerfile, и docker compose в разделе «Файлы» выше. Я просто использую CMD, унаследованный от изображения PHP

Lucas Swets 17.08.2018 01:03

Я не разработчик PHP, но не вижу, где запущен Phalcon. Файл docker-compose выглядит нормально, но он «запускает» контейнеры db и www и предполагает, что оба (я предполагаю, что у MongoDB есть) имеют операторы CMD или ENTRYPOINT для запуска процесса. В вашем DOCKERFILE есть операторы RUN, которые предназначены для сборки / установки Phalcon в образ, но я бы ожидал увидеть что-то вроде ENTRYPOINT ['/run/phalconphp'] в конце, а там ничего нет.

DazWilkin 17.08.2018 01:13

Phalcon - это c-расширение, которое загружается как модуль в PHP, аналогично модулю MongoDB или MySQL.

Lucas Swets 17.08.2018 16:21

Таким образом, когда я помещаю образ в свой реестр, он теряет информацию о сборке для модуля Phalcon. Я ищу прямо сейчас, чтобы увидеть, может ли это быть раздел apt-clean в Dockerfile, вызывающий эту проблему.

Lucas Swets 17.08.2018 16:31
Развертывание модели машинного обучения с помощью Flask - Angular в Kubernetes
Развертывание модели машинного обучения с помощью Flask - Angular в Kubernetes
Kubernetes - это портативная, расширяемая платформа с открытым исходным кодом для управления контейнерными рабочими нагрузками и сервисами, которая...
Как создать PHP Image с нуля
Как создать PHP Image с нуля
Сегодня мы создадим PHP Image from Scratch для того, чтобы легко развернуть базовые PHP-приложения. Пожалуйста, имейте в виду, что это разработка для...
0
5
3 441
1

Ответы 1

Я также использую Phalcon с докером, мой образ докера основан на Debian 9, но работает отлично.

См. Мой файл докеров:

FROM debian:9

RUN apt-get update

RUN apt-get install -y \ 
    apt-transport-https \ 
    lsb-release \ 
    ca-certificates \ 
    wget \ 
    curl \ 
    nano \ 
    dialog \ 
    net-tools \ 
    openssl

RUN apt-get install -y nginx

RUN wget -O /etc/apt/trusted.gpg.d/php.gpg https://packages.sury.org/php/apt.gpg
RUN sh -c 'echo "deb https://packages.sury.org/php/ $(lsb_release -sc) main" > /etc/apt/sources.list.d/php.list'
RUN apt-get update && apt-get install -y \
    php7.1 \
    php7.1-cli \
    php7.1-fpm \
    php7.1-mysql \
    php7.1-curl \
    php7.1-mbstring \
    php7.1-gettext \
    php7.1-gd \
    php7.1-fileinfo \
    php7.1-json \
    php7.1-mcrypt \
    php7.1-redis \
    php7.1-intl \
    php7.1-xml \
    php7.1-zip

RUN curl -s "https://packagecloud.io/install/repositories/phalcon/stable/script.deb.sh" | bash
RUN apt-get install -y php7.1-phalcon

ADD entrypoint.sh /usr/bin/entrypoint.sh
RUN chmod a+x /usr/bin/entrypoint.sh

ENTRYPOINT [ "entrypoint.sh" ]

Мой entrypoint.sh:

#!/bin/bash

service nginx start
service php7.1-fpm start

tail -F -n0 /etc/hosts

Надеюсь, это поможет тебе.

Другие вопросы по теме