texthtml/docker-links

Docker链接环境变量的解析助手。

v1.5.0 2016-10-18 13:02 UTC

This package is auto-updated.

Last update: 2024-09-24 18:58:48 UTC


README

Build Status Code Status Latest Version License

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