При использовании Docker мы создаем и запускаем контейнеры, которые являются изолированными средами выполнения приложений. Контейнеры разделяют ядро операционной системы с хостовой системой, но имеют собственную оболочку, библиотеки и файловую систему.
По умолчанию Docker использует сеть типа bridge для обеспечения сетевого взаимодействия между контейнерами и хостом. Каждому контейнеру присваивается собственный IP-адрес в этой сети, и Docker маршрутизирует сетевые запросы между контейнерами и хостовой системой.
Однако, по умолчанию Docker не настраивает проброс портов с контейнеров на хостовую систему. Это значит, что из-за режима изоляции, команды, запущенные внутри контейнера, по умолчанию недоступны хостовому серверу.
Чтобы сделать команды внутри контейнера доступными хостовому серверу, мы можем пробросить порт контейнера на хостовую систему. Это можно сделать с помощью флага -p
(или --publish
) при запуске контейнера. Например, команда docker run -p 80:8080 <image_name>
пробросит порт 8080 из контейнера на порт 80 хостовой системы. После этого, при обращении к порту 80 хостовой системы, мы будем получать результат работы контейнера.
Кроме того, Docker позволяет создавать сетевые соединения между контейнерами с помощью сетей типа overlay или bridge. С помощью команды docker network create
можно создать собственную локальную сеть и присоединить к ней несколько контейнеров. Таким образом, контейнеры смогут взаимодействовать друг с другом без проброса портов и доступа хосту.
Но необходимо помнить, что без настройки явного проброса портов или создания сетевых соединений, контейнеры по умолчанию изолированы от хостовой системы. Это обеспечивает безопасность и предотвращает нежелательный доступ к контейнерам и их ресурсам с хостовой системы.