php和nginx镜像合并 && 代码打包到镜像 —— k8s从入门到高并发系列教程 (二)
以php-fpm作为基础镜像,安装nginx后,打包配置文件和源代码形成新的镜像,并测试运行。
·
上文使用了nginx和php-fpm两个镜像组装了nginx+php环境,然而实际企业的微服务架构,nginx和php-fpm是被统一看作一个微服务供其他服务调用的;另外,配置文件和源代码也不会通过映射到容器中的方式进行,而是打包到了企业的私有镜像仓库中,最后直接把镜像部署到集群。
本教程以php-fpm作为基础镜像,安装nginx后,打包配置文件和源代码形成新的镜像,并测试运行。
准备阶段
由于php:7.2-fpm镜像使用debian作为基础操作系统,需要先替换一下debian仓库源为国内源,便于安装nginx等其他软件
deb http://mirrors.163.com/debian/ buster main non-free contrib
deb http://mirrors.163.com/debian/ buster-updates main non-free contrib
deb http://mirrors.163.com/debian/ buster-backports main non-free contrib
deb-src http://mirrors.163.com/debian/ buster main non-free contrib
deb-src http://mirrors.163.com/debian/ buster-updates main non-free contrib
deb-src http://mirrors.163.com/debian/ buster-backports main non-free contrib
deb http://mirrors.163.com/debian-security/ buster/updates main non-free contrib
deb-src http://mirrors.163.com/debian-security/ buster/updates main non-free contrib
创建sources.list文件替换镜像内的 /etc/apt/sources.list 文件
由于docker容器运行后,有且必须只有一个进程在前台运行,当这个前台运行的程序暂停运行,容器也就会被销毁。我们规划容器运行后,让php-fpm进程后台运行,nginx进程前台运行。这样的好处是便于在开发环境,研发可以进入容器直接修改代码,重启php-fpm而容器不被销毁。
#!/bin/sh
php-fpm -D
nginx -g 'daemon off;'
创建entry.sh文件,在容器启动的时候运行,给予该文件可执行权限
chmod +x entry.sh
编写Dockerfile文件
FROM php:7.2-fpm
# 设置时区使用北京时间
ENV TZ=Asia/Shanghai
# 替换debian国内源,便于快速安装nginx
COPY sources.list /etc/apt/sources.list
# 安装nginx,删除配置文件中的 /etc/nginx/sites-enabled 目录
RUN apt update \
&& apt install -y nginx \
&& rm -rf /etc/nginx/sites-enabled
# 拷贝nginx配置文件
ADD conf /etc/nginx/conf.d
# 设置工作目录
WORKDIR /src
# 拷贝项目源文件,打包镜像
ADD www ./
# 注意点:文件权限必须是 www-data 组,nginx和php-fpm才有权限访问
RUN chown -R www-data:www-data ./
# 执行容器启动后的命令
ADD entry.sh /
ENTRYPOINT ["/entry.sh"]
注意点:
*****文件权限必须是 www-data 组,nginx和php-fpm才有权限访问*****
打包运行镜像
docker build -t php-fpm:test .
docker run -p 8083:80 -d php-fpm:test
相关链接
常用开发工具:php_codesniffer代码规范检查&修复、phpstan语法检查、phpunit单元测试
.gitlab-ci.yaml自动镜像打包&&互联网企业规范化上线流程(上)
更多推荐
已为社区贡献17条内容
所有评论(0)