当前位置: 首页 > news >正文

docker构建hyperf环境

一,构建hyperf 镜像

官网git https://github.com/hyperf/hyperf-docker

  1. 使用dockerfile构建镜像
    根据需要这里我使用8.1 swoole版本的镜像
    在/home/hyperfdocker 目录中新建一个Dockerfile文件,将这个git上的Dockerfile内容复制粘贴进去
docker build -t hyperf:php8.1 .

因为我的网络没有科学上网,失败了,换另一种方法

  1. 进入docker镜像仓库下载hyperf官方镜像
    https://hub.docker.com/r/hyperf/hyperf

在这里插入图片描述

此处我们直接下载镜像

docker pull hyperf/hyperf:8.1-alpine-v3.11-swoole
docker images

在这里插入图片描述

二,生成容器

docker run -d --name hyperf -v 宿主机代码目录: 容器内代码目录 -p 宿主机端口:容器端口(默认9501) -it --privileged -u root hyperf/hyperf:7.4-alpine-v3.11-swool
docker run -d --name hyperf -v /home/hyperfdocker:/www -p 9701:9501 -it --privileged -u root --entrypoint /bin/sh hyperf/hyperf:8.1-alpine-v3.16-swoole

查看容器
在这里插入图片描述

三,安装hyperf并运行

进入容器

docker exec -it hyperf bash

cd到工作目录

cd /www

修改composer 国内阿里云源 加速下载 (如提示composer命令不存在,需要安装composer,或在宿主机执行)

composer config -g repo.packagist composer https://mirrors.aliyun.com/composer

通过composer下载安装代码

composer create-project hyperf/hyperf-skeleton

注意这里必须安装PHP >= 8.1,否则安装不成功一直报错
composer完成后cd到hyperf-skeleton目录下运行项目

php bin/hyperf.php start

在这里插入图片描述

注意这里有个坑,如果我们composer安装的时候选择安装了mysql,redis等模块,那就须要配置连接信息,否则会一直报错,start启动不起来(mysql不会报错)
假设我们开启了mysql模块,我本机已经启动了一个mysql容器,我们就去修改配置文件,然后连接mysql数据库
容器之间的互联是使用共享网络指定共同的内网ip进行桥接连通,第一步创建共享网络。第二步容器运行时指定好网络就行

  • 查看容器列表
 docker ps -a

在这里插入图片描述

  • 查看容器网络
    在这里插入图片描述
  • 查看docker 镜像/容器的元数据
docker inspect mysql5

在这里插入图片描述
前面其实我已经安装了一个lnmp环境,这里我想就用hyperf容器来联通lnmp环境中的mysql容器

docker inspect lnmp_default

这里我们采用创建自定义网络的方式来连通,通过创建自定义网络,可以为容器提供一个独立的网络环境,使得容器可以相互通信,并与其他网络资源进行交互。自定义网络提供了更灵活和可扩展的容器互联方式,相对于过时的 --link 参数更加推荐和强大
创建自定义网络后,可以将容器连接到该网络,并使用容器名称或服务名称进行容器间通信。这种方式更加标准化,具备更好的扩展性和管理能力。
所以我们只需要将hyperf 容器 加入 mysql5容器网络lnmp_default即可,这里也有两种方法,一种是在 run初始化容器的是使用 --network lnmp_default 声明他的网络,另外一种就是容器已经run好了,那现在直接加入就行了

docker network connect lnmp_default hyperf

然后再使用 docker inspect lnmp_default 查看,发现已经包含进来了
在这里插入图片描述
如要要验证,可以使用两边互相ping通来测试
在这里插入图片描述

  • hyperf配置mysql连接
    修改.env配置文件

注意,
这里面的db_host 是刚刚查看的mysql5 容器的ip
db_port 是容器内部端口不是映射端口

在这里插入图片描述
在项目目录\hyperf-skeleton\config目录下打开routes.php文件,添加路由配置

Router::addGroup('/index/',function (){Router::get('test','App\Controller\IndexController@test');
});

在项目目录\hyperf-skeleton\app\Controller下找到IndexController.php文件,新增一个action,文件内容修改如下

public function test(){$users = Db::select('SELECT * FROM `user`');  //  返回arrayreturn ['users' => $users,];}

在这里插入图片描述

http://www.lryc.cn/news/309113.html

相关文章:

  • WPF常用mvvm开源框架介绍 vue的mvvm设计模式鼻祖
  • HTML <script>元素的10个属性
  • NX二次开发:ListingWindow窗口的应用
  • 设计模式-结构型模式-外观模式
  • C++学习第四天(类与对象下)
  • 【AI Agent系列】【MetaGPT多智能体学习】0. 环境准备 - 升级MetaGPT 0.7.2版本及遇到的坑
  • python自动化管理和zabbix监控网络设备(无线AC控制瘦ap配置部分)
  • XSS中级漏洞(靶场)
  • etcd java 客户端jetcd库踩坑日志
  • <网络安全>《61 微课堂<第1课 南北向流量是什么?>》
  • Day12-【Java SE进阶】JDK8新特性:Lambda表达式、方法引用、常见算法、正则表达式、异常
  • go mod中如何解决 xxx/yyy/lib@v1.1.0: unrecognized import path
  • 比较Python和Rust的内存管理机制
  • Linux系统——Shell脚本——一键安装LNMP
  • 算法复习之二分【备战蓝桥杯】
  • 如何做代币分析:以 SHIB 币为例
  • Springboot+vue的考勤管理系统(有报告)。Javaee项目,springboot vue前后端分离项目。
  • https://htmlunit.sourceforge.io/
  • 回文链表(leetcode)
  • 大语言模型(LLM)技术名词表(一)
  • C++ 快速排序快速选择
  • 雅马哈伺服器TS-S系列说明具体详情内容可参看PDF目录内容
  • SpringBoot底层原理
  • 【golang】25、图片操作
  • kswapd0挖矿病毒攻击记录
  • 如何使用 takeUntil RxJS 操作符来声明性地管理订阅
  • 在Centos中用Docker部署oracle-12c
  • JS进阶——高级技巧
  • TG-ADMIN 权限管理系统
  • 十五届蓝桥杯第三期模拟赛题单(C++、java、Python)