Docker Networking

文章目录

  • Container Networking
  • Network Drivers
      • bridge
      • host
      • overlay
      • 自定义网桥的优点

Container Networking

Container Networking是指容器相互连接和通信的能力,或者与非docker工作负载进行通信的能力。

默认创建容器是不会对外暴露任何端口的,除非使用-p选项指定,直接默认发布端口是不安全,相当于所有主机都可以访问。所以如果需要使容器互相通信,正常不需要发布容器的端口。而是通过将容器连接到相同的网络(通常是桥接网络),可以实现容器间通信。

  • IP和HostName:默认情况下,容器从连接的Docker network获取IP地址。容器从network的IP子网中接收IP地址,Docker守护进程为容器执行动态子网划分和IP地址分配。每个网络也有一个默认的子网掩码和网关。容器hostname默认为容器id

  • DNS:默认,容器继承宿主机的DNS解析,定义在/etc/resolv.conf。(/etc/hosts没有继承)

Network Drivers

  • bridge:默认的网络驱动。当应用程序需要与同一主机上的其他容器通信的容器中运行时,通常使用桥接网络。
  • host:取消容器和Docker主机之间的网络隔离,直接使用主机的网络。
  • overlay:用于将多个Docker守护进程连接在一起,并使Swarm服务和容器能够跨节点通信。
  • ipvlan:IPvlan网络允许用户完全控制IPv4和IPv6寻址。
  • macvlan:Macvlan网络允许您为容器分配MAC地址,使其在网络上显示为物理设备。Docker守护进程根据容器的MAC地址将流量路由到容器。当处理期望直接连接到物理网络而不是通过Docker主机的网络堆栈路由的遗留应用程序时,使用macvlan驱动程序有时是最佳选择
  • none:将容器与主机和其他容器完全隔离
  • 网络插件:可以使用第三方的网络插件

bridge

bridge网络是一种Link Layer device,用于转发网段的流量。它可以是运行在主机内核中的硬件设备或软件设备。
桥接网络适用于运行在同一Docker守护进程主机上的容器。它允许连接到同一桥接网络的容器进行通信,同时提供与未连接到该桥接网络的容器的隔离
启动docker时,会创建一个默认的桥接网络,新的容器会默认连接到它。

#创建网络
docker network create my-net

#删除网络
docker network rm my-net

#启动一个容器并加入my-net网络
docker create --name my-nginx \
  --network my-net \
  --publish 8080:80 \
  nginx:latest

 #将运行的容器my-nginx加入my-net网络
 docker network connect my-net my-nginx
 #将运行的容器my-nginx断开my-net网络
 docker network disconnect my-net my-nginx

host

容器共享主机的网络命名空间,并且容器不会获得自己的ip地址分配。

overlay

overlay 网络驱动会在多个docker进程主机创建一个分布式网络

当初始化swarm服务或将docker主机加入到现有服务时,每台docker主机上会创建两个新的网络:

  • 叫做ingress的overlay网络:处理与集群相关的控制和数据流量。创建swarm服务时没有连接到自定义的overlay网络,默认会连接到ingress网络
  • 叫做docker_gwbridge的bridge网络:用于将本机的docker进程连接到swarm服务中的其他进程

docker守护进程使用overlay网络防火墙设置需要为参与overlay网络的每个Docker主机的流量打开以下端口:

  • TCP 2377端口:集群管理
  • TCP/UDP 7946:节点间通信
  • UDP 4789:overlay网络流量
    在创建overlay网络之前,需要使用docker swarm init初始化docker守护进程(作为swarm manager)或使用docker swarm join加入现有的swarm服务。这两种方式都会创建默认的ingress overlay网络,即使不使用swarm服务也需要这样做。
 #创建overlay网络
 docker network create -d overlay my-overlay
 #--attachable可以让swarm服务和独立容器的overlay网络与其他docker主机上的容器通信
 docker network create -d overlay --attachable my-attachable-overlay

自定义网桥的优点

  1. 自定义桥接在容器之间提供自动DNS解析:
    容器在默认桥接网络只能互访IP地址,除非使用–link选项。自定义桥接网络,容器可以互相解析容器名。

  2. 自定义桥接网络会更安全:所有容器默认都会连接到默认的桥接网络,这是有隐患的。使用自定义网络会提供一个限定的范围。

  3. 可以动态地从用户定义的网络中附加和分离容器:在容器的生命周期内,可以动态地将其与用户定义的网络连接起来或断开连接。要从默认桥接网络中删除容器,需要停止容器并使用不同的网络选项重新创建它。

  4. 用户定义的网桥网络是使用docker network create创建和配置的。如果不同的应用程序组具有不同的网络需求,则可以在创建每个用户定义网桥时单独配置它。

你可能感兴趣的:(Docker,docker,容器)