0
点赞
收藏
分享

微信扫一扫

Docker学习笔记10:网络

婉殇成长笔记 03-20 10:15 阅读 3

Docker网络可以:

  1. 实现容器间的互联和通信以及端口映射
  2. 容器IP变动时,可以通过服务名直接网络通信而不受影响。

常用命令


docker network --help

Usage:  docker network COMMAND

Manage networks

Commands:
  connect     Connect a container to a network
  create      Create a network
  disconnect  Disconnect a container from a network
  inspect     Display detailed information on one or more networks
  ls          List networks
  prune       Remove all unused networks

示例

docker network create -d bridge qgg_br
docker network ls
docker network rm qgg_bt

Docker学习笔记10:网络_Docker


网络模式

网络模式

简介


bridge

为每一个容器分配、设置IP等,并将容器连接到docker0

虚拟网桥,默认为该模式

--network bridge

host

容器不会虚拟出自己的网卡,配置自己的IP等

使用宿主机的IP和端口

--network host

none

容器有独立的network namespace,但没有对其进行任何网络设置,如分配veth pair 网桥链接,IP等

--network none

container

新创建的容器不会创建自己的网卡和配置自己的IP,而是和指定的容器共享IP,端口范围。

如果指定容器停止或销毁,则网络配置消失。

--network container:NAME

--network container:ID 


bridge

docker0

Docker服务默认会创建一个docker0网桥(其上有一个docker0内部接口),该桥接网络的名称为docker0,他在内核层联通了其他的物理或虚拟网卡,这就将所有容器和本地主机都放到同一个物理网络。

Docker默认指定了docker0接口的IP和子网掩码,让主机和容器之间可以通过网桥相互通信。

Docker学习笔记10:网络_Docker_02

Docker使用Linux网桥,在宿主机上虚拟一个Docker容器网桥(docker0),Docker启动一个容器会根据Docker网桥的网段分配给容器一个IP地址称之为Container-IP,同时Docker网桥是每个容器的默认网关。

同一宿主机内的容器都接入同一个网桥,这样容器直接通过容器的Container-IP直接通信。

docker run时,如果没有指定network,则默认为bridge,使用的就是docker0。

整个宿主机的网桥模式都是docker0,类似交换机有N个接口,每个接口都是veth,在本地主机和容器内分别穿件一个虚拟接口,并且让它们彼此联通(这样的一对接口叫做veth pair)

每个容器实例内部也有一块网卡,每个接口叫eth0

docker0上的每一个veth匹配某个容器实例内部的eth0,两联配对,组成veth pair

在宿主机上使用ifconfig命令可以看到多个veth网卡设备,与使用bridge的容器相对应。

演示:

启动一个容器t1,在宿主机上可以看到一个新的网卡vethc9944c5@if167

进入容器,可以看到对应的网卡eth0@if168

Docker学习笔记10:网络_Docker_03


host

直接使用宿主机的IP与外界通信,不再需要NAT转换。容器不会获得独立的network namespace,而是和宿主机共用一个Network namespace。容器不会虚拟出自己的网卡、

Docker学习笔记10:网络_网络模式_04

在使用host模式的时候,docker run 的-p参数就变得没有意义。

同样的,如果host端口被占用,容器也会启动失败。

例如,使用上文的tomcat镜像,使用host模式,启动一个容器后,宿主机的8080端口被占用,如果此时依旧使用host模式启动另一个容器使用8080,则会失败

启动第一个容器

docker run -d --network host --name th02  billygoo/tomcat8-jdk8

在宿主机器查看端口使用

Docker学习笔记10:网络_Docker_05

在启动一个tomcat

docker run -d --network host --name th03  billygoo/tomcat8-jdk8

检查此容器日志

提示端口被占用

docker logs th03

Docker学习笔记10:网络_网络模式_06


none

在none模式下,不为容器进行任何网络配置。

禁用网络功能,容器内只有lo标识

示例启动一个使用none模式的容器,启动后进入容器查看

Docker学习笔记10:网络_网络模式_07


container

  新建的容器和已经存在的一个容器共享一个网络IP配置而不是和宿主机共享。新创建的容器不会创建自己的网卡,不会配置自己IP,而是和一个指定的容器共享IP,端口范围。

Docker学习笔记10:网络_Docker_08

示例

启动两个容器,其中一个使用container模式网络。

docker run -it --name al1 alpine /bin/sh

docker run -it --network container:al1 alpine /bin/sh

在两个容器内指定ip addr。可以看到网络配置完全相同

al1

Docker学习笔记10:网络_网络模式_09

al2

Docker学习笔记10:网络_Docker_10

此时关闭al1,再观察al2的网络信息,仅剩下lo

Docker学习笔记10:网络_Docker_11

举报

相关推荐

0 条评论