05-Docker容器网络

在说docker network之前,先说一个很重要的概念,namespace,下面详细描述网络命名空间:

namespace

#ip netns help ------关于网络命名空间的操作
在这里插入图片描述
#ip netns add n1 -----------创建网络命名空间
#ip netns list -----------列出当前网络命名空间
在这里插入图片描述
#ip netns exec n1 ifconfig -a ---------进入到n1这个命名空间中执行命令
在这里插入图片描述
下面对namespace举例说明:

  • 1.添加一对虚拟网卡(type为veth,成对出现):
    #ip link add name veth1.1 type veth peer name veth1.2
    在这里插入图片描述
    可以发现两个虚拟网卡添加成功。

  • 2.将其中一块虚拟网卡放在命名空间n1:
    #ip link set dev veth1.2 netns n1 进入n1命名空间内,可以看到veth1.2这个虚拟网卡,已经放在命名空间内;
    在这里插入图片描述

  • 3.可以给命名空间内虚拟网卡改名字:
    #ip netns exec n1 ip link set dev veth1.2 name eth0
    在这里插入图片描述

  • 4.将该网卡激活 #ifconfig veth1.1 10.1.0.1/24 up

    在这里插入图片描述
    #ip netns exec n1 ifconfig eth0 10.1.0.2/24 up 在这里插入图片描述

  • 5.验证宿主机和n1命名空间内是否可以通信:
    #ping 10.1.0.2 在这里插入图片描述

  • 6.将宿主机这个veth1.1这个虚拟网卡放在n2这个命名空间:
    #ip link set dev veth1.1 netns n2 注意:移过去后,默认不被激活,将他激活
    #ip netns exec n2 ifconfig veth1.1 10.1.0.1/24 up

  • 7.在n2命名空间ping n1 地址:
    #ip netns exec n2 ping 10.1.0.2 在这里插入图片描述

容器网络

回顾下,之前讲过容器4重网络容器类型:closed container,bridge container,joined container,open container;下面单个详细描述这几种类型:

  • 1.closed container: 在这里插入图片描述
    不能与外部容器通信,是个封闭容器,–rm意思是退出后删除容器。
  • 2.bridge container 在这里插入图片描述
    -h 后面加主机名,代表容器启动时给容器注入主机名。 也可以加入:–dns 加dns地址代表可以在容器启动时,注入dns地址。 具体参数很多,可以通过docker run --help查询。
  • 3.open container Docker0为NAT桥, 在这里插入图片描述
  • 4.joined container 联盟式容器:User,Pid,Mount,各命名空间有自己的,UTS,IPC,Net,为共享。 先启动第一个容器:
    #docker run --name b1 -it --rm busybox 在这里插入图片描述
    在启动一个容器:
    #docker run --name b2 --network container:b1 -it --rm busybox
    在这里插入图片描述
    注:–network container:b1:表示b2这个容器要共享容器b1的网络命令空间
    可以看到b1和b2ip地址都一样
    在b1容器下操作:
    #mkdir /tmp/smallboy
    在这里插入图片描述
    在b2容器上面查看,发现没有:
    在这里插入图片描述
    说明Mount是隔离的
    验证网络共享:
    在b1操作:
    #echo “The small boy likes writing codes” > /tmp/index.html
    启动http服务:
    在这里插入图片描述
    在b2上面访问:
    #wget -O - -q 127.0.0.1
    在这里插入图片描述
    发现是可以访问到,说明net名称空间确实共享了。类似于一台主机上面运行两个进程。
    想让外部直接访问容器,把该容器的network设置为host模式,外部直接就可以访问容器了。

修改docker0默认ip地址

#systemctl stop docker -----停掉docker服务
#vim /etc/docker/daemon.json -------修改配置,定义网络ip地址
{
“insecure-registries”: [ “10.0.38.77”],
“bip”: “10.0.0.1/16” --------增加:bip为bridge ip 为docker0的ip 地址
}
#systemctl daemon-reload
#systemctl start docker

想让其他主机连入本地docker机器,配置如下

#vim /usr/lib/systemd/system/docker.service
在ExecStart后面添加 -H tcp://0.0.0.0:2375
#systemctl daemon-reload
#systemctl restart docker
从其他主机执行命令:
#docker -H <对方主机IP> :2375 ps -----查看对方主机运行容器

创建自定义网络类型:

#docker network create -d bridge --subnet “172.26.0.0/16” --gateway “172.26.0.1” mybridge
在这里插入图片描述
用自定义网络创建容器:
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_38753143/article/details/99294505
今日推荐