【问题标题】:PhalconPHP in DockerDocker 中的 PhalconPHP
【发布时间】:2018-08-16 22:26:09
【问题描述】:

我正在构建一个安装在本地机器 (mac) 上的 PhalconPHP 的 docker 容器,如下所示:

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 注册表中:

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

但是当我将它拉到我的登台服务器(cent)并使用 docker-compose 部署它时:

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

容器就像丢失了 Phalcon 安装一样。

我可以在容器中使用命令行并使用 Dockerfile 中的命令重建 Phalcon,一切正常。

我是否在构建、推送或拉取命令中遗漏了什么?

感谢任何帮助!

文件:

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

【问题讨论】:

  • 当你从镜像创建容器时,你没有 CMDENTRYPOINT 命令来运行 PhalconPHP。它运行时什么也不做。我认为它可能在本地也不起作用。您是否以某种方式运行容器,然后在本地运行时显式启动该过程?请分享您的docker-compose 文件。
  • 我在上面的“文件”下添加了 Dockerfile 和 docker compose。我只是使用从PHP 图像继承的 CMD
  • 我不是 PHP 开发人员,但我看不到 Phalcon 是从哪里开始的。 docker-compose 文件看起来不错,但它同时“运行”dbwww 容器,并假设两者(我假设 MongoDB 确实如此)都有 CMDENTRYPOINT 语句来启动该过程。您的 DOCKERFILERUN 语句,它们希望将 Phalcon 构建/安装到映像中,但我希望在最后看到类似于 ENTRYPOINT ['/run/phalconphp'] 的内容,但那里什么都没有。
  • Phalcon 是一个 c 扩展,在 PHP 中像模块一样加载,类似于 MongoDB 或 MySQL 模块。
  • 所以就好像当我将图像推送到我的注册表时,它会丢失 Phalcon 模块的构建信息。我现在正在寻找是否可能是 Dockerfile 的 apt-clean 部分导致了这个问题

标签: docker phalcon


【解决方案1】:

我也将 Phalcon 与 docker 一起使用,我的 docker 镜像基于 Debian 9,但它运行良好。

查看我的 dockerfile :

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

希望对您有所帮助。

【讨论】:

    猜你喜欢
    • 2015-06-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多