Публикация сетевых сервисов в Docker

Средний уровень Docker

Mike Metzger

Data Engineering Consultant

Сетевые сервисы

  • Сетевые сервисы слушают определённый порт
  • На одной комбинации IP:порт может слушать только одна программа
    • Например, 10.1.2.3:80 — это прослушивание порта 80 на адресе 10.1.2.3.
  • Представьте отладку разных версий веб-сервера, работающего на порту 80
    • Одновременно можно запустить только одну копию, так как порт занят
Средний уровень Docker

Контейнеризованные сервисы

  • Упаковка приложения в контейнер позволяет каждому контейнеру слушать один и тот же порт (комбинации IP:порт различаются, у каждого контейнера свой IP)
  • Можно запускать несколько копий контейнеров одновременно
  • Но как подключиться к приложению внутри контейнера с хост-машины?
Средний уровень Docker

Проброс портов

  • Решение — использование проброса портов (port mapping / port forwarding)
  • Проброс портов перенаправляет соединение с одной комбинации IP:порт на другую
  • В нашем случае можно задействовать свободный порт хоста и направить его на порт 80 контейнера
  • Docker engine справится с этим автоматически, если его настроить

Пример проброса портов

Средний уровень Docker

Настройка проброса портов

  • Для включения проброса портов при запуске контейнера используйте команду docker run с флагом -p
  • -p <порт хоста>:<порт контейнера>
  • -p 5501:80
  • Можно указать несколько флагов -p для разных портов
repl@host:~$ docker run -p 5501:80 nginx

repl@host:~$ docker ps -a
CONTAINER ID IMAGE ... PORTS NAMES 84266724ff47 nginx ... 0.0.0.0:5501->80/tcp, :::5501->80/tcp coiled_elgamal
Средний уровень Docker

Давайте потренируемся!

Средний уровень Docker

Preparing Video For Download...