Введение
Изоляция — одна из ключевых особенностей контейнеров. По умолчанию сеть контейнера отделена от системы узла. Это означает, что веб-сервер внутри контейнера может работать нормально, но оставаться недоступным извне, если вы явно не опубликуете порт.
Сопоставление портов устраняет этот разрыв. Оно перенаправляет трафик с выбранного порта узла на выбранный порт внутри контейнера. Это один из важнейших базовых принципов работы сети контейнеров: он объясняет, как изолированные сервисы становятся доступными.
Без публикации порта сервис может работать внутри контейнера без ошибок, но фактически оставаться доступным только в собственной сетевой области имён контейнера.
В этой лабораторной работе вы выполните следующие действия:
- Запустите контейнер с веб-сервером Nginx.
- Сопоставите порт 8080 узла с портом 80 контейнера.
- Проверите сопоставление и доступ к сервису.
- Удалите созданные ресурсы.
Опубликуйте порт контейнера
На этом шаге вы запустите новый контейнер Docker с использованием образа Nginx.
По умолчанию Nginx — это веб-сервер, который прослушивает порт 80 внутри контейнера. Однако из-за изоляции контейнера порт 80 автоматически недоступен из среды LabEx. Чтобы устранить это ограничение, вы сопоставите порт 8080 на компьютере узла с портом 80 внутри контейнера.
Синтаксис сопоставления портов: -p <host_port>:<container_port>.
Порядок здесь важен. Левая часть — это порт узла, к которому подключаются клиенты, а правая — порт, который приложение фактически прослушивает внутри контейнера.
Выполните следующую команду в терминале:
docker run -d -p 8080:80 --name my-nginx nginx
Разбор команды:
docker run: команда для создания и запуска контейнера.-d: запускает контейнер в режиме detached — в фоновом режиме.-p 8080:80: флаг сопоставления портов.- 8080: порт на компьютере узла в среде LabEx.
- 80: порт внутри контейнера, который прослушивает Nginx.
--name my-nginx: присваивает контейнеру имя «my-nginx».nginx: образ, который будет использоваться.
Если команда выполнена успешно, Docker выведет длинный идентификатор контейнера.
На этом этапе Docker не изменяет сам Nginx. Он создаёт сетевое правило, которое перенаправляет запросы, поступающие на порт узла, на порт сервиса внутри контейнера.
Проверьте конфигурацию порта
Теперь убедитесь, что контейнер запущен, а сопоставление портов настроено правильно. Команда docker ps показывает эту информацию.
Выполните следующую команду:
docker ps
Вы должны увидеть вывод, похожий на этот:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
abc123456789 nginx "/docker-entrypoint.…" 10 seconds ago Up 10 seconds 0.0.0.0:8080->80/tcp my-nginx
Как читать вывод:
Обратите внимание на столбец PORTS: 0.0.0.0:8080->80/tcp.
0.0.0.0:8080: узел прослушивает порт 8080 на всех сетевых интерфейсах.->: показывает направление перенаправления.80/tcp: порт назначения внутри контейнера.
Это подтверждает, что любой трафик, отправленный на порт 8080 вашего компьютера, будет перенаправлен на порт 80 внутри контейнера.
Именно поэтому сопоставление портов часто называют «публикацией» порта контейнера. Вы делаете доступным для узла или внешних клиентов сервис, который в противном случае был бы изолирован.
Чтобы проверить только порты, можно также использовать отдельную команду:
docker port my-nginx
Проверьте работу сервиса
Теперь, когда порт сопоставлен, проверьте доступность веб-сервера. Поскольку вы сопоставили порт узла 8080, получить доступ к серверу Nginx можно, отправив запрос на localhost:8080.
Для этого мы используем curl — инструмент командной строки для отправки веб-запросов.
Выполните следующую команду:
curl localhost:8080
Ожидаемый результат:
Вы должны увидеть исходный HTML-код стандартной приветственной страницы Nginx.
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
...
<h1>Welcome to nginx!</h1>
...
</html>
Если вы видите этот HTML-код, поздравляем! Запрос прошёл от узла (порт 8080) -> в контейнер (порт 80), был обработан Nginx, а затем ответ вернулся обратно.
Этот полный цикл на практике доказывает, что сеть между узлом и контейнером работает, а не только показывает, что процесс контейнера запущен.
Удалите ресурсы
На последнем шаге очистите среду. Остановить и удалить больше не нужные контейнеры — хорошая практика: это освобождает порты и системные ресурсы.
Сначала остановите запущенный контейнер:
docker stop my-nginx
Затем удалите остановленный контейнер:
docker rm my-nginx
Убедитесь, что контейнер удалён:
docker ps -a
Контейнер my-nginx больше не должен отображаться в списке.
Итоги
В этой лабораторной работе вы успешно изучили основы сопоставления портов Docker. Вы:
- Запустили контейнер Nginx в фоновом режиме.
- Сопоставили порт 8080 узла с портом 80 контейнера с помощью флага
-p. - Проверили конфигурацию портов с помощью
docker ps. - Получили доступ к сервису с узла с помощью
curl. - Удалили контейнер.
Понимание сопоставления портов необходимо для развёртывания веб-приложений: оно позволяет внешнему трафику достигать сервисов, работающих внутри изолированных контейнеров.



