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通: