Сеть Docker Multi-Host позволяет создавать виртуальные сети и присоединять к ним контейнеры, чтобы вы могли создать топологию сети, подходящую для вашего приложения. Мостовые сети могут быть созданы для одного хоста, а оверлейные сети могут быть созданы для нескольких хостов. Создание сетей для конкретных приложений обеспечивает полную изоляцию контейнеров.
Файл Docker Compose может быть нацелен на один хост и --x-networking
будет создавать мостовую сеть, эксклюзивную для приложения. Если пример приложения предназначен для нескольких хостов, скажем, с использованием кластера Docker Swarm, то создается оверлейная сеть. Сеть с одним хостом и сеть с несколькими хостами предоставляют более подробную информацию о том, как это настроить.
Что если мост или оверлейная сеть уже существует, и вы хотите назначить это приложению, запущенному с помощью Docker Compose?
В Docker 1.9 введена подстановка переменных, и мы можем использовать эту функцию для нацеливания приложения на предварительно созданную сеть.
Создать новую сеть Docker Bridge
- Создайте новую сеть:
docker network create -d bridge mynet 47d6225ffe56ddd1a8bc0d6abb0ffd8f8ac3eec2090ff243f8cd6f77c170751b=
- Список сетей:
docker network ls NETWORK ID NAME DRIVER feb6e9567439 bridge bridge 29563a59abe8 none null 25ab737cd665 host host 47d6225ffe56 mynet bridge
Docker создает три сети для каждого хоста автоматически: НАЗВАНИЕ СЕТИ НАЗНАЧЕНИЕ
bridge
Сеть по умолчанию, к которой подключаются контейнеры. Этоdocker0
сеть во всех установках Docker.none
Сетевой стек дляhost
конкретного контейнера Добавляет контейнер в сетевой стек хостов. Конфигурация сети идентична хосту. Кроме того, вы также видитеmynet
сеть, которая была только что создана. - Проверьте вновь созданную сеть, используя
docker network inspect mynet
:[ { "Name": "mynet", "Id": "47d6225ffe56ddd1a8bc0d6abb0ffd8f8ac3eec2090ff243f8cd6f77c170751b", "Scope": "local", "Driver": "bridge", "IPAM": { "Driver": "default", "Config": [ {} ] }, "Containers": {}, "Options": {} } ]
Контейнеры пока не назначены.
Docker Составьте и сеть
- Эта новая сеть может быть использована для любого нового контейнера с помощью
docker run --net=<NETWORK>
команды. Этот блог покажет, как нацелить эту сеть на файл Compose:mycouchbase: container_name: "db" image: couchbase/server ports: - 8091:8091 - 8092:8092 - 8093:8093 - 11210:11210 net: ${NETWORK} mywildfly: image: arungupta/wildfly-admin environment: - COUCHBASE_URI=db ports: - 8080:8080 - 9990:9990 net: ${NETWORK}
Обратите внимание, как
net
указано здесь, чтобы использовать пользовательскую сеть. Этот файл Compose находится по адресу: github.com/arun-gupta/docker-images/blob/master/wildfly-couchbase-javaee7-network/docker-compose.yml . - Запустите приложение, используя нашу недавно созданную сеть, как:
NETWORK=mynet docker-compose up -d
- Проверьте сеть еще раз:
docker network inspect mynet [ { "Name": "mynet", "Id": "47d6225ffe56ddd1a8bc0d6abb0ffd8f8ac3eec2090ff243f8cd6f77c170751b", "Scope": "local", "Driver": "bridge", "IPAM": { "Driver": "default", "Config": [ {} ] }, "Containers": { "300bebe6c3e0350ebf9b9d3746eb3a7b49444e14c00314770627a9f101442639": { "EndpointID": "82a3e2d7cd4f1bb03c9ef52bb6abf284942d7e9fcac89fe3700b0e0c4ed2654f", "MacAddress": "02:42:ac:14:00:03", "IPv4Address": "172.20.0.3/16", "IPv6Address": "" }, "4fdae4eb919f0934422513227fe541255557dd9e8b3317374685927e7f427249": { "EndpointID": "937605d716d144b55288d70817d611da5fb0f87e3aedd6b5074fca07f82c3953", "MacAddress": "02:42:ac:14:00:02", "IPv4Address": "172.20.0.2/16", "IPv6Address": "" } }, "Options": {} } ]
И теперь два контейнера назначены и этой сети.
- Проверьте идентификатор контейнера, используя
docker ps
:CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 300bebe6c3e0 couchbase/server "/entrypoint.sh couch" 2 minutes ago Up 2 minutes 0.0.0.0:8091-8093->8091-8093/tcp, 11207/tcp, 11211/tcp, 0.0.0.0:11210->11210/tcp, 18091-18092/tcp db 4fdae4eb919f arungupta/wildfly-admin "/opt/jboss/wildfly/b" 2 minutes ago Up 2 minutes 0.0.0.0:8080->8080/tcp, 0.0.0.0:9990->9990/tcp wildflycouchbasejavaee7network_mywildfly_1
- Проверьте сеть на наличие одного контейнера:
docker inspect -f '{{ .HostConfig.NetworkMode }}' 300 mynet
- Подробнее о сети:
docker inspect -f '{{ .NetworkSettings.Networks.mynet }}' 300 {82a3e2d7cd4f1bb03c9ef52bb6abf284942d7e9fcac89fe3700b0e0c4ed2654f 172.20.0.1 172.20.0.3 16 0 02:42:ac:14:00:03}
- Более подробную информацию о контейнере можно найти с помощью
docker inspect
соответствующей части:"Networks": { "mynet": { "EndpointID": "82a3e2d7cd4f1bb03c9ef52bb6abf284942d7e9fcac89fe3700b0e0c4ed2654f", "Gateway": "172.20.0.1", "IPAddress": "172.20.0.3", "IPPrefixLen": 16, "IPv6Gateway": "", "GlobalIPv6Address": "", "GlobalIPv6PrefixLen": 0, "MacAddress": "02:42:ac:14:00:03" } }
Создать новую сеть наложения Docker
Создание новой оверлейной сети Docker требует настройки службы ключ / значение и кластера Docker Swarm. Блог с несколькими хостами и несколькими контейнерами предоставляет более подробную информацию об этом.