## Установление связи контейнеров с внешним миром Допустим, вы запустили веб-сервер внутри контейнера. Но как обеспечить связь сервера с внешним миром? Ответ прост – открыть нужные порты для общего доступа с помощью аргументов -p или -P в команде запуска. Такая команда перенаправляет порты хоста в контейнер. Например: ``` docker run -d -p 8000:80 nginx ``` Аргумент -p 8000:80 сообщил механизму Docker о необходимости перенаправления порта 8000 хоста на порт 80 в контейнере. ## Соединение между контейнерами Соединения (links) механизма Docker – простейший способ обеспечения обмена информацией между контейнерами на одном хосте. При использовании принятой по умолчанию сетевой модели Docker обмен данными между контейнерами будет происходить во внутренней сети Docker, то есть все коммуникационные операции останутся невидимыми из сети хоста. Соединения инициализируются с помощью аргумента `--link CONTAINER:ALIAS` в команде `docker run`, где `CONTAINER` – имя контейнера-адресата (link container), а `ALIAS` – локальное имя, используемое внутри управляющего контейнера для обращения к контейнеру-адресату. Кроме того, при использовании соединений Docker внутреннее имя и идентификатор контейнера-адресата будут добавлены в файл /etc/hosts в управляющем контейнере, что позволит обращаться по этому имени к контейнеру-адресату из управляющего контейнера. Далее Docker создает в управляющем контейнере набор переменных среды, предназначенных для упрощения диалога с контейнером-адресатом. Например, при создании контейнера Redis и установления соединения с ним: ``` $ docker run -d --name myredis redis bc2506d6538487f0eb6b9dbf9ee71f2d0eb666be028a5ff0ca26a4a3561b36cb $ docker run --link myredis:redis debian env PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin HOSTNAME=13e3c3ba0a5d REDIS_PORT=tcp://172.17.0.2:6379 REDIS_PORT_6379_TCP=tcp://172.17.0.2:6379 REDIS_PORT_6379_TCP_ADDR=172.17.0.2 REDIS_PORT_6379_TCP_PORT=6379 REDIS_PORT_6379_TCP_PROTO=tcp REDIS_NAME=/suspicious_gagarin/redis REDIS_ENV_GOSU_VERSION=1.14 REDIS_ENV_REDIS_VERSION=7.0.0 REDIS_ENV_REDIS_DOWNLOAD_URL=http://download.redis.io/releases/redis-7.0.0.tar.gz REDIS_ENV_REDIS_DOWNLOAD_SHA=284d8bd1fd85d6a55a05ee4e7c31c31977ad56cbf344ed83790beeb148baa720 HOME=/root ``` Мы можем видеть, что Docker создает переменные среды с префиксом REDIS_PORT, содержащие информацию, необходимую для установления соединения с контейнером Redis. Некоторые значения кажутся избыточными, поскольку нужная информация уже содержится в имени переменной. Тем не менее все переменные и их значения в любом случае полезны, хотя бы как своеобразная форма документации.