为什么要容器化
提到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/
构建镜像
代码语言:javascript复制docker build -t registry.cn-hangzhou.aliyuncs.com/cuiw/php:v2-mongodb .
推送镜像
代码语言:javascript复制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
文件了,修改完之后,按以下步骤进行
拉取镜像
代码语言:javascript复制docker pull registry.cn-hangzhou.aliyuncs.com/cuiw/php:v2-mongodb
停止并删除旧容器
代码语言:javascript复制docker-compose down {容器id}
启动新容器
代码语言:javascript复制docker-compose up -d docker-php-fpm
美中不足,这个替换旧容器的过程不能做到无缝衔接。。。