Hyperf项目通过Dockerfile执行build后,成功挂载宿主机目录!(笨方法)
Hyperf 是基于 Swoole 4.4+ 实现的高性能、高灵活性的 PHP 协程框架,内置协程服务器及大量常用的组件,性能较传统基于 PHP-FPM 的框架有质的提升,提供超高性能的同时,也保持着极其灵活的可扩展性,标准组件均基于 PSR 标准 实现,基于强大的依赖注入设计,保证了绝大部分组件或类都是 可替换 与 可复用 的。
由于 Hyperf 是持久化的 CLI 框架,当您修改完您的代码后,通过 CTRL + C 终止当前启动的进程实例,并重新执行 php bin/hyperf.php start 启动命令即可。在云服务器中可以通过Supervisor或PM2来对进程进行守护,也是很便捷的,但是在容器里,确实有点小费劲,我说的是开发期间,当然如果你的代码已经上线,每次build 后执行docker run 也是可以的。
那么在开发期间,代码是需要经常进行更新的,更新时就需要对Hyperf进程进行重启,在容器里当然重启容器就可以了,不过当你在项目通过Dockerfile执行build后,可能需要在执行run时进行目录挂载,至少我在使用期间就遇到了该问题,如图:
上图 hyperf/hyperf:7.2 就是通过 docker build -t hyperf/hyperf:7.2 . 命令构建的镜像
Dockerfile 地址 https://gitee.com/zz85300371/hyperf_dockerfile
安装容器省略... ...
执行完毕后,就会生成上面2个镜像git clone https://gitee.com/zz85300371/dockerfile_hyperf_php7.2_swoole4.4.13
cd dockerfile_hyperf_php7.2_swoole4.4.13
docker build -t hyperf/hyperf:7.2 .
此时需要运行容器
这个方法未挂载目录,但是可以让容器正常运行,此时执行http://IP:9501 应该就可以访问到Hyperf了,不过不能挂载目录,这在开发期间着实不方便,可能你会说你把目录挂载上,放上-v 宿主机目录:容器目录 不就完事了么,当然这里你可以试试。
这里我用了最笨的方法,先把当前容器里的代码复制到宿主机目录
docker cp hyperf7.2:/opt/www/. /www/wwwroot/hyperf
然后删除当前容器
docker rm -f hyperf7.2
届时终于大功告成
你可以直接更新当前宿主机/www/wwwroot/hyperf目录下的代码,然后重启容器即可 docker restart hyperf7.2
如果要监听Hyperf日志运行 docker logs -f hyperf7.2 便可,此时应该给自己点掌声,说实话这个问题今天确实搞了一天,问了官方群里人,也没能及时解决。这里尽快分享出来,希望能够帮到你~~~ ^_^
文章评论(0)