容器化的LNMP环境,如何升级PHP到8.1.9
发布于 2022-08-16 21:38:37阅读 1733
为什么要容器化
提到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
美中不足,这个替换旧容器的过程不能做到无缝衔接。。。