JavaRush /Курсы /Модуль 2: Fullstack /Публикация портов контейнеров

Публикация портов контейнеров

Модуль 2: Fullstack
15 уровень , 3 лекция
Открыта

4.1 Основные концепции публикации портов

Публикация портов контейнеров в Docker позволяет сервисам, работающим внутри контейнеров, быть доступными из внешней сети или с хоста. Это важная часть настройки многоконтейнерных приложений, так как позволяет взаимодействовать с сервисами, такими как веб-серверы, базы данных и другие сетевые приложения. В этой лекции мы рассмотрим, как публиковать порты контейнеров и настраивать доступ к сервисам.

Основные концепции публикации портов

  • Маппинг портов: соответствие порта хоста порту контейнера.
  • Параметр -p/--publish: используется для указания маппинга портов при запуске контейнера.
  • Параметр -P/--publish-all: автоматическое назначение хост-портов для всех экспортируемых портов контейнера.

Пример использования параметра -p

При запуске контейнера вы можете использовать опцию -p для маппинга порта хоста на порт контейнера. Формат команды:

Terminal

docker run -d -p <host_port>:<container_port> <image> 

Пример 1: Публикация порта веб-сервера Nginx

Запустим контейнер с Nginx и опубликуем порт 80 контейнера на порт 8080 хоста.

Теперь Nginx будет доступен по адресу http://localhost:8080.

Terminal

docker run -d -p 8080:80 --name mynginx nginx 

Пример 2: Публикация нескольких портов

Вы можете опубликовать несколько портов, указав несколько опций -p.

В этом примере Nginx будет доступен по HTTP на порту 8080 и по HTTPS на порту 8443.

Terminal

docker run -d -p 8080:80 -p 8443:443 --name mynginx nginx 

Пример использования параметра -P

Параметр -P автоматически публикует все порты, указанные в Dockerfile или в настройках контейнера, на случайные порты хоста.

Пример:

Terminal

docker run -d -P --name mynginx nginx 

Чтобы узнать, какие порты были назначены, используйте команду docker port:

Terminal

docker port mynginx

Вывод будет примерно таким:

Terminal

80/tcp -> 0.0.0.0:32768
443/tcp -> 0.0.0.0:32769

4.2 Публикация портов в Docker Compose

Для назначения портов в Docker Compose используйте директиву ports в файле docker-compose.yml.

Пример файла docker-compose.yml

Yaml

version: '3.8'

services:
  web:
    image: nginx:latest
    ports:
      - "8080:80"
      - "8443:443"

Запустите Docker Compose:

Terminal

docker compose up -d 

Теперь Nginx будет доступен по адресам http://localhost:8080 и https://localhost:8443.

4.3 Дополнительные параметры публикации портов

1. Ограничение IP-адреса

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

Пример:

В этом примере Nginx будет доступен только с локального хоста по адресу http://127.0.0.1:8080.

Terminal

docker run -d -p 127.0.0.1:8080:80 --name mynginx nginx 

2. Использование диапазона портов

Вы можете указать диапазон портов для публикации.

Пример:

Terminal

docker run -d -p 8080-8081:80-81 --name mynginx nginx 

Практические советы:

  • Публикация только необходимых портов: Публикуйте только те порты, которые действительно необходимы для доступа к сервисам, чтобы уменьшить потенциальные уязвимости.
  • Использование брандмауэра: Настройте брандмауэр для ограничения доступа к опубликованным портам только с доверенных IP-адресов.
  • Мониторинг и логирование: Используйте инструменты мониторинга и логирования для отслеживания доступа к опубликованным портам и выявления подозрительной активности.
3
Задача
Модуль 2: Fullstack, 15 уровень, 3 лекция
Недоступна
Публикация одного порта
Публикация одного порта
3
Задача
Модуль 2: Fullstack, 15 уровень, 3 лекция
Недоступна
Публикация нескольких портов
Публикация нескольких портов
3
Задача
Модуль 2: Fullstack, 15 уровень, 3 лекция
Недоступна
Публикация портов с ограничением по IP
Публикация портов с ограничением по IP
3
Задача
Модуль 2: Fullstack, 15 уровень, 3 лекция
Недоступна
Публикация портов в Docker Compose
Публикация портов в Docker Compose
Комментарии (1)
ЧТОБЫ ПОСМОТРЕТЬ ВСЕ КОММЕНТАРИИ ИЛИ ОСТАВИТЬ КОММЕНТАРИЙ,
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ
Slevin Уровень 64
9 октября 2025
"Nginx в официальном образе по умолчанию не настроен на HTTPS (нет сертификатов и конфигурации SSL). Чтобы обеспечить доступ по https://localhost:8443, нужно настроить SSL: создать/подготовить сертификаты (например, самоподписанные) и конфигурацию Nginx с поддержкой 443, и смонтировать их в контейнер (или использовать образ с преднастроенным SSL). Например, добавить тома с nginx.conf и cert.pem/key.pem и перезапустить контейнер." Ваш клоунский валидатор уже просто достал 🤮 приняло только с вот такой строкой:

docker run -d --name nginx_container -p 8080:80 -p 8443:443 nginx:super_obras_s_https
Какой цирк, боже ты мой...