texthtml / docker-links
Docker链接环境变量的解析助手。
v1.5.0
2016-10-18 13:02 UTC
Requires (Dev)
- behat/behat: ~3.0
- symfony/var-dumper: ~2.7
This package is auto-updated.
Last update: 2024-09-24 18:58:48 UTC
README
Docker 具有通过名称链接容器的功能。例如,你在一个 Docker 容器中启动一个 redis-server,并暴露默认的 redis 端口 6379
$ docker run -p 6379 -d -name redis vagrant/redis-server
然后启动另一个容器,运行一个需要访问此 redis 服务器的 php-fpm 网络服务
$ docker run --link redis:db -d php:fpm
Docker 将内部连接这两个容器,并通过环境变量将主机和端口信息传递给 php-fpm 网络服务
DB_NAME=/romantic_lumiere/db
DB_PORT=tcp://172.17.0.5:6379
DB_PORT_6379_TCP=tcp://172.17.0.5:6379
DB_PORT_6379_TCP_ADDR=172.17.0.5
DB_PORT_6379_TCP_PORT=6379
DB_PORT_6379_TCP_PROTO=tcp
这个库提供了一个辅助函数 parseLinks
,可以将这些环境变量解析成易于导航的 PHP 对象。
安装
通过 composer 安装 docker-links
$ composer require texthtml/docker-links
示例用法
考虑一个容器,它访问两个其他容器上的三个外部服务。第一个容器在端口 6379 上暴露 redis,在 6500 上暴露 postgres。第二个容器在端口 6379 上暴露 redis。
DB_NAME=/romantic_lumiere/db
DB_PORT=tcp://172.17.0.5:6379
DB_PORT_6379_TCP=tcp://172.17.0.5:6379
DB_PORT_6379_TCP_ADDR=172.17.0.5
DB_PORT_6379_TCP_PORT=6379
DB_PORT_6379_TCP_PROTO=tcp
DB_PORT_6500_TCP=tcp://172.17.0.5:6500
DB_PORT_6500_TCP_ADDR=172.17.0.5
DB_PORT_6500_TCP_PORT=6500
DB_PORT_6500_TCP_PROTO=tcp
DB_REDIS_NAME=/romantic_lumiere/db_redis
DB_REDIS_PORT=tcp://172.17.0.2:6379
DB_REDIS_PORT_6379_TCP=tcp://172.17.0.2:6379
DB_REDIS_PORT_6379_TCP_ADDR=172.17.0.2
DB_REDIS_PORT_6379_TCP_PORT=6379
DB_REDIS_PORT_6379_TCP_PROTO=tcp
使用 docker-links
进行解析
$links = \TH\Docker\Links::buildFrom($_ENV); // $links can be used as an array echo count($links), PHP_EOL; // 2 foreach ($links as $name => $link) { echo $name, PHP_EOL; // /romantic_lumiere/db, /romantic_lumiere/db } // each link is an instanceof [Link](test) $link = $links['/romantic_lumiere/db']; echo $link->mainPort()->address(), PHP_EOL; // 172.17.0.5 echo $link->mainPort()->protocol(), PHP_EOL; // TCP echo $link->mainPort()->number(), PHP_EOL; // 6379 echo $link->env()['USERNAME'], PHP_EOL; // username echo $link->env('PASSWORD'), PHP_EOL; // password echo $link->env('SOMETHING_ELSE'), PHP_EOL; // NULL echo $link->env('SOMETHING', 'default value'), PHP_EOL; // default value