docker

docker 再认识2

2019-11-03  本文已影响0人  宇晨棒棒的

docker-network

一.从底层命令了解network-namespaces的连接机制

实验要求:通过在本地创建network-namespaces,模拟docker之间的网络连接状态

查看本地的network-namespace:ip netns list

创建本地network-namespaces(创建两个网络命名空间):

ip netns add ceshi1

ip netns add ceshi2

查看ceshi1和ceshi2中的网络列表和ip地址:

ip netns exec ceshi1  ip a

ip netns exec  ceshi1 ip  link

在本地创建一对veth网络接口:

ip link add veth-ceshi1 type veth peer name veth-ceshi2

从本地查看网络接口:

ip  link

本地查看网络接口

将网络接口添加到网络命名空间中:

ip link  set veth-ceshi1  netns ceshi1

ip link set veth-ceshi2 netns ceshi2

到网络空间中查看网络接口:

ip netns exec ceshi1 ip  a

ceshi1的虚拟网络

ip netns  exec ceshi2 ip  a

ceshi2的虚拟网络

此时本地已经没有veth-ceshi1和veth-ceshi2了并且在网络命名空间中,网络接口还没有ip地址状态还是Down。

添加ip地址和将状态改为up状态

添加ip地址:

ip netns  exec ceshi1 ip addr add 192.168.100.2 dev veth-ceshi1

ip netns  exec ceshi2 ip addr add 192.168.100.3 dev veth-ceshi2

修改状态:

ip netns exec ceshi1 ip link set dev veth-ceshi1 up

ip netns exec ceshi2 ip link set dev veth-ceshi2 up

查看此时的ip地址和状态:

ceshi1的ip ceshi2的ip

测试连通性:

ceshi1 ---->ping ceshi2:

ping

ceshi2----->ping ceshi1:

ping

二.网络内部结构图:

网络内部结构图

容器中的虚拟网络接口会和本地的一个虚拟网络接口连接,本地的虚拟网络接口再连接到docker0接口上,实现网络的连通。

查看有那些接口连接到docker0上:

yum install bridge-utils -y

brctl  show  ----->查看

三.网络接口信息如下:

本地:

本地虚拟网卡

docker中虚拟网络接口:

虚拟网络接口

docker0本地连接虚拟网络接口:

本地连接虚拟网络接口

四.容器间的连通----->通过容器名而不是ip地址----> link

创建一个叫apache的容器:

docker run -itd --name apache ubuntu:14.04 /bin/bash 

创建一个叫mysql的容器并且连接到apache容器上:

docker run -itd --name mysql --link apache  ubuntu:14.04 /bin/bash

通过mysql容器ping apache容器:

link之间的连通性

查看mysql容器中hosts文件内容:

注意:link之间是有方向性的,

hosts内容

此处mysql可以通过ping容器名称apache连接到apache容器,但是反过来,apache容器通过mysql容器名是ping不同的,但是ip地址是通的。

五.自定义bridge网络:

创建自定义的bridge网络:  docker network  create  -d bridge  mybridge

查看新创建的bridge网络: docker network ls

创建新的容器并且使用新的bridge网络:

docker run -itd --name php --network mybridge   ubuntu:14.04 /bin/bash 

查看bridge网络详细信息: docker network inspect mybridge

将已存在的容器添加到自定义的bridge网络中:

docker network connect mybridge mysql

由于mysql和php都在自定义的bridge网络中,此时通过容器名称可以实现相互ping通

自定义网络连通性

虚拟网络接口

上一篇下一篇

猜你喜欢

热点阅读