不得不说php 对云原生有点不够友好,之前用java .net打包docker镜像 一下就ok了,php倒腾了好久才算部署成功。

场景:使用阿里云ack(k8s) 部署采用thinkPHP框架的php项目,并执行php think worker:server -d 开启websocket 服务 ,可以使用一个docker 镜像就能部署好。

php 主要使用webdevops/php-nginx:7.4镜像 部署,这个镜像自带nginx和php环境

dokerfile 放在php项目根目录下,dokerfile 文件内容

FROM webdevops/php-nginx:7.4
EXPOSE 2346 ADD ./containerConfig/install-php-extensions /usr/local/bin/
RUN chmod +x /usr/local/bin/install-php-extensions && sync && \
install-php-extensions bz2 bcmath \
calendar \
dba \
exif \
gettext gd \
imagick \
mysqli mcrypt \
opcache \
pcntl pdo_mysql \
redis \
shmop sysvmsg sysvsem sysvshm sockets soap \
xdebug \
zip COPY . /app
RUN /bin/bash -c 'cp /app/containerConfig/vhost.conf /opt/docker/etc/nginx/vhost.conf'
RUN /bin/bash -c 'cp /app/containerConfig/10-init.sh /opt/docker/bin/service.d/supervisor.d//10-init.sh'
 
命令注解
1.  ADD  ./containerConfig/install-php-extensions /usr/local/bin/   是把根目录下的containerConfig(自己添加的文件夹放一些容器配置文件) 文件夹下的install-php-extensions(从 https://github.com/mlocati/docker-php-extension-installer/releases/latest/download/install-php-extensions 下载到本地的) 文件添加到容器中的/usr/local/bin/ 目录下
 
2. 以下的命令是添加php用到的扩展
RUN chmod +x /usr/local/bin/install-php-extensions && sync && \
install-php-extensions bz2 bcmath \
calendar \
dba \
exif \
gettext gd \
imagick \
mysqli mcrypt \
opcache \
pcntl pdo_mysql \
redis \
shmop sysvmsg sysvsem sysvshm sockets soap \
xdebug \
zip

3.COPY . /app  把php项目拷贝到容器的/app 文件夹下

4. RUN /bin/bash -c 'cp /app/containerConfig/vhost.conf /opt/docker/etc/nginx/vhost.conf'   运行容器时将容器内的/app/containerConfig/vhost.conf 覆盖到容器中/opt/docker/etc/nginx/vhost.conf 文件,这个vhost.conf主要是容器内的nginx 配置,后面会放vhost.conf的内容

5. RUN /bin/bash -c 'cp /app/containerConfig/10-init.sh /opt/docker/bin/service.d/supervisor.d//10-init.sh'   运行容器时将容器内的/app/containerConfig/10-init.sh  覆盖到容器中/opt/docker/bin/service.d/supervisor.d//10-init.sh 文件,这一步主要时配置容器启动后要执行的命令,单独启动websocket 服务时 需要用到的,启动websocket这个地方被坑了好久才找到解决方法。

打包镜像并启动容器

运行 docker build  -t  phpDemo:v1 .   命令打包成镜像,运行 docker run -p 8086:80  -p 2346:2346  --name phpDemo   -d phpDemo:v1  命令启动容器 ,2346 端口即为websocket 对外暴露的端口

containerConfig 文件夹内容

containerConfig文件夹下包含 10-init.sh,install-php-extensions,vhost.conf 3个文件。

-----10-init.sh 文件内容: 主要作用是等容器启动成功后,执行一些自定义命令

# placeholder
cd /app && php think worker:server -d

-----install-php-extensions 文件可以从 https://github.com/mlocati/docker-php-extension-installer/releases/latest/download/install-php-extensions 处下载到本地保存到 containerConfig 文件夹下

-----vhost.conf  主要用来配置nginx, 可以自行配置,一下是我的配置   fastcgi_pass php  这个地方是写死的不能更改

server {
listen 80 default_server;
server_name _ *.vm docker;
root "/app/public";
index index.php index.html;
location / {
if (!-e $request_filename){
rewrite ^(.*)$ /index.php?s=/$1 last;
}
} add_header Access-Control-Allow-Origin *;
add_header Access-Control-Allow-Methods 'GET,POST,OPTIONS,PUT,DELETE,HEAD';
add_header Access-Control-Allow-Headers 'DNT,X-Mx-ReqToken,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Authorization';
location ~ \.php(.*)$ {
fastcgi_pass php;
fastcgi_index index.php;
fastcgi_split_path_info ^((?U).+\.php)(/?.+)$;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_param PATH_TRANSLATED $document_root$fastcgi_path_info;
include fastcgi_params;
}
}

  

k8s docker 中部署think php 并搭建php websocket的更多相关文章

  1. 在docker中部署centos7镜像

    本篇文章参考自: https://www.cnblogs.com/linjj/p/5606911.html https://blog.csdn.net/u012767761/article/detai ...

  2. docker 中部署一个springBoot项目

    docker 中部署一个springBoot项目 (1)介绍 springBoot项目 1.项目结构 2.pom.xml <?xml version="1.0" encodi ...

  3. 如果在docker中部署tomcat,并且部署java应用程序

    1.先说如何在docker中部署tomcat 第一步:root用户登录在系统根目录下创建文件夹tomcat7,命令如:mkdir tomcat7,并且切换到该目录下:cd tomcat7: 第二步:创 ...

  4. ​在Docker中部署GreatSQL并构建MGR集群

    GreatSQL社区原创内容未经授权不得随意使用,转载请联系小编并注明来源. 为了方面社区用户体验GreatSQL,我们同时还提供Docker镜像,本文详细介绍如何在Docker中部署GreatSQL ...

  5. ubuntu18 docker中部署ELK

    ELK是ElasticSearch.Logstash.Kibana的简称,一般用于日志系统,从日志收集,日志转储,日志展示等入手,用以提供简洁高效的日志处理机制. 鉴于没有额外的机器,这里就用dock ...

  6. 记一次Docker中部署Asp.Net Core 3.0的踩坑过程

    最近公司打算重构目前直销报单系统到微信小程序中,目前的系统只能在PC上面使用,这两年也搞过App端,但是由于人员流动和公司架构调整最后都不了了之,只留下一堆写了一半的接口.以前的接口依然是使用Asp. ...

  7. docker中部署django项目~~Dockfile方式和compose方式

    1.  背景:   本机win10上,后端django框架代码与前端vue框架代码联调通过. 2.  目的:   在centos7系统服务器上使用docker容器部署该项目. 3.  方案一:仅使用基 ...

  8. docker安装部署、fastDFS文件服务器搭建与springboot项目接口

    一.docker安装部署 1.更新yum包:sudo yum update 2.安装需要的软件包,yum-util 提供yum-config-manager功能,另外两个是devicemapper驱动 ...

  9. Docker中部署Kubernetes

    Kubernetes为Google开源的容器管理框架,提供了Docker容器的夸主机.集群管理.容器部署.高可用.弹性伸缩等一系列功能:Kubernetes的设计目标包括使容器集群任意时刻都处于用户期 ...

随机推荐

  1. web前端教程《每日一题》(1-99)完结

    第1期(2016年4月6日): (1)js中关闭当前窗口的方法是:window.close(); 第2期(2016年4月7日): (1)js中使字符串中的字符变为小写的方法是:toLowerCase方 ...

  2. 微信小程序从注册到上线系列

    为了帮助同学们了解注册及上线的整个流程,所以在开发之外,我专门制作了这个从注册到上线流程:本专辑不涉及任何跟开发有关的事情,开发专辑请看:实战开发宝典 以下为具体内容: 从注册到上线系列<一&g ...

  3. Redis分布式实现原理

    一.使用 1.pom.xml导入依赖 <dependency> <groupId>org.springframework.boot</groupId> <ar ...

  4. LeetCode 剑指 Offer 22. 链表中倒数第k个节点

    剑指 Offer 22. 链表中倒数第k个节点 题意 输入一个链表,输出该链表中倒数第k个节点.为了符合大多数人的习惯,本题从1开始计数,即链表的尾节点是倒数第1个节点. ​ 例如,一个链表有 6 个 ...

  5. OllyDbg---call和ret指令

    call和ret call指令 cal指令是转移到指定的子程序处,后面紧跟的操作数就是给定的地址. 例如,call 401362表示转移到地址401362处,调用401362处的子程序,当子程序调用完 ...

  6. SSM实现个人博客-day01

    1.需求分析 项目源码免费下载:SSM实现个人博客 有问题请询问vx:kht808

  7. k8s pod 在迁移zookeeper时出现的问题

    一次迁移中出现的问题,因为要搬迁机房,集群中的节点服务器分布在两个机房,通过专线打通了,现在需要整体都迁移到其中一个机房,所以pod要进行迁移,机器资源也比较紧张,在迁移中zookeeper迁移出现问 ...

  8. Java学习day17

    继续学习了IO流的一些常用类以及GUI基础 做了自己的第一个Frame窗口 在做第一个Frame窗口时程序报错:java: 无法从静态上下文中引用非静态 变量 this 查看后发现不小心把MyFram ...

  9. Prometheus TSDB存储原理

    Prometheus 包含一个存储在本地磁盘的时间序列数据库,同时也支持与远程存储系统集成,比如grafana cloud 提供的免费云存储API,只需将remote_write接口信息填写在Prom ...

  10. python基础练习题(题目 阶乘求和)

    day17 --------------------------------------------------------------- 实例025: 阶乘求和 题目 求1+2!+3!+-+20!的 ...