Docker, лекция 8. Создание сетей между контейнерами с использованием Links

Docker, лекция 8. Создание сетей между контейнерами с использованием Links

В этой лекции рассматривается, как разрешить нескольким контейнерам взаимодействовать друг с другом: как подключить хранилище данных (в данном случае Redis) к приложению, запущенному в отдельном контейнере.

Запустим reddis

Наиболее распространенным сценарием подключения к контейнерам является приложение, подключающееся к хранилищу данных. Ключевым аспектом при создании link является имя контейнера.

Настроим:

docker run -d --name redis-server redis

Создадим Link

Для подключения к исходному контейнеру используется команда —link <container-name|id>:<alias> при запуске нового контейнера. container-name|id относится к исходному контейнеру, который определен ранее (redis), а alias определяет понятное имя хоста.

Устанавливая alias, мы разделяем, как наше приложение настроено на инфраструктуру. Это означает, что конфигурацию приложения не нужно менять, поскольку она подключена к другим средам.

Рассмотрим на примере. Вызывем контейнер Alpine, который связан с redis-сервером. Определим псевдоним как Redis. Когда link будет создан, Docker сделает две вещи.

Во-первых, Docker установит некоторые переменные окружения на основе ссылки на контейнер. Эти переменные среды дают возможность ссылаться на порты и IP-адреса, через известные имена.

Можно вывести все переменные окружения, добавив команду env. Например, создадим link и выведем env:

docker run --link redis-server:redis alpine env

Во-вторых, Docker обновит файл HOSTS контейнера с записью для исходного контейнера с тремя именами: оригинал, alias и hash-id . Можно вывести запись host контейнеров, используя cat /etc/hosts

docker run --link redis-server:redis alpine cat /etc/hosts

Пример вывода:

172.18.0.2 redis a2f3ba2b1d3c redis-server
172.18.0.3 43106ddc9e26

После создания link, можно пропинговать исходный контейнер так же, как если бы это был сервер, работающий в сети.

docker run --link redis-server:redis alpine ping -c 1 redis

Подключение приложения

Создав link, приложения могут подключаться и взаимодействовать с исходным контейнером обычным способом, независимо от того, что обе службы работают в контейнерах.

ВАЖНО! Это перевод с сайта интерактивных уроков katacoda.com, все контейнеры с приложениями есть только там

Используем простое приложение на node.js, которое будет подключаться к redis:

docker run -d -p 3000:3000 --link redis-server:redis katacoda/redis-node-docker-example

В итоге получим работающее приложение, которое можно проверить http запросом:

curl docker:3000

Пример с redis cli

Таким же образом можно подключать контейнеры к приложениям и к своим собственным инструментам CLI.

Эта команда запустит инстанс redis-cli и подключится к серверу по alias:

docker run -it --link redis-server:redis redis redis-cli -h redis

Для проверки работы можно вывести все данные из redis командой:

KEYS *

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *