Hyperf项目通过Dockerfile执行build后,成功挂载宿主机目录!(笨方法)

2019年12月20日 1,405 次阅读 0 条评论 2 人点赞

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

安装容器省略... ...

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 .
执行完毕后,就会生成上面2个镜像

此时需要运行容器

启动方法1:docker run -p 9501:9501 --name hyperf7.2 --rm -d hyperf/hyperf:7.2

这个方法未挂载目录,但是可以让容器正常运行,此时执行http://IP:9501 应该就可以访问到Hyperf了,不过不能挂载目录,这在开发期间着实不方便,可能你会说你把目录挂载上,放上-v 宿主机目录:容器目录 不就完事了么,当然这里你可以试试。

这里我用了最笨的方法,先把当前容器里的代码复制到宿主机目录

复制容器代码:

docker cp hyperf7.2:/opt/www/. /www/wwwroot/hyperf

然后删除当前容器

docker rm -f hyperf7.2

然后在执行docker run 同时放上-v 进行挂载
docker run -v /www/wwwroot/hyperf:/opt/www -p 9501:9501 -it --name hyperf7.2 --rm -d hyperf/hyperf:7.2

届时终于大功告成

你可以直接更新当前宿主机/www/wwwroot/hyperf目录下的代码,然后重启容器即可 docker restart hyperf7.2

如果要监听Hyperf日志运行 docker logs -f hyperf7.2 便可,此时应该给自己点掌声,说实话这个问题今天确实搞了一天,问了官方群里人,也没能及时解决。这里尽快分享出来,希望能够帮到你~~~ ^_^

讲梦想、讲奋斗可以,前提是钱要给够。

文章评论(0

接收回复邮件通知
非注册会员初次评论需要审核,审核时间(09:00-18:00),请耐心等待...