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 查看容器的命名:
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:
2、使用自定義網橋實現容器跨主機互聯通訊
Docker默認的網橋是docker0。此網橋只會在本機鏈接全部容器。
容器的虛擬網卡在主機上看通常叫作veth*而docker0網橋把全部這些網卡橋接在一塊兒,以下:
經過ip命令查看到的docker網絡信息以下:
這樣能夠把這個網絡當作一個私有網絡,若是要讓外網鏈接到容器中,就須要作端口映射,即-p參數。
例如:主機A和主機B的網卡一都連着物理交換機的同一vlan10,這樣網橋一和網橋三就至關於在同一物理網絡中,而容器1、容器3、容器四也在同一個網絡中,它們之間能夠相互通訊,並且能夠跟同一vlan種的其餘物理機器互聯,以下圖所示:
建立跨多個主機容器聯網:
建立網橋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 ~]#
查看本地網絡信息:
刪除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爲另外一臺宿主機:
能夠經過docker inspect命令查看容器網絡該容器ip地址爲192.168.158.5,信息以下:
在另外一臺宿主機作一樣的網橋設置,建立容器,查看該容器ip地址:
在主機上Ping這臺宿主機容器Ip,能夠看到可以ping通: