Типы сетей, изоляция, коммуникация между контейнерами
Сеть — фундаментальный аспект контейнеризации. Это исчерпывающее руководство охватывает архитектуру, типы сетей, изоляцию, коммуникацию между контейнерами, безопасность и продвинутые сценарии использования в продакшене.
Docker использует виртуализированную сеть на основе Linux-контейнеров (LXC). При создании контейнера Docker:
eth0
| Компонент | Описание |
|---|---|
| veth pair | Виртуальный сетевой кабель. Пакет, отправленный в один конец, появляется на другом |
| docker0 | Мост по умолчанию, создаваемый при установке Docker |
| iptables | Правила фильтрации и NAT для маршрутизации трафика |
| docker-proxy | Процесс, пересылающий трафик с портов хоста в контейнеры |
| embedded DNS | Встроенный DNS-сервер (127.0.0.11) для разрешения имён |
# Показать все сети
docker network ls
# Детальная информация о сети
docker network inspect bridge
# Показать сетевые интерфейсы хоста
ip link show
# Показать мосты
brctl show
# Показать iptables правила Docker
sudo iptables -t nat -L -n -v | grep docker
# Показать процессы docker-proxy
ps aux | grep docker-proxyDocker поддерживает несколько типов сетевых драйверов через Container Network Model (CNM):
| Драйвер | Изоляция | Производительность | DNS | Сценарий |
|---|---|---|---|---|
| bridge | Высокая | Хорошая | ✅ | Локальная разработка, одиночные хосты |
| host | Нет | Нативная | ❌ | High-performance, monitoring |
| none | Полная | Н/Д | ❌ | Безопасность, batch processing |
| overlay | Высокая | Хорошая | ✅ | Swarm, multi-host |
| macvlan | Средняя | Нативная | ⚠️ | Legacy apps, прямой доступ к LAN |
| ipvlan | Средняя | Нативная | ⚠️ | Специфичные конфигурации |
| none | Полная | Н/Д | ❌ | Изоляция |
Нужна ли связь между хостами?
├─ ДА → Использовать overlay (Swarm) или CNI (Kubernetes)
└─ НЕТ → Продолжить
│
▼
Нужна ли максимальная производительность?
├─ ДА → Использовать host или macvlan
└─ НЕТ → Продолжить
│
▼
Нужен ли прямой доступ к физической сети?
├─ ДА → Использовать macvlan
└─ НЕТ → Использовать bridge (рекомендуется)
Сеть bridge создаётся автоматически при установке Docker:
# Информация о сети по умолчанию
docker network inspect bridgeХарактеристики default bridge:
172.17.0.0/16172.17.0.1# Запуск в default bridge
docker run -d --name web1 nginx
docker run -d --name web2 nginx
# Проверка IP
docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' web1
# 172.17.0.2
# Пинг по IP работает
docker exec web1 ping 172.17.0.3 # ✅
# Пинг по имени НЕ работает
docker exec web1 ping web2 # ❌ ping: bad address 'web2'Почему DNS не работает в default bridge: Встроенный DNS Docker разрешает имена только в пользовательских сетях. В default bridge эта функция отключена для обратной совместимости.
Создание собственной сети включает полный функционал:
# Создать сеть
docker network create my-network
# Запустить контейнеры
docker run -d --name web --network my-network nginx
docker run -d --name api --network my-network myapi
# DNS работает!
docker exec web ping api # ✅ Работает
docker exec api ping web # ✅ Работает# Сеть с кастомной подсетью и шлюзом
docker network create \
--driver bridge \
--subnet 172.20.0.0/16 \
--gateway 172.20.0.1 \
--ip-range 172.20.0.0/24 \
--aux-address "host1=172.20.0.10" \
--aux-address "host2=172.20.0.11" \
my-custom-network
# Сеть с отключённым ICC (Inter-Container Communication)
docker network create \
--driver bridge \
--opt com.docker.network.bridge.enable_icc=false \
isolated-network
# Сеть с кастомным DNS
docker network create \
--driver bridge \
--opt com.docker.network.driver.mtu=1450 \
--dns 8.8.8.8 \
--dns 1.1.1.1 \
dns-networkПараметры конфигурации:
| Параметр | Описание | Пример |
|---|---|---|
--subnet | CIDR подсети | 172.20.0.0/16 |
--gateway | IP шлюза | 172.20.0.1 |
--ip-range | Диапазон для DHCP | 172.20.0.0/24 |
--aux-address | Зарезервированные IP | host1=172.20.0.10 |
enable_icc | Разрешить связь контейнеров | true/false |
mtu | Максимальный размер пакета | 1450 |
# Посмотреть все сети
docker network ls
docker network ls --filter driver=bridge
docker network ls --format "{{.Name}}\t{{.Driver}}"
# Детали сети
docker network inspect my-network
docker network inspect -f '{{.IPAM.Config}}' my-network
# Подключить запущенный контейнер
docker network connect my-network container1
# Подключить с алиасом
docker network connect \
--alias database \
--alias db-primary \
my-network container1
# Отключить от сети
docker network disconnect my-network container1
# Принудительно отключить (даже если контейнер использует сеть)
docker network disconnect --force my-network container1
# Удалить сеть
docker network rm my-network
# Очистить неиспользуемые сети
docker network prune
docker network prune --filter "until=24h" # Старше 24 часовICC контролирует, могут ли контейнеры в одной сети общаться друг с другом:
# ICC включено (по умолчанию) — контейнеры видят друг друга
docker network create my-network
# ICC выключено — полная изоляция
docker network create \
--opt com.docker.network.bridge.enable_icc=false \
isolated-network
docker run -d --name app1 --network isolated-network alpine sleep infinity
docker run -d --name app2 --network isolated-network alpine sleep infinity
docker exec app1 ping app2 # ❌ Не работаетСценарии использования ICC=false:
Режим host убирает сетевую изоляцию — контейнер использует стек хоста напрямую:
docker run -d --network host nginx
| Характеристика | Описание |
|---|---|
| Изоляция | Отсутствует |
| Производительность | Нативная (нет NAT, нет veth) |
| Порты | Не требуется -p, конфликтуют порты |
| DNS | Использует DNS хоста |
/etc/hosts | Копируется с хоста |
# ✅ Monitoring agent — нужен доступ ко всем интерфейсам
docker run -d \
--network host \
--name netdata \
netdata/netdata
# ✅ High-performance proxy
docker run -d \
--network host \
--name haproxy \
haproxy:latest
# ❌ Ошибка — порт 80 уже занят
docker run -d --network host nginx
docker run -d --network host apache # Конфликт!✅ Подходит:
❌ Не подходит:
Полная сетевая изоляция — только loopback интерфейс:
docker run --network none alpine ip addr
# 1: lo: <LOOPBACK,UP,LOWER_UP> ...
# inet 127.0.0.1/8 scope host lo# ✅ Batch processing без сети
docker run --rm \
--network none \
-v ./data:/data \
alpine sh -c "process-data /data"
# ✅ Безопасная обработка секретов
docker run --rm \
--network none \
--env-file secrets.env \
vault encrypt
# ✅ Изолированная тестовая среда
docker run --rm \
--network none \
--cap-drop=ALL \
--cap-add=NET_BIND_SERVICE \
test-imageМожно подключить сеть после запуска:
# Запустить без сети
docker run -d --network none --name isolated alpine sleep infinity
# Позже подключить к сети
docker network connect my-network isolated
# Или создать пару veth вручную и настроить через iproute2
ip link add veth0 type veth peer name veth1
# ... сложная ручная настройкаOverlay сети обеспечивают связь между контейнерами на разных хостах через инкапсуляцию трафика (VXLAN):

# Инициализировать Swarm (требуется для overlay)
docker swarm init --advertise-addr 192.168.1.10
# Добавить worker
docker swarm join --token <token> 192.168.1.10:2377
# Создать overlay сеть
docker network create \
--driver overlay \
--subnet 10.0.0.0/24 \
--gateway 10.0.0.1 \
my-overlay
# Создать зашифрованную overlay сеть
docker network create \
--driver overlay \
--opt encrypted \
secure-overlay
# Запустить сервисы
docker service create \
--name web \
--network my-overlay \
--replicas 3 \
--publish 80:80 \
nginx
docker service create \
--name api \
--network my-overlay \
--replicas 2 \
myapi:latestVXLAN (Virtual Extensible LAN) инкапсулирует L2-фреймы в UDP-пакеты:

Преимущества:
Недостатки:
Macvlan позволяет контейнеру иметь собственный MAC-адрес и подключаться напрямую к физической сети:

# Создать macvlan сеть
docker network create -d macvlan \
--subnet 192.168.1.0/24 \
--gateway 192.168.1.1 \
-o parent=eth0 \
macvlan-net
# Запустить контейнер
docker run -d \
--network macvlan-net \
--ip 192.168.1.10 \
--mac-address "02:42:ac:11:00:0a" \
nginxОграничения macvlan:
Упрощённая версия macvlan — один MAC-адрес на все контейнеры:
docker network create -d ipvlan \
--subnet 192.168.1.0/24 \
--gateway 192.168.1.1 \
-o parent=eth0 \
-o ipvlan_mode=l2 \
ipvlan-netРежимы ipvlan:
| Характеристика | Bridge | Macvlan | Ipvlan |
|---|---|---|---|
| MAC-адреса | Один на хосте | На контейнер | Один на хост |
| Видимость в сети | Через NAT | Прямая | Прямая |
| Изоляция | Высокая | Средняя | Средняя |
| Производительность | Хорошая | Нативная | Нативная |
| Сложность | Низкая | Средняя | Высокая |
Docker использует iptables NAT и docker-proxy для публикации портов:

# Публикация на все интерфейсы
docker run -d -p 8080:80 nginx
# Доступно: http://0.0.0.0:8080
# Публикация на конкретный IP
docker run -d -p 192.168.1.100:8080:80 nginx
# Доступно только с 192.168.1.100
# Публикация только на localhost
docker run -d -p 127.0.0.1:8080:80 nginx
# Доступно только локально
# Публикация нескольких портов
docker run -d \
-p 80:80 \
-p 443:443 \
-p 8080:8080 \
nginx
# Диапазон портов
docker run -d -p 8000-8010:8000-8010 myapp
# Динамический порт
docker run -d -p 80 nginx
docker port <container_id>
# 80/tcp -> 0.0.0.0:32768# TCP (по умолчанию)
docker run -d -p 80:80 nginx
# UDP
docker run -d -p 53:53/udp dns-server
# TCP и UDP одновременно
docker run -d -p 53:53 -p 53:53/udp dns-server
# SCTP (редко)
docker run -d -p 9898:9898/sctp sctp-app# Dockerfile
FROM nginx
EXPOSE 80 443EXPOSE — это документация, а не публикация:
-P (заглавная) для публикации всех EXPOSE# Опубликовать все EXPOSE порты (динамические порты)
docker run -d -P nginx
# Явная публикация (контролируемые порты)
docker run -d -p 8080:80 -p 8443:443 nginx# Docker Compose
services:
web:
ports:
- "8080:80" # host:container
- "127.0.0.1:9090:90" # ip:host:container
- "6000-6010:6000-6010" # диапазоныDocker запускает DNS-сервер на 127.0.0.11 внутри каждого контейнера:
docker exec -it container bash
cat /etc/resolv.conf
# nameserver 127.0.0.11
# options timeout:2 attempts:3 rotate single-request-reopen ndots:0Как работает:
127.0.0.11# Создать сеть
docker network create my-network
# Запустить сервисы
docker run -d --name postgres --network my-network postgres
docker run -d --name redis --network my-network redis
docker run -d --name api --network my-network myapi
# Из api можно обратиться:
docker exec api nslookup postgres
# Server: 127.0.0.11
# Address: 127.0.0.11#53
# Name: postgres
# Address: 172.20.0.2
# Проверка из контейнера
docker exec api getent hosts postgres
# 172.20.0.2 postgresАлиасы позволяют создать несколько имён для одного контейнера:
# Запустить с алиасами
docker run -d \
--name db-primary \
--network my-network \
--network-alias db \
--network-alias database \
--network-alias postgres-primary \
postgres:15
# Все алиасы работают:
docker exec app nslookup db # ✅
docker exec app nslookup database # ✅
docker exec app nslookup postgres-primary # ✅Сценарии:
# Переопределить DNS серверы
docker run -d \
--dns 8.8.8.8 \
--dns 1.1.1.1 \
--dns-opt "options timeout:5" \
nginx
# Добавить записи в /etc/hosts
docker run -d \
--add-host=database:172.20.0.100 \
--add-host=cache:172.20.0.101 \
myapp
# Внутри контейнера:
cat /etc/hosts
# 172.20.0.100 database
# 172.20.0.101 cacheservices:
web:
image: nginx
networks:
- frontend
dns:
- 8.8.8.8
- 1.1.1.1
dns_search: example.com
api:
image: myapi
networks:
- frontend
- backend
networks:
backend:
aliases:
- database-api
- api-v1
networks:
frontend:
backend:# Сеть с отключённым ICC
docker network create \
--driver bridge \
--opt com.docker.network.bridge.enable_icc=false \
isolated-network
# Контейнеры не могут общаться напрямую
# Требуется явное разрешение через линки или прокси# ✅ Безопасно — только localhost
docker run -d \
-p 127.0.0.1:5432:5432 \
postgres
# ✅ Безопасно — конкретный IP
docker run -d \
-p 10.0.0.5:5432:5432 \
postgres
# ❌ Опасно — доступно всем
docker run -d -p 5432:5432 postgres# Просмотр правил Docker
sudo iptables -L -n -v | grep docker
sudo iptables -t nat -L -n -v | grep docker
# Заблокировать доступ к порту контейнера
sudo iptables -I DOCKER -p tcp --dport 5432 -j DROP
# Разрешить только с определённого IP
sudo iptables -I DOCKER -p tcp -s 10.0.0.0/8 --dport 5432 -j ACCEPT
sudo iptables -I DOCKER -p tcp --dport 5432 -j DROPПри развёртывании в облаке:
# Создать зашифрованную сеть
docker network create \
--driver overlay \
--opt encrypted \
secure-network
# Трафик между хостами шифруется через IPsecdocker network inspect# Установить iperf3
docker run -d \
--network host \
--name iperf-server \
networkstatic/iperf3 -s
# Запустить клиент
docker run --rm \
--network host \
networkstatic/iperf3 -c localhost -t 30| Фактор | Влияние | Рекомендация |
|---|---|---|
| NAT | +10-20% latency | Host network для критичных |
| veth pair | Минимальное | Не беспокоиться |
| DNS lookup | +1-5ms кэш | Использовать алиасы |
| Overlay (VXLAN) | +5-10% throughput | Шифрование дороже |
| MTU | Фрагментация | Настроить MTU=1450 для overlay |
# Увеличить MTU для overlay
docker network create \
--driver overlay \
--opt com.docker.network.driver.mtu=1450 \
my-overlay
# Использовать host network для high-performance
docker run --network host nginx
# Настроить DNS кэширование
docker run \
--dns 127.0.0.1 \
--dns-opt "options ndots:1" \
myapp# Запустить netshoot для отладки
docker run --rm -it \
--network my-network \
--cap-add=NET_ADMIN \
nicolaka/netshoot
# Внутри:
tcpdump -i eth0 -n port 80
curl -w "@curl-format.txt" http://api:8000
mtr api:8000
# Создать сети
docker network create \
--driver bridge \
--subnet 172.20.0.0/16 \
frontend-network
docker network create \
--driver bridge \
--subnet 172.21.0.0/16 \
--opt com.docker.network.bridge.enable_icc=false \
backend-network
# Базы данных (только backend, ICC отключён)
docker run -d \
--name postgres \
--network backend-network \
--network-alias db \
-e POSTGRES_PASSWORD=secret \
-v postgres-data:/var/lib/postgresql/data \
postgres:15-alpine
docker run -d \
--name redis \
--network backend-network \
--network-alias cache \
redis:7-alpine \
redis-server --appendonly yes
# API Gateway (обе сети)
docker run -d \
--name api-gateway \
--network backend-network \
--network frontend-network \
--network-alias api \
-e DATABASE_URL=postgresql://postgres:secret@db:5432/app \
-e REDIS_URL=redis://cache:6379 \
myapi-gateway:latest
# Микросервисы (только backend)
docker run -d \
--name user-service \
--network backend-network \
--network-alias user-svc \
-e DB_HOST=db \
myuser-service:latest
docker run -d \
--name order-service \
--network backend-network \
--network-alias order-svc \
-e DB_HOST=db \
-e KAFKA_BROKERS=kafka:9092 \
myorder-service:latest
# Frontend (только frontend)
docker run -d \
--name frontend \
--network frontend-network \
-p 127.0.0.1:3000:80 \
myfrontend:latest
# Nginx Ingress (только frontend)
docker run -d \
--name nginx \
--network frontend-network \
-p 80:80 \
-p 443:443 \
-v ./nginx.conf:/etc/nginx/nginx.conf:ro \
-v ./ssl:/etc/nginx/ssl:ro \
nginx:alpineevents {
worker_connections 4096;
multi_accept on;
}
http {
# Upstreams
upstream api {
least_conn;
server api-gateway:8000;
keepalive 32;
}
upstream frontend {
server frontend:80;
keepalive 16;
}
# Rate limiting
limit_req_zone $binary_remote_addr zone=api_limit:10m rate=10r/s;
limit_req_zone $binary_remote_addr zone=web_limit:10m rate=50r/s;
server {
listen 80;
server_name example.com;
# Redirect to HTTPS
return 301 https://$server_name$request_uri;
}
server {
listen 443 ssl http2;
server_name example.com;
ssl_certificate /etc/nginx/ssl/cert.pem;
ssl_certificate_key /etc/nginx/ssl/key.pem;
# API с rate limiting
location /api/ {
limit_req zone=api_limit burst=20 nodelay;
proxy_pass http://api/;
proxy_http_version 1.1;
proxy_set_header Connection "";
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
# Timeouts
proxy_connect_timeout 60s;
proxy_send_timeout 60s;
proxy_read_timeout 60s;
}
# Frontend
location / {
limit_req zone=web_limit burst=50 nodelay;
proxy_pass http://frontend/;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $host;
}
}
}version: '3.8'
services:
postgres:
image: postgres:15-alpine
networks:
- backend
environment:
POSTGRES_PASSWORD: secret
volumes:
- postgres-data:/var/lib/postgresql/data
redis:
image: redis:7-alpine
networks:
- backend
command: redis-server --appendonly yes
api:
build: ./api
networks:
- frontend
- backend
environment:
DATABASE_URL: postgresql://postgres:secret@postgres:5432/app
REDIS_URL: redis://redis:6379
depends_on:
- postgres
- redis
frontend:
build: ./frontend
networks:
- frontend
ports:
- "127.0.0.1:3000:80"
nginx:
image: nginx:alpine
networks:
- frontend
ports:
- "80:80"
- "443:443"
volumes:
- ./nginx.conf:/etc/nginx/nginx.conf:ro
networks:
frontend:
driver: bridge
backend:
driver: bridge
internal: true # Нет доступа наружу
volumes:
postgres-data:networks:
frontend:
driver: bridge
ipam:
driver: default
config:
- subnet: 172.20.0.0/16
gateway: 172.20.0.1
backend:
driver: bridge
internal: true
ipam:
config:
- subnet: 172.21.0.0/16
overlay-net:
driver: overlay
driver_opts:
encrypted: "true"
attachable: true # Позволяет подключать standalone контейнеры# Получить IP контейнера
docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' container
# Проверить сеть контейнера
docker inspect -f '{{json .NetworkSettings}}' container | jq
# Пинг из контейнера
docker exec container ping other-container
# Проверить порты
docker exec container nc -zv other-container 5432
docker exec container bash -c "echo > /dev/tcp/host/5432"
# DNS проверка
docker exec container nslookup service-name
docker exec container getent hosts service-name
# Проверить маршрутизацию
docker exec container ip route
docker exec container cat /etc/resolv.conf# Запустить отладочный контейнер в той же сети
docker run --rm -it \
--network my-network \
--cap-add=NET_ADMIN \
--cap-add=NET_RAW \
nicolaka/netshoot
# Внутри netshoot:
# Перехват трафика
tcpdump -i eth0 -n port 80 -w capture.pcap
# Трассировка
mtr -n api:8000
# Проверка портов
nmap -p 1-1000 api
masscan -p1-65535 api
# HTTP тесты
curl -v http://api:8000/health
httpie http://api:8000/health
# DNS отладка
dig @127.0.0.11 api
drill api
# Проверка MTU
ping -M do -s 1472 api # Максимальный для Ethernet# Проверить, в одной ли сети
docker inspect container1 --format '{{json .NetworkSettings.Networks}}' | jq
docker inspect container2 --format '{{json .NetworkSettings.Networks}}' | jq
# Проверить ICC
docker network inspect network-name --format '{{.Options}}'Решение: Подключить к одной сети или включить ICC.
# Проверить DNS внутри контейнера
docker exec container cat /etc/resolv.conf
# Перезапустить Docker DNS
sudo systemctl restart docker# Проверить iptables
sudo iptables -L -n -v | grep docker
# Проверить docker-proxy
ps aux | grep docker-proxy
# Проверить firewall хоста
sudo ufw status
sudo firewall-cmd --list-all# Проверить MTU
docker network inspect network-name --format '{{.Options}}'
# Тест производительности
docker run --rm --network host networkstatic/iperf3 -c target-host# Очистить все сети
docker network prune -af
# Перезапустить Docker
sudo systemctl restart docker
# Полный сброс (Linux)
sudo systemctl stop docker
sudo rm -rf /var/lib/docker/network
sudo systemctl start docker# Создать сеть для service mesh
docker network create \
--driver overlay \
--opt encrypted \
mesh-network
# Запустить sidecar proxy
docker run -d \
--network mesh-network \
--name api-with-proxy \
-v ./envoy.yaml:/etc/envoy/envoy.yaml \
envoyproxy/envoy:v1.28
# Конфигурация Envoy для service discovery
# envoy.yaml
static_resources:
clusters:
- name: api_cluster
type: STRICT_DNS
lb_policy: ROUND_ROBIN
load_assignment:
cluster_name: api_cluster
endpoints:
- lb_endpoints:
- endpoint:
address:
socket_address:
address: api
port_value: 8000# Настроить WireGuard туннель между хостами
# Хост A
wg genkey | tee privatekey | wg pubkey > publickey
cat > /etc/wireguard/wg0.conf <<EOF
[Interface]
PrivateKey = <private-key>
Address = 10.0.0.1/24
ListenPort = 51820
[Peer]
PublicKey = <peer-public-key>
AllowedIPs = 10.0.0.0/24
EOF
# После настройки туннеля создать overlay сеть
# Контейнеры на разных хостах будут в одной сети# Ограничить трафик между подами
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: api-network-policy
spec:
podSelector:
matchLabels:
app: api
policyTypes:
- Ingress
- Egress
ingress:
- from:
- podSelector:
matchLabels:
app: frontend
ports:
- protocol: TCP
port: 8000
egress:
- to:
- podSelector:
matchLabels:
app: postgres
ports:
- protocol: TCP
port: 5432Docker использует libnetwork, но можно интегрировать CNI:
# Установить weave
curl -L git.io/weave -o /usr/local/bin/weave
chmod +x /usr/local/bin/weave
weave launch
# Подключить Docker к weave
eval $(weave env)
# Контейнеры автоматически в overlay сети
docker run -d --name web nginx# Prometheus + cAdvisor
docker run -d \
--name=cadvisor \
--volume=/:/rootfs:ro \
--volume=/var/run:/var/run:ro \
--volume=/sys:/sys:ro \
--volume=/var/lib/docker/:/var/lib/docker:ro \
--publish=8080:8080 \
google/cadvisor:latest
# Grafana дашборды для сетевых метрик
# Метрики: container_network_receive_bytes_total
# container_network_transmit_bytes_total| Тема | Ключевые моменты |
|---|---|
| Bridge | Сеть по умолчанию, используйте пользовательские сети для DNS |
| Host | Максимальная производительность, нет изоляции |
| None | Полная изоляция, для безопасных задач |
| Overlay | Multi-host через VXLAN, требует Swarm |
| Macvlan | Прямой доступ к LAN, свой MAC |
| Порты | -p host:container, -P для всех EXPOSE |
| DNS | Встроенный на 127.0.0.11, алиасы для гибкости |
| Безопасность | Изоляция, firewall, minimum privileges |
| Troubleshooting | netshoot, tcpdump, docker inspect |
Изучите хранение данных в Docker: volumes, bind mounts, tmpfs и управление состоянием контейнеров.
Вопросы ещё не добавлены
Вопросы для этой подтемы ещё не добавлены.