前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >docker 网络

docker 网络

原创
作者头像
CIKEY
发布2019-11-02 21:04:02
6010
发布2019-11-02 21:04:02
举报
文章被收录于专栏:进击的全栈

docker 原生网络

docker安装时会自动创建三个网络,我们可以用docker network ls指令查看:

docker 原生网络
docker 原生网络

1、none 网络

顾名思义,none网络就是没有网络,挂在这个网络下的容器出了lo没有其他网卡,该容器处于完全封闭的状态,无法跟外界的任何容易进行通信。对于一些对安全性有较高的要求且不需要联网的应用可以通过--network=none来指定使用none网络。

2、host 网络

连接到host网络的容器会共享docker主机的网络和端口,容器中的网络配置和主机一模一样,可以通过--network=host指定使用host网络。

host网络适合对网络传输效率要求较高的场景,但是这种网络模式需要考虑端口占用的问题,docker host上已经使用的端口就不能再用了。这一点限制了host模式的使用范围。

3、bridge 网络

bridge网络模式使用的更加广泛。如果创建容器时不指定networks,容器会默认以bridge模式启动。

使用docker network inspect bridge可以查看bridge网络的子网和网关地址等配置信息。

docker run -it --name=a busybox 查看以bridge模式启动的容器内的网络配置,其ip地址172.17.0.2是docker自动分配的(docker自动分配可以避免造成端口重复占用)。

4、user-defined 网络

我们可以根据业务需要创建自己的网络。docker提供了三种网络驱动:bridge、overlay、macvlan。后两种主要是用来创建跨主机的网络,后面再研究。我们可以用bridge驱动创建类似原生的bridge网络。

例如: docker network create --driver bridge my_net

可以看出我们已经成功创建了一个网桥,可以查看下它的网络配置

172.19.0.0/16是docker自动分配的网段,我们也可以自行指定ip网段,用--subnet和--gateway参数

例如: docker network create --subnet 172.22.16.0/24 --gateway 172.22.16.1 my_net2

我们可以启动一个挂在自定义网络上的容器 docker run -it --network=my_net2 --name=b busybox

该容器的ip地址依然是docker自动从subnet中分配的,我们也可以用--ip指定容器的静态ip。但是需要注意的是只有创建时指定了subnet的网络才能指定静态ip。

docker run -it --network=my_net2 --ip 172.22.16.8 --name=c busybox

我们现在有三个容器a,b,c,其中a容器挂在原生的bridge网络上,bc同挂在my_net2上,那么bc容器可以相互通信, 但是不能和a容器进行通信,我们用ping命令进行查看:

那我们有没有办法让bc也能和a容器进行通信呢?只要为a容器添加一块my_net2的网卡就行啦,通过docker network connect my_net2 cc056c2d8c9e 实现。

上图可以看出a容器有两个网卡了,bridge和my_net2,现在它就可以和bc容器进行通信了。

结论:两个容器要能通信,必须要有同属于一个网络的网卡。这样就可以通过ip进行交互。

容器间通信

容器中有三种通信方式:ip通信、docker DNS Server、joined容器。

1、ip通信

上述例子就是根据ip通信,但是通常情况下容器的ip地址为docker自动分配,要指定ip地址进行访问会比较麻烦,这种情况可以通过docker自带的DNS服务解决。

2、Docker DNS Server

例如 docker run -it --network=my_net2 --name=busybox_bridge busybox 启动的容器,可以在b容器进行ping

3、joined 容器

joined容器可以使多个容器共享同一个网络栈,共享网络配置和网卡。这些joined容器之间可以直接通过127.0.0.1进行通信。

例如创建一个和busybox_bridge容器共享的容器busybox_bridge_2:

docker run -d -it --network=container:busybox_bridge --name=busybox_bridge_2 busybox

busybox_bridge_2 和 busybox_bridge 容器的网络配置一毛一样。那么这两个容器之间可以用127.0.0.1访问彼此的服务。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • docker 原生网络
    • 1、none 网络
      • 2、host 网络
        • 3、bridge 网络
          • 4、user-defined 网络
          • 容器间通信
            • 1、ip通信
              • 2、Docker DNS Server
                • 3、joined 容器
                相关产品与服务
                容器镜像服务
                容器镜像服务(Tencent Container Registry,TCR)为您提供安全独享、高性能的容器镜像托管分发服务。您可同时在全球多个地域创建独享实例,以实现容器镜像的就近拉取,降低拉取时间,节约带宽成本。TCR 提供细颗粒度的权限管理及访问控制,保障您的数据安全。
                领券
                问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档