docker网络

docker0网络

docker启动后会自动创建名为docker0的虚拟网桥,功能类似于局域网中的交换机。同时,docker会分配一个本地未使用的虚拟网段,比如172.17.0.0/16,并将第一个ip172.17.0.1作为虚拟网桥的ip。

rc@rc-virtual-machine:~$ ip addr
3: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default 
    link/ether 02:42:c6:e5:c9:f0 brd ff:ff:ff:ff:ff:ff
    inet 172.17.0.1/16 brd 172.17.255.255 scope global docker0
       valid_lft forever preferred_lft forever

每当创建一个容器的时候,默认使用docker0网络,这时会为其创建一对veth pair接口,用于连接容器和网桥,类似于物理机连接到交换机的网口一样,于是就可以互联互通了。

自定义网络

一般用docker-compose部署多个容器的时候,会创建自定义的网络,默认也是网桥类型,在这个网络里面还有dns的功能,可以根据容器名找到对方。下面的docker-compose部署文件就会创建一个默认的自定义网络,redis-web通过域名找到redis-app

version: "3.4"
services:
  redis-web:
    image: redis-web:1.0
    container_name: redis-web
    environment:
      REDIS_HOST: redis-app
    ports:
      - 8001:8001
    depends_on:
      - redis-app
  redis-app:
    image: redis:latest
    container_name: redis-app

新建的容器会连接到tmp_default网桥上,这里命名是根据当前所在文件夹的名字命名的,所以最好还是手动指定网络名词,避免冲突。

rc@rc-virtual-machine:~/tmp$ docker network ls
NETWORK ID     NAME          DRIVER    SCOPE
5e2e134bc1e5   bridge        bridge    local
1e01eb87e5dc   host          host      local
2c5d99ecc6a1   none          null      local
fc658398071f   tmp_default   bridge    local

参考资料

原文地址:https://www.cnblogs.com/HachikoT/p/15646088.html