Образовательный проект «SnakeProject» Михаила Козлова

Навигация

⇒ FreeBSD and Nix ⇐

CISCO

Voice(Asterisk\Cisco)

Microsoft

Powershell

Python

SQL\T-SQL

Общая

WEB Разработка

ORACLE SQL \ JAVA

Мото

Стрельба, пневматика, оружие

Саморазвитие и психология


Знакомство с 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

 


Комментарии пользователей

Эту новость ещё не комментировалиНаписать комментарий
Анонимам нельзя оставоять комментарии, зарегистрируйтесь!

Контакты Группа ВК Сборник материалов по Cisco, Asterisk, Windows Server, Python и Django, SQL и T-SQL, FreeBSD и LinuxКод обмена баннерами Видео к IT статьям на YoutubeВидео на другие темы Смотреть
Мои друзья: Советы, помощь, инструменты для сис.админа, статическая и динамическая маршрутизация, FreeBSD

© Snakeproject.ru создан в 2013 году.
При копировании материала с сайта - оставьте ссылку.

Рейтинг@Mail.ru
Рейтинг@Mail.ru Яндекс.Метрика





Поддержать автора и проект