前言
最近看Hyperf有个Docker安装环境,直接运行了。按照官方的教材运行起来是没有问题,可是光一个服务端没啥用啊,PHP 没有搭配 MySQL 就太没有灵魂了。既然是开发环境,我要怎么才能让已经运行的Hyperf容器连接到新建的MySQL容器呢?
运行 Docker Hyperf
Hyperf 是基于 swoole 的,但是 swoole 在 window 上运行不了,只能借助 Docker 了。
1 | docker run --name myhyperf -v $pwd/skeleten:/hyperf-skeleton -p 9501:9501 -dit --entrypoint /bin/sh hyperf/hyperf:7.4-alpine-v3.9-cli-v4.5.2 |
2 | |
3 | 镜像容器运行后,在容器内安装 Composer |
4 | wget https://github.com/composer/composer/releases/download/1.10.6/composer.phar |
5 | chmod u+x composer.phar |
6 | mv composer.phar /usr/local/bin/composer |
7 | 将 Composer 镜像设置为阿里云镜像,加速国内下载速度 |
8 | composer config -g repo.packagist composer https://mirrors.aliyun.com/composer |
9 | |
10 | 通过 Composer 安装 hyperf/hyperf-skeleton 项目 |
11 | composer create-project hyperf/hyperf-skeleton |
12 | |
13 | 进入安装好的 Hyperf 项目目录 |
14 | cd hyperf-skeleton |
15 | 启动 Hyperf |
16 | php bin/hyperf.php start |
浏览器访问:http://127.0.0.1:9501 OJBK ~
到这里我们要解决的问题才正真开始,我们需要有MySQL去配合Hyperf。我们需要怎么做呢?
开始解决这个问题
创建网络:
1 | docker network create hyperfdb_network |
创建使用这个网络创建MySQL:
1 | docker run --name mydb --net=hyperfdb_network -p 3306:3306 -it -v $pwd/data/mysql:/var/lib/mysql:rw -v $pwd/data/mysql:/var/lib/mysql-logs:rw -v $pwd/config/mysql/conf.d:/etc/mysql/conf.d:ro -e MYSQL_ROOT_PASSWORD=123456 --restart=always -d mysql:8.0.20 |
将已存在的容器连接到mydb相同的网络
1 | hyperfdb_network 是刚才创建的网络名称 |
2 | myhyperf 是hyperf容器的名称 |
3 | docker network connect hyperfdb_network myhyperf |
我们进入我们 myhyperf 容器:
1 | docker exec -it myhyperf sh |
2 | |
3 | ping mydb |
我们发现已经通了。
测试
我们虽然是ping通了网络,但是MySQL使用不知道是否准确。
1 |
|
2 | $dsn = "mysql:dbname=test;host=mydb"; |
3 | $db_user = 'root'; |
4 | $db_pass = '123456'; |
5 | try { |
6 | $pdo = new PDO($dsn, $db_user, $db_pass); |
7 | echo '连接成功' . PHP_EOL; |
8 | } catch (PDOException $e) { |
9 | echo '数据库连接失败' . $e->getMessage(); |
10 | } |
总结
Docker做开发环境还是挺舒服的。快速搭建就开始学习写代码了。