Зачем мне использовать ссылки Docker, когда мне все еще нужно жестко закодировать адрес? - PullRequest
0 голосов
/ 13 декабря 2018

Здравствуйте, я не понял следующее:

-В мире docker мы имеем из того, что я понял:

  • Порт, который application предоставляет
  • Порт, который контейнер открывает для приложения
  • Порт, который хост отображает порт контейнера

Итак, учитывая эти факты в конфигурации из 2 контейнеров в docker-expose

Если:

app | Host Port | Container Port | App Port

app1    8300         8200            8200
app2    9300         9200            9200

Если app2 необходимо связаться с app1 напрямую через docker-host, почему я должен использовать ссылки, поскольку мне все еще нужно каким-то образом жестко закодировать вокружение app2 hostname и port app1 (имя_ контейнера app1 и port контейнера app1)? (В нашем примере: port=8200 и host=app1Inst)

 app1:
    image: app1img
    container_name: app1Inst
    ports:
      - 8300:8200    //application code exposes port 8200 - e.g sends to socket on 8200
    networks:
      - ret-net


 app2:
    image: app2img
    container_name: app2Inst
    ports:
      - 9300:9200  
    depends_on:
      - app1
    networks:
      - ret-net
    links:
      - app1

    ///i still need to say here 
    /   environment : -
    /     - host=app1Inst 
   /      - port=8200  --what do i gain using links?

 networks:
ret-net:

Ответы [ 2 ]

0 голосов
/ 13 декабря 2018

Вам не нужно использовать ссылки на современном Docker.Но вам определенно не следует жестко кодировать имена хостов или порты.(См., Например, каждый вопрос SO, в котором отмечается, что вы можете взаимодействовать со службами как localhost при запуске непосредственно в системе разработчика, но для работы в Docker требуется другое имя хоста.).Файл docker-compose.yml - это конфигурация времени развертывания, и он является хорошим местом для установки переменных среды, которые указывают от одного сервиса к другому.

Как вы отметили в предложенном вами файле docker-compose.yml, сети Docker и связанные с нимСервис DNS в основном полностью заменяет ссылки.Сначала ссылки существовали, но уже не так полезны.

Также обратите внимание, что Docker Compose создаст для вас сеть по умолчанию и что имена служебных блоков в файле docker-compose.yml допустимы в качестве имен хостов.Вы можете уменьшить этот файл до:

version: '3'
services:
  app1:
    image: app1img
    ports:
      - '8300:8200'
  app2:
    image: app2img
    ports:
      - '9300:9200'
    env:
      APP1_URL: 'http://app1:8200'
    depends_on:
      - app1
0 голосов
/ 13 декабря 2018

Краткий ответ, нет, вам не нужны ссылки, также его не рекомендуется использовать в докере и не рекомендуется.https://docs.docker.com/network/links/

Сказав, что, поскольку оба ваших контейнера находятся в одной сети ret-net, они смогут свободно обнаруживать и обмениваться данными друг с другом на всех портах, даже без ports setting.

Параметр ports вступает в действие для внешнего доступа к контейнеру, например, с хост-компьютера.

Параметр environment просто устанавливает переменные среды внутри контейнера, поэтомуприложение знает, как найти app1Inst & правильный порт 8200.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...