【问题标题】:How to add php-redis for a dockerfile of laravel to kubernetes?如何将laravel的dockerfile的php-redis添加到kubernetes?
【发布时间】:2020-05-25 11:22:08
【问题描述】:

我正在将 laravel 部署到 kubernetes 并希望拥有 redis。

实际上我有一个用于 nginx 的 Dockerfile,另一个用于 php-fpm-alpine 和所有 kubernetes yaml 文件(带有 tls、部署和服务的入口)

我希望将 php redis 添加到 php-fpm 容器中,有什么想法吗?

这里是实际的 php /Dockerfile

#
# PHP Dependencies
#
FROM composer:1 as vendor

COPY database/ database/
COPY composer.json composer.json
COPY composer.lock composer.lock

RUN composer install \
    --ignore-platform-reqs \
    --no-interaction \
    --no-plugins \
    --no-scripts \
    --prefer-dist

#
# Application
#
FROM php:fpm-alpine
RUN apk add --no-cache --virtual .build-deps \
        $PHPIZE_DEPS \
        curl \
        libtool \
        libxml2-dev \
    && apk add --no-cache \
        curl \
        git \
        mysql-client \
    && docker-php-ext-install \
        mbstring \
        pdo \
        pdo_mysql \
        tokenizer \
        bcmath \
        opcache \
        xml \
    && apk del -f .build-deps \
    && docker-php-ext-enable pdo_mysql

WORKDIR /var/www/html

COPY . /var/www/html
COPY --from=vendor /app/vendor/ /var/www/html/vendor/
COPY .env.example /var/www/html/.env

RUN chown -R root:www-data . 

EXPOSE 9000

CMD ["php-fpm"]

和 nginx /Dockerfile

FROM nginx:stable-alpine

ADD default.conf /etc/nginx/conf.d/default.conf

COPY public /var/www/html/public
WORKDIR /var/www/html/public

最后是nginx默认的/conf.d

server {
    listen 80;

    index index.php index.html;
    root /var/www/html/public;

    client_max_body_size 32M;

    location / {
        try_files $uri /index.php?$args;
    }

    location ~ \.php$ {
    fastcgi_pass   php:9000;
    fastcgi_index  index.php;
    fastcgi_param  SCRIPT_FILENAME $document_root$fastcgi_script_name;
    include        fastcgi_params;
    }
}

【问题讨论】:

    标签: php laravel docker kubernetes


    【解决方案1】:

    由于你使用的是官方的 PHP docker 镜像,你可以通过 PECL 安装 php-redis 扩展:

    RUN pecl install redis \
        && docker-php-ext-enable redis
    

    就这么简单!

    您可以从官方 PHP docker 文档了解更多关于 installing PHP extensions 的信息(如果是 php-redisinstalling PECL extensions)。

    所以在你的情况下,RUN 命令看起来像这样:

    # Your PHP Dockerfile
    RUN apk add --no-cache --virtual .build-deps \
            $PHPIZE_DEPS \
            curl \
            libtool \
            libxml2-dev \
        && apk add --no-cache \
            curl \
            git \
            mysql-client \
        && pecl install redis \     # install redis extension via PECL
        && docker-php-ext-install \
            mbstring \
            pdo \
            pdo_mysql \
            tokenizer \
            bcmath \
            opcache \
            xml \
        && apk del -f .build-deps \
        && docker-php-ext-enable \
           pdo_mysql \
           redis                    # don't forget to enable redis extension
    

    【讨论】:

    • 如果使用基于 Alpine 的映像,则在安装 PECL 之前需要额外的一行:apk --no-cache add pcre-dev ${PHPIZE_DEPS}
    【解决方案2】:

    alpine php 7.3.5 更新

    RUN apk add --no-cache pcre-dev $PHPIZE_DEPS \
            && pecl install redis \
            && docker-php-ext-enable redis.so
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-29
      • 2021-08-15
      • 2023-01-13
      • 1970-01-01
      • 1970-01-01
      • 2019-12-28
      • 2020-03-08
      • 2021-11-07
      相关资源
      最近更新 更多