Docker 的网络前端
运行 ifconfig 找到 docker0 : 虚拟网卡默认网卡名称为docker0web
查看docker 的网桥:docker
我这里默认们没有进行安装 网桥管理设备:进行安装一下;数据库
yum install bridge-utilsjson
命令:查看网桥crctl show:
vim
注意上图中的interfaces 这里为空,咱们启动一个新的容器以下:后端
命令: docker run -d -it --name centos6 centoscentos
咱们进入容器中查看该容器的ip 地址网络
我这里的容器是最小化的centos,通常状况我都会安装一下几个学习
yum install net-tools
yum install vim
yum install telnet
我看查看容器中的IP地址:
Docker 默认已经给咱们分配了地址
退出后在查看咱们本机的网桥:这里注意 interfaces 发生了变化
这是docker0: 在容器建立时,为链接容器建立的网络接口。
咱们运行容器的时候也能够查看该网络接口:
修改docker0 的ip地址: 使用超级管理员权限
sudo ifconfig docker0 192.168.254.0 netmask 255.255.255.0
自定义网桥:
链接到同一用户定义的网桥的容器会自动将全部端口相互暴露,而且不会向外界显示任何端口。这使得容器化应用程序能够轻松地相互通讯,而不会意外地打开对外界的访问。
想象一下具备Web前端和数据库后端的应用程序。外部世界须要访问Web前端(可能在端口80上),但只有后端自己须要访问数据库主机和端口。使用用户定义的网桥,只须要打开Web端口,而且数据库应用程序不须要打开任何端口,由于Web前端能够经过用户定义的网桥访问它。
若是在默认网桥上运行相同的应用程序堆栈,则须要打开Web端口和数据库端口,并使用 每一个的标记-p
或--publish
标记。这意味着Docker主机须要经过其余方式阻止对数据库端口的访问。
默认网桥上的容器只能经过IP地址相互访问,除非您使用被认为是遗留的--link
选项。在用户定义的桥接网络上,容器能够经过名称或别名相互解析。
想象一下与前一点相同的应用程序,具备Web前端和数据库后端。若是你打电话给你的容器web
和db
,Web容器能够在链接到数据库容器db
,不管哪一个码头工人托管应用程序堆栈上运行。
若是在默认桥接网络上运行相同的应用程序堆栈,则须要在容器之间手动建立连接(使用旧--link
标志)。这些连接须要在两个方向上建立,所以您能够看到这对于须要通讯的两个以上容器而言变得复杂。或者,您能够操做/etc/hosts
容器中的文件,但这会产生难以调试的问题。
在容器的生命周期中,您能够动态地将其与用户定义的网络链接或断开链接。要从默认桥接网络中删除容器,您须要中止容器并使用不一样的网络选项从新建立容器。
若是容器使用默认网桥,则能够对其进行配置,但全部容器都使用相同的设置,例如MTU和iptables
规则。此外,配置默认桥接网络发生在Docker自己以外,而且须要从新启动Docker。
使用建立和配置用户定义的网桥 docker network create
。若是不一样的应用程序组具备不一样的网络要求,则能够在建立时单独配置每一个用户定义的网桥。
最初,在两个容器之间共享环境变量的惟一方法是使用--link
标志连接它们。用户定义的网络没法实现这种类型的变量共享。可是,有更好的方法来共享环境变量。一些想法:
docker-compose
,而且compose文件能够定义共享变量。链接到同一用户定义的网桥的容器有效地将全部端口相互暴露。对于能够访问不一样网络上的容器或非Docker主机的端口,必须使用or 标志发布该端口。-p--publish
上面是docker 文档中的一段话:总体描述了docker 自定义网桥的用处。
开始自定义网桥:
我这里开启了一台新咱们查看网络信息
Ifconfig
首先中止容器运行:
systemctl stop docker.service
中止docker0 默认网桥
sudo ip link set dev docker0 down
删除docker0 网桥
sudo ip link del dev docker0
上图中能够看到网桥已经删除成功:
建立新的网桥:并配置IP地址,并启动网桥
sudo brctl addbr docker1
sudo ip addr add 192.168.100.1/24 dev docker1
sudo ip link set dev docker1 up
配置使用自定义网桥:保存退出
vi /etc/docker/daemon.json
启动并运行一个容器:
systemctl start docker.service
docker run -d -it --name centos1 centos
进入容器中:
docker inspect -f {{.State.Pid}} centos1
nsenter --target 19745 --ipc --uts --mount --pid --net
安装ifconfig 命令并查看 容器IP
yum install net-tools
查看网络
有不足之处 但愿你们指出相互学习,
本文原创:转载请注明出处 谢谢!