Знакомство с Docker часть 5
Знакомство с Docker часть 5
Предыдущая часть:
http://snakeproject.ru/rubric/article.php?art=docker_4_01.2019
Сеть и Docker
Docker при запуске создает сетевой интерфейс:
docker0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 172.17.0.1 netmask 255.255.0.0 broadcast 172.17.255.255
inet6 fe80::42:49ff:feee:331f prefixlen 64 scopeid 0x20<link>
ether 02:42:49:ee:33:1f txqueuelen 0 (Ethernet)
RX packets 3222 bytes 160903 (157.1 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 5870 bytes 41051573 (39.1 MiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
Чтоб просмотреть, что к нему подключено необходим пакет
Centos: yum install bridge-utils
Ubuntu: apt-get install bridge-utils
Выведем инофрмацию по сетевому мосту:
brctl show docker0
bridge name bridge id STP enabled interfaces
docker0 8000.024249ee331f no vethbeae3aa
В данном случае vethbeae3aa - сетевой интерфейс контейнера
Каждый новый контейнер создает новый интерфейс и подключается к виртуальному мосту docker0
Если вывести информацию по сетевым настройкам контейнера:
docker inspect 0c6cc038d219
...
"Id": "0c6cc038d219c25b210307b90be093a81a242375ef5c0431ee6af4c78d32ad73"
"ResolvConfPath": "/data/docker/containers/0c6cc038d219c25b210307b90be093a81a242375ef5c0431ee6af4c78d32ad73/resolv.conf"
"HostnamePath": "/data/docker/containers/0c6cc038d219c25b210307b90be093a81a242375ef5c0431ee6af4c78d32ad73/hostname"
"HostsPath": "/data/docker/containers/0c6cc038d219c25b210307b90be093a81a242375ef5c0431ee6af4c78d32ad73/hosts"
...
"NetworkSettings": {
"Bridge": "",
"HairpinMode": false,
"Ports": {
"80/tcp": [
{
"HostIp": "0.0.0.0",
"HostPort": "80"
}
]
},
"Gateway": "172.17.0.1",
"IPAddress": "172.17.0.2",
"IPPrefixLen": 16,
"MacAddress": "02:42:ac:11:00:02",
"Networks": {
"bridge": {
"Gateway": "172.17.0.1",
"IPAddress": "172.17.0.2",
"IPPrefixLen": 16,
"MacAddress": "02:42:ac:11:00:02",
}
}
...
Мы видим, что - "Gateway": "172.17.0.1" - это ip на сетевом интерфейсе docker0 нашего сервера
"IPAddress": "172.17.0.2" - сетевой адрес контейнера
А по путям ResolvConfPath\HostnamePath\HostsPath лежат сетевые настройки, которые можно перезаписать
После перезагрузки контейнера настройки обнулятся
По дефолту это копии конфигов сервера с докер
cat /data/docker/containers/0c6cc038d219c25b210307b90be093a81a242375ef5c0431ee6af4c78d32ad73/resolv.conf
# Generated by NetworkManager
search domain.local
nameserver 10.10.1.10
nameserver 10.10.1.11
Запустим контейнер из предыдущей статьи с указанием днс:
docker run --dns=8.8.8.4 -v www_page:/data/www -d -p 80:80 web_hello:1.2
Некоторые другие параметры
Указать имя хоста в /etc/hostname:
-h HOSTNAME или --hostname=HOSTNAME
Указать алиас хоста /etc/hosts:
--link=CONTAINER_NAME или ID:ALIAS
Указать nameserver в /etc/resolv.conf:
--dns=IP_ADDRESS
Указать имя домена в /etc/resolv.conf:
--dns-search=DOMAIN
Порты в Docker
В Dockerfile возможно указать порты, которые можно будет использовать
Делается это директивой EXPOSE
Пример:
EXPOSE 80
EXPOSE 443
Или в одну строку:
EXPOSE 80 443
При запуске контейнера указываем пробросы портов:
docker run -d -p 8080:80 web_hello:1.2
При обращении к порту 8080 сервера будет отрабатывать проброс на порт 80 контейнера:
docker ps
CONTAINER ID IMAGE COMMAND PORTS
dfa7bcc715f8 web_hello:1.2 "nginx -g 'daemon of…" 0.0.0.0:80->80/tcp
docker port dfa7bcc715f8
80/tcp -> 0.0.0.0:80
По дефолту проброс идет по протоколу tcp, укажем явно udp:
docker run -d -p 80:80/udp web_hello:1.2
Указать определенный ip для проброса:
docker run -d -p 10.0.2.4:8080:80 web_hello:1.2
Пробросим все порты из указанных в Dockerfile
Конфиг:
vi Dockerfile
FROM nginx:alpine
EXPOSE 80 443
Пересоберем:
docker build -t web_hello:1.3 .
Запустим:
docker run -d -P web_hello:1.3
Проверяем, порты на сервере Docker назначаются случайно:
docker ps
CONTAINER ID IMAGE COMMAND PORTS
977ba42c6353 web_hello:1.3 "nginx -g 'daemon of…" 0.0.0.0:32769->80/tcp, 0.0.0.0:32768->443/tcp
docker port 977ba42c6353
80/tcp -> 0.0.0.0:32769
443/tcp -> 0.0.0.0:32768
Комментарии пользователей
Анонимам нельзя оставоять комментарии, зарегистрируйтесь!