0%

Docker 容器互相连接

前言

最近看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
<?php
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做开发环境还是挺舒服的。快速搭建就开始学习写代码了。