美文网首页docker
docker 再认识2

docker 再认识2

作者: 宇晨棒棒的 | 来源:发表于2019-11-03 10:38 被阅读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通

    自定义网络连通性

    虚拟网络接口

    相关文章

      网友评论

        本文标题:docker 再认识2

        本文链接:https://www.haomeiwen.com/subject/yqukbctx.html