容器化的LNMP环境,如何升级PHP到8.1.9

发布于 2022-08-16 13:38:37阅读 1209

为什么要容器化

提到docker你可能会想到k8s,想到分布式,想到高并发;那单机服务器,或者开发环境有没有必要上docker呢?我觉得有!以LNMP环境为例

相比传统的LNMP环境搭建,docker有哪些优势?

之前安装LNMP环境你可能会选择yum,或手动编译,或宝塔之类的;我不太喜欢宝塔之类的,因为给它们的权限太大了,如果有漏洞那是很危险的。再说yum和手动编译,这两个你都没法保证一次成功次次成功!!!比如你在本地安装好了,然后你用同样的步骤到服务上安装,有可能会失败,因为系统不一样!

docker 成功的解决了上面的问题,就是能做到一次成功次次成功。利用编排工具docker-compose,你不必记忆docker run的一堆参数,只需要通过几个命令就能很方便的管理一组容器。剩下的你只需要关注一个docker-compose.yml文件,不管什么时候用,用在哪里,都能一摸一样的还原出来

PHP7.4升级到8.1.9

容器化以后,升级也变的简单了,你只需要制作新的镜像,然后替换掉旧的镜像即可

本地制作PHP8.1.9镜像及使用

我的Dockerfile,里面有几个扩展,不需要可以去掉

FROM php:8.1.9-fpm
RUN apt-get update && apt-get install -y git procps inetutils-ping net-tools \
        libfreetype6-dev \
        libjpeg62-turbo-dev \
        libpng-dev \
        libzip-dev \
        libssl-dev \
        libcurl4-openssl-dev \
        libc-ares-dev \
    && docker-php-ext-configure gd --with-freetype --with-jpeg \
    && docker-php-ext-install -j$(nproc) gd \
    && pecl install redis-5.3.7 mongodb-1.14.0 \
    && pecl install -D 'enable-sockets="no" enable-openssl="yes" enable-http2="yes" enable-mysqlnd="yes" enable-swoole-json="no" enable-swoole-curl="yes" enable-cares="yes"' swoole-5.0.0 \
    && docker-php-ext-install pdo pdo_mysql mysqli zip sockets \
    && docker-php-ext-enable redis swoole mongodb \
    && curl -sfL https://getcomposer.org/installer | php -- --install-dir=/usr/bin --filename=composer \
    && chmod +x /usr/bin/composer \
    && composer self-update 2.3.10 \
    && composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/

构建镜像

docker build -t registry.cn-hangzhou.aliyuncs.com/cuiw/php:v2-mongodb .  

推送镜像(你需要先申请阿里云的容器镜像服务)

docker push registry.cn-hangzhou.aliyuncs.com/cuiw/php:v2-mongodb 

使用镜像,以下是部分docker-compose.yml

version: '3'

networks:
  web-network:
...
  docker-php-fpm:
    image: registry.cn-hangzhou.aliyuncs.com/cuiw/php:v2-mongodb
    hostname: php-fpm
    restart: always
    tty: true
    volumes:
      - ./php-fpm/etc/php/php.ini:/usr/local/etc/php/php.ini
      - ./php-fpm/etc/php-fpm.d/docker.conf:/usr/local/etc/php-fpm.d/docker.conf
      - ./php-fpm/etc/php-fpm.d/www.conf:/usr/local/etc/php-fpm.d/www.conf
      - ../../PhpstormProjects:/var/www
      - ../log/php:/var/log/php
      - ../log/php-fpm:/var/log/php-fpm
    networks:
      - web-network
...

注意:php-7.4和php-8.1.9的配置文件有些许差异,建议比较后修改

将PHP8.1.9镜像同步到服务器

好了,本地的PHP8.1.9镜像测试完没问题,就可以修改服务器上的docker-compose.yml文件了,修改完之后,按以下步骤进行

拉取镜像

docker pull registry.cn-hangzhou.aliyuncs.com/cuiw/php:v2-mongodb

停止并删除旧容器

docker-compose down {容器id}

启动新容器

docker-compose up -d docker-php-fpm

美中不足,这个替换旧容器的过程不能做到无缝衔接。。。

广而告之,我的新作品《语音助手》上架Google Play了,欢迎下载体验