Docker
Подключение контейнеров
Поиск…
параметры
параметр | подробности |
---|---|
tty:true | В файле docker-compose.yml флаг tty: true сохраняет команду sh контейнера, ожидающую ввода. |
замечания
Драйверы сети host
и bridge
могут подключать контейнеры на одном докере-хосте. Чтобы контейнеры могли общаться за пределами одной машины, создайте оверлейную сеть. Шаги по созданию сети зависят от того, как управляются хосты ваших докеров.
- Режим Swarm:
docker network create --driver overlay
- docker / swarm : требует наличия внешнего хранилища ключей
Докерная сеть
Контейнеры в одной докерной сети имеют доступ к открытым портам.
docker network create sample
docker run --net sample --name keys consul agent -server -client=0.0.0.0 -bootstrap
Консоль Dockerfile предоставляет 8500
, 8600
и еще несколько портов. Чтобы продемонстрировать, запустите другой контейнер в той же сети:
docker run --net sample -ti alpine sh
/ # wget -qO- keys:8500/v1/catalog/nodes
Здесь контейнер consul разрешен из keys
, имя которого указано в первой команде. Докер обеспечивает разрешение DNS в этой сети, чтобы найти контейнеры по их --name
.
Docker-Compose
Сети могут быть указаны в файле компоновки (v2). По умолчанию все контейнеры находятся в общей сети.
Начните с этого файла: example/docker-compose.yml
:
version: '2'
services:
keys:
image: consul
command: agent -server -client=0.0.0.0 -bootstrap
test:
image: alpine
tty: true
command: sh
Запуск этого стека с помощью docker-compose up -d
приведет к созданию сети с именем после родительского каталога, в данном случае example_default
. Проверить с помощью docker network ls
> docker network ls
NETWORK ID NAME DRIVER SCOPE
719eafa8690b example_default bridge local
Подключитесь к альпийскому контейнеру, чтобы убедиться, что контейнеры могут разрешать и сообщать:
> docker exec -ti example_test_1 sh
/ # nslookup keys
...
/ # wget -qO- keys:8500/v1/kv/?recurse
...
В составном файле могут быть networks:
раздел верхнего уровня, чтобы указать сетевое имя, драйвер и другие параметры из команды сети докеров .
Контейнерная связь
Аргумент docker --link
и link:
разделы docker-compose делают псевдонимы для других контейнеров.
docker network create sample
docker run -d --net sample --name redis redis
При ссылке либо исходное имя, либо сопоставление разрешит контейнер redis.
> docker run --net sample --link redis:cache -ti python:alpine sh -c "pip install redis && python"
>>> import redis
>>> r = redis.StrictRedis(host='cache')
>>> r.set('key', 'value')
True
До 1.10.0
контейнера докеры 1.10.0
также устанавливаются сетевые подключения - поведение теперь обеспечивается сетью докеров. Ссылки в более поздних версиях обеспечивают только legacy
сети моста по умолчанию.