欢迎光临
我们一直在努力

Docker: 7 部署PHP+Vue项目

本文将介绍如何使用docker镜像 快速部署 php+vue 项目.文末提供源码地址

本地创建Docker映射目录











—— vue_demo         # Demo项目
—— php_vue
—— docker-compose.yaml
—— nginx
———— apps           # 项目代码
———— conf           # nginx配置文件
—————— nginx.conf
———— log            # nginx
———— vhost          # 虚拟机配置目录
—————— default.conf
复制代码

创建docker-compose.yaml

version:"3"#docker-compose的版本
services:#容器的集合
      mysql:#项目名称
              image:mysql:5.7#镜像名称,如果是通过dockerfile创建的可以使用build属性
              container_name:mysql#容器名称,如果没有这个属性的话,docker-compose会随机分配一个名字给容器
              privileged:true#允许操作的表示,如果不加的话会出现类似,permission deny的错误
              ports:
                      -3307:3306#开放宿主机和容器的映射端口
              environment:
                      MYSQL_ROOT_PASSWORD:root#mysql镜像中的环境变量
      php:
              image:php:7.2-fpm
              container_name:php
              privileged:true
              ports:
                    -9001:9000
              links:
                     -mysql#容器之间进行关联
              volumes:
                     -./nginx/apps:/usr/share/nginx/html#挂载卷,需要注意的是,php在以模块的形式加载到nginx的时候,需要他们两个的目录结构一致,否则nginx无法加载php,但是 html等静态问价可以正常访问。
      nginx:
               image:nginx
               container_name:nginx
               privileged:true
               links:
                       -php
               ports:
                       -8088:80
               volumes:
                       -./nginx/vhost:/www/nginx/vhost
                       -./nginx/conf/nginx.conf:/etc/nginx/nginx.conf
                       -./nginx/log:/www/nginx/log
                       -./nginx/apps:/usr/share/nginx/html

      phpmyadmin:
              image:phpmyadmin/phpmyadmin
              container_name:phpmyadmin
              privileged:true
              links:
                      -mysql
              ports:
                      -7001:80
              environment:
                      MYSQL_ROOT_PASSWORD:root
                      PMA_HOST:mysql

      redis:
              image:redis:4.0.14
              container_name:redis
              privileged:true
              ports:
                      -6379:6379
      mongo:
              image:mongo
              restart:always
              ports:
                      -27017:27017
复制代码

建立容器,执行命令 docker-compose up -d

创建前端项目

使用vue create vue_demovue ui创建项目vue_demo

打包项目cd vue_demo && npm run build,复制 dist文件夹到 php_vue/nginx/apps

测试 curl localhost:9099 返回html代码

创建php文件

<?php
echo'hello Docker'
;
复制代码

测试 curl localhost:8088 返回 hello Docker

过程中的疑难杂症

image拉取速度过慢

解决方法 – 修改仓库源 创建、修改 /etc/docker/daemon.json 文件,修改为如下形式











vi /etc/docker/daemon.json          # 编辑daemon.json 

{
    "registry-mirrors": ["http://hub-mirror.c.163.com"] 



}

systemctl restart docker            # 重启docker服务复制代码

国内加速地址有:

docker-compose 拉取镜像,成功之后就不会重复拉取。
所以导出现某个镜像速度慢、卡死。 Ctrl + c终止换源,重启docker再执行命令 docker-compose up -d

docker 创建 iptables链 报错

… iptables –wait -t nat -I DOCKER -i br-d38d92300109 -j RETURN:iptables: No chain/target/match by that name.

docker 服务启动的时候,docker服务会向iptables注册一个链,以便让docker服务管理的containner所暴露的端口之间进行通信 通过命令 iptables -L 可以查看iptables链

在开发环境中,如果你删除了iptables中的docker链,或者iptables的规则被丢失了(例如重启firewalld),docker就会报iptables error例如:failed programming external connectivity … iptables: No chain/target/match by that name 要解决这个问题,只要 重启docker服务,之后,正确的iptables规则就会被创建出来

项目源码

github.com/ruidao/demo…

不足 & 后续跟进

  • 上述部署还是不够快,正确打开方式应该是创建自己centos项目镜像
  • 项目代码迭代还可以更自动一点

作者:锐玩道
链接:https://juejin.im/post/5da362706fb9a04e4047971d
来源:掘金
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

赞(0)
未经允许不得转载:798VPS » Docker: 7 部署PHP+Vue项目
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址