Docker容器网络

6个命名空间
User、Mount、Pid、UTS、Net、IPC

四种网络模式

  • host模式:使用–network=host指定
    • 相当于Vmware中的桥接模式,与宿主机在同一个网络中,但没有独立IP地址。
    • 容器将不会获得一个独立的Network Namespace,而是和宿主机共用一个Network Namespace。
    • 容器将不会虚拟出自己的网卡,配置自己的IP等,而是使用宿主机的IP和端口。
  • bridge模式:使用–net=bridge指定
    • 相当于Vmware中的Nat模式,容器使用独立network Namespace,并连接到docker0虚拟网卡(默认模式)。
    • 通过docker0网桥以及Iptables nat表配置与宿主机通信。
    • Bridge模式是Docker默认的网络设置,此模式会为每一个容器分配Network Namespace、设置IP等,并将一个主机上的Docker容器连接到一个虚拟网桥上。
  • none模式:–net=none指定
    • 容器将不会虚拟出自己的网卡,配置自己的IP等,而是使用宿主机的IP和端口。该模式关闭了容器的网络功能。
    • 在以下两种情况下是有用的:容器并不需要网络(例如只需要写磁盘卷的批处理任务),overlay。
  • container模式:–net=container:NAME_or_ID指定
    • 指定新创建的容器和已经存在的一个容器共享一个Network Namespace,而不是和宿主机共享。
    • 新创建的容器不会创建自己的网卡,配置自己的IP,而是和一个指定的容器共享IP、端口范围等。
    • 两个容器除了网络方面,其他的如文件系统、进程列表等还是隔离的。两个容器的进程可以通过lo网卡设备通信。
1
2
3
4
# 查看网络模式详情
docker network inspect bridge
# 查看容器详情
docker container inspect myMysql
Bridged containers
  • –hostname HOSTNAME选项为容器指定主机名。
    docker run --rm --net bridge --hostname bbox.test.com busybox:latest nslookup bbox.test.com
  • –dns DNS_SERVER_IP 为容器指定所使用的dns服务器地址。
    docker run --rm --dns 172.16.0.1 busybox:latest nslookup docker.com
  • –add-host HOSTNAME:IP 为容器指定本地主机名解析项。
    docker run --rm --dns 172.16.0.1 --add-host "docker.com:172.16.0.10" busybox:latest nslookup docker.com
Docker端口暴露
  • -p
    • 将指定容器端口映射至主机所有地址的一个动态端口
  • -p :
    • 将容器端口映射至指定的主机端口
  • -p ::
    • 将指定的容器端口映射至主机指定的动态端口
  • -p ::
    • 将指定的容器端口映射至主机指定的端口
  • -P 大写的P,暴露所有端口(指暴露镜像里的全部端口)
docker守护进程
1
2
3
4
5
6
# 远程操作一个容器
dockerd守护进程的C/S,其默认仅监听Unix socket格式地址,/var/run/docker.sock;如果使用TCP套接字,
/etc/docker/daemon.json:
"hosts": ["tcp://0.0.0.0:2375","unix:///var/run/docker.sock"]
也可向dockerd直接传递"-H|--host"选项。
docker -H 172.17.0.3:2375 image ls
自定义docker0
1
2
3
4
5
6
7
8
9
10
11
12
13
# docker0桥网络属性信息:/etc/docker/daemon.json
{
"bip": "192.168.1.1/24",
"fixed-cidr": "10.20.0.0/16",
"fixed-cidr-v6": "2001:db8::/64",
"mut": 1500,
"default-gateway": "10.20.1.1",
"default-gateway-v6": "2001:db8:abcd::89",
"dns": ["10.20.1.2","10.20.1.3"]
}
# 核心选项为bip,即bridge ip之意,用于指定docker0桥自身的IP地址;其他地址可通过此地址计算得出。
# 创建自定义网络
docker network create -d bridge --subnet "172.18.0.0/16" --gateway "172.18.0.1" mybr0
-------------本文结束感谢您的阅读-------------
原创技术分享,感谢您的支持。