Docker之容器互聯實現容器間通訊

1、Link方式實現本機容器間互聯通訊mysql

自定義容器名
nginx

鏈接系統依據容器名稱執行,因此首先須要自定義容器名稱。web

使用--name標記能夠爲容器自定義名稱:sql

[root@centos7 ~]# docker run -d --name mysqldb -p3306:3306 -e MYSQL_ROOT_PASSWORD=fanshine mysql/mysql-server

使用docker ps 查看容器的命名:image.png
docker

也可使用docker inspect來查看容器名稱:數據庫

[root@centos7 ~]# docker inspect -f "{{ .Name }}" bf3bacf5c91d

注意:容器名稱是惟一的,若是建立了mysqldb,須要在此建立須要將同名容器刪除掉在去建立。
vim

容器互聯centos

容器互聯大致有如下三種方式,使用link進行容器互聯:bash

  • 基於volume的互聯網絡

  • 基於link的互聯

  • 基於網絡的互聯

使用--link參數讓容器間進行交互:

首先建立數據庫容器:

[root@centos7 ~]# docker run -d --name mysqldb -p3306:3306 -e MYSQL_ROOT_PASSWORD=fanshine mysql/mysql-server

而後建立web容器,並將其鏈接到db容器:

[root@centos7 ~]# docker run -d -p 80:80 --name nginxweb --link mysqldb:mysqldb  nginx/nginx-server

此時web容器與db容器創建了互聯關係。

注意:--link參數格式爲--link name:alias,其中name是要連接的容器名稱,alias是這個鏈接的名稱。

Docker經過兩種方式爲容器公開鏈接信息:

  • 環境變量

  • 更新/etc/hosts文件

使用env命令查看web容器的環境變量:

[root@centos7 ~]# docker run --rm --name nginxweb3 --link mysqldb:mysqldb  nginx/nginx-server env[object Object]

其中MYSQLDB_開頭的環境變量是供web容器鏈接db容器使用。

登錄web容器ping通mysqldb:image.png

2、使用自定義網橋實現容器跨主機互聯通訊

Docker默認的網橋是docker0。此網橋只會在本機鏈接全部容器。

容器的虛擬網卡在主機上看通常叫作veth*而docker0網橋把全部這些網卡橋接在一塊兒,以下:

2019-07-31_141645.jpg

經過ip命令查看到的docker網絡信息以下:

2019-07-31_141819.jpg

這樣能夠把這個網絡當作一個私有網絡,若是要讓外網鏈接到容器中,就須要作端口映射,即-p參數。

例如:主機A和主機B的網卡一都連着物理交換機的同一vlan10,這樣網橋一和網橋三就至關於在同一物理網絡中,而容器1、容器3、容器四也在同一個網絡中,它們之間能夠相互通訊,並且能夠跟同一vlan種的其餘物理機器互聯,以下圖所示:

2019-07-31_143416.jpg

建立跨多個主機容器聯網:

建立網橋br0,編輯br0配置文件:

[root@centos ~]# vim /etc/sysconfig/network-scripts/ifcfg-br0 
DEVICE="br0"
BOOTPROTO=none
IPV6INIT=no
TYPE="Bridge"
ONBOOT="yes"
NAME="br0"
IPADDR=192.168.158.100
NETMASK=255.255.255.0
GATEWAY=192.168.158.2
USERCTL=no

編輯本機網卡配置文件ens33,主要添加配置參數BRIDGE=br0:

[root@centos ~]# vim /etc/sysconfig/network-scripts/ifcfg-ens33
DEVICE=ens33
BOOTPROTO=none
NM_CONTROLLED=no
ONBOOT=yes
TYPE=Ethernet
IPADDR=192.168.158.100
NETMASK=255.255.255.0
GATEWAY=192.168.158.2
NAME=ens33
UUID=cb22149a-7dc8-456c-8b6b-a25b28db9f30
BRIDGE=br0

重啓網卡:

[root@centos ~]# service network restart
Restarting network (via systemctl):                        [  OK  ]
[root@centos ~]#

查看本地網絡信息:

2019-08-01_164555.jpg

刪除docker0的默認網橋信息:

[root@centos ~]# ifconfig docker0 down
[root@centos ~]# brctl delbr docker0

修改docker的橋接網卡爲br0,centos7爲例:

[root@centos ~]# vim /etc/sysconfig/docker-network
DOCKER_NETWORK_OPTIONS="-b=br0"
[root@centos ~]# vim /lib/systemd/system/docker.service
....
ExecStart=/usr/bin/docker daemon -H fd:// $DOCKER_NETWORK_OPTIONS
EnvironmentFile=-/etc/sysconfig/docker-network

重啓docker服務!

[root@centos ~]# systemctl daemon-reload
[root@centos ~]# systemctl start docker

建立docker容器:

[root@centos ~]# docker run -it --name=centos-test1 -d centos /bin/bash

進入容器並測試,201爲另外一臺宿主機:

2019-08-01_165950.jpg

能夠經過docker inspect命令查看容器網絡該容器ip地址爲192.168.158.5,信息以下:

2019-08-01_170237.jpg

在另外一臺宿主機作一樣的網橋設置,建立容器,查看該容器ip地址:

2019-08-02_092257.jpg

在主機上Ping這臺宿主機容器Ip,能夠看到可以ping通:

2019-08-02_092434.jpg

相關文章
相關標籤/搜索