一)补充说明

Docker的网络子系统可通过driver扩展。默认已有几种driver提供Docker联网服务,如下:

bridge   //网桥,是docker的默认driver

host

none

overlay

macvlan

种driver针对不同的使用场景,具体可参见官网:https://docs.docker.com/network/#network-drivers ,这里摘录如下:

  • User-defined bridge networks are best when you need multiple containers to communicate on the same Docker host.

  • Host networks are best when the network stack should not be isolated from the Docker host, but you want other aspects of the container to be isolated.

  • Overlay networks are best when you need containers running on different Docker hosts to communicate, or when multiple applications work together using swarm services.

  • Macvlan networks are best when you are migrating from a VM setup or need your containers to look like physical hosts on your network, each with a unique MAC address.

  • Third-party network plugins allow you to integrate Docker with specialized network stacks.


二)bridge配置

根据官网说明,bridge的使用场景是同一宿主机上的多个container互联。由于bridge是docker的默认driver,因此当未特别指定联网模式时,启动容器将使用默认的bridge。但默认的bridge有诸多限制(具体可参见官方说明),因此实际情况是常自定义bridge。

自定义的bridge有以下好处:

  1. 好的隔离性和互操作性:连到同一自定义的bridge的各个容器默认相互之间曝露所有端口,并且不对外部曝露

  2. 自动提供容器之间的DNS解析服务:连到同一自定义的bridge的各个容器不用做特殊DNS配置,可直接通过hostname访问

  3. 运行中容器联网配置:可对运行中的容器配置自定义或取消配置自定义bridge

  4. bridge之间相互独立:用户可创建N多个bridge,且连接于不同的bridge之上的容器相互独立

A. 创建自定义bridge

$ docker network create [-d bridge] my-net   //-d指定联网模式,缺省时默认为bridge; 可以docker network create --help查看选项参数

B. 创建新的容器

$ docker create --name my-nginx \
  --network my-net \
  --publish 8080:80 \
  nginx:latest         //以--network指明连接哪个bridge; --publish可以用-p替代

C. 将运行中的容器连接至自定义的bridge

$ docker network connect my-net my-nginx

D. 将运行中的容器从自定义bridge上移除

$ docker network disconnect my-net my-nginx

注:资料参考https://docs.docker.com/network/bridge/ 

三)根据自定义的bridge配置静态IP

A. 创建自定义网络(bridge)

$ docker network create --subnet=172.18.0.0/16 my-net    //添加--subnet参数

B. 为容器配置静态IP

$ docker run -it --network my-net --ip 172.18.0.250 imageID bash   //添加--ip参数

C. 为容器配置特定hostname

$ docker run -it --network my-net --ip 172.18.0.250 -h hostname imageID bash   //添加-h参数,或--hostname=Name

注:资料参考https://blog.csdn.net/gobitan/article/details/51104362