Docker link


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



Docker link с примером


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


В качестве базы — MongoDB (ссылка на dockerhub).

docker run --name py-app -p 8000:8000 -d -e MONGO_HOST=appdb --link appdb dockerhub/py-app


Приложение запустится по порту 8000 в хост системе, в контейнере приложение также займет порт 8000.

За счет параметра link при запуске станет возможно использование имени контейнера с базой данных как хоста внутри контейнера с приложением. Это имя можно указывать в конфигурационном файле приложения, в котором задаётся подключение к базе данных. В данном случае — к базе данных MongoDB.


Предполагается, что контейнер с MongoDB уже запущен ранее.



Пример подключения к базе в другом контейнере на скриншоте:

docker link


Выделено имя appdb, оно и является хостом для подключения. Фактически запросы за счёт docker link направляются другому контейнеру, который определен по имени.

В случае если бза размещается локально на сервере без Docker — вместо имени был бы, как правило, ip адрес сервера с MongoDB и порт для подключения.

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



Один контейнер таким образом ссылается на другой с может использовать для обращения выбранное имя.



Имена образов Docker при сборке


В примере условное приложение py-app. Если приложение размещается локально dockerhub/py-app указывать не нужно и достаточно имени (образ должен быть в выводе docker images на хосте).


Здесь видно, что образ уже скачался и доступен локально. В таком случае достаточно указания имени образа.

docker images link


Если образ — на dockerhub, то требуется подставить полный путь к нему.



MONGO_HOST в команде, которой мы запустили контейнер — переменная окружения. Ей задается имя контейнера с базой, которое используется приложением для обращения к Mongo.



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


Читайте про Docker compose. Он позволяет одной командой запускать стек из множества контейнеров.

Сказать спасибо