docker网络设置(网桥)

一、docker网络模式

基于docker run创建容器时,可以使用–net选项指定容器的网络模式,docker有4种网络模式。

网络模式设置命令详细说明应用场景
host模式- -net=hosthost模式,容器不会获得一个独立的network namespace,而是与宿主机共用一个network namespace,容器不会虚拟出自己的网卡、配置自己的ip等,而是使用宿主机的ip和端口。当网络不应与Docker主机隔离,但又希望容器的其他方面隔离时,主机网络是最佳选择。
container模式- -net=containercontainer模式,指定新创建的容器和已经存在的一个容器共享一个network namespace,而不是和宿主机共享,新创建的容器不会创建自己的网卡、配置自己的ip,而是和指定的容器共享ip、端口等。两个容器除网络方面相同外,其他的如文件系统、进程列表等还是隔离的。
none模式- -net=nonenone模式,容器拥有自己的network namespace,但是并未对容器进行任何网络配置,需要手工为容器添加网卡、配置ip等。可以使用pipework工具为容器指定ip等信息。第三方网络插件使您可以将docker与专用网络集成。
bridge模式- -net=bridgebridge模式是容器默认的网络模式,该模式会为每个容器分配独立的network namespace,设置ip、路由等信息,默认会将容器连接到一个虚拟网桥交换机docker0上,容器之间组成一个局域网,可以相互访问。当您需要多个容器在同一docker主机上进行通信时,最好使用用户定义的网桥网络。用户定义的网桥网络的容器会自动将所有端口彼此公开,而不会向外界公开任何端口。默认网桥网络上运行相同的应用程序堆栈,则需要使用-p或–publish 标志分别打开Web端口和数据库端口。这意味着docker主机需要通过其他方式阻止对数据库端口的访问。
macvlan模式Macvlan网络允许您将MAC地址分配给容器,使其在网络上显示为物理设备。Docker守护程序通过其MAC地址将流量路由到容器。从VM设置迁移或需要容器看起来像网络上的物理主机(每个主机都有唯一的MAC地址)时,Macvlan网络是最好的。
overlay模式覆盖网络覆盖网络将多个docker守护程序连接在一起,并使群集服务能够相互通信。还可以使用覆盖网络来促进群集服务和独立容器之间或不同Docker守护程序上的两个独立容器之间的通信。当您需要在不同Docker主机上运行的容器进行通信时,或者当多个应用程序使用集群服务一起工作时,覆盖网络是最好的。

docker网络官方文档:https://docs.docker.com/network/

二、容器网桥bridge创建过程

docker容器默认使用docker桥接网络。ip地址会自动分配,每个容器都是连接到网桥上,如果想让容器与宿主机同一网段的其他宿主机之间能访问,需在启动的时候将docker容器的某个端口映射到该宿主机的端口,其他宿主机连接宿主机的Ip和端口即可访问容器。

1、启动容器,首先会在宿主机上创建一对虚拟网卡设备,组成一条数据通道,连接两个网络设备。

2、docker将虚拟网卡设备一端放到新建的容器内,命名为eth0,另一端放在宿主机,以veth***类似的名字命名,并将此设备加入到docker0网桥中。

3、从docker0子网中分配一个ip给容器使用,并设置docker0的ip为容器的默认网关。

4、此时,容器与宿主机可以互相通信,连接同一网桥的容器也可相互通信,同时容器也可以访问外网。但是其他宿主机不能访问docker容器的ip,需要通过NAT将容器ip的port映射为宿主机的ip和port,方可访问。

三、下载docker镜像(以centos为例),创建centos容器,查看运行容器的IP

1、下载tomcat镜像,默认会下载最新版本的centos镜像。

docker pull centos

2、若要使用其它版本的centos镜像(例:centos:centos7.7.1908),可以到官网:https://hub.docker.com,搜索centos,进入centos页面,找到想要下载的版本,复制加版本号的命令进行下载。

docker pull centos:centos7.7.1908

在这里插入图片描述
在这里插入图片描述

3、下载完毕后,查看下载的镜像。

 docker  images

4、创建容器mycentos。

docker run  -itd --name mycentos   centos:centos7.7.1908    /bin/bash

- - name : 是给容器起一个别名,方便使用,没有–name选项时docker默认会给容器一个随机字符串的名称。/bin/bash启动一个一直停留在后台运行的容器

5、在命令行输入docker ps,可以看到正在运行的容器。

 docker ps 

在这里插入图片描述

6、进入容器mycentos的shell终端。

docker exec -it mycentos   /bin/bash

7、查看运行中的mycentos容器的IP地址。

 cat    /etc/hosts

在这里插入图片描述

四、docker命令创建用户定义的网桥网络

1、创建用户定义的网桥网络my-net。

docker network  create --driver bridge my-net

2、列出docker的网络。

docker network ls

在这里插入图片描述
3、查看my-net网桥网络。

docker network inspect my-net

在这里插入图片描述
4、配置Linux内核以允许IP转发(否则创建容器时报错“WARNING: IPv4 forwarding is disabled. Networking will not work.”)。

sysctl net.ipv4.conf.all.forwarding=1

5、创建4个容器。- -network my-net指定容器在docker run命令期间连接到此网络。(cent1、cent2连接到my-net,cent3连接到默认bridge,cent4连接到my-net和默认bridge)

docker run -dit --name cent1 --network my-net centos:centos7.7.1908 
docker run -dit --name cent2 --network my-net centos:centos7.7.1908 
docker run -dit --name cent3 centos:centos7.7.1908  
docker run -dit --name cent4 --network my-net centos:centos7.7.1908
docker network  connect  bridge  cent4

6、查看容器运行状态。

 docker container ls
 或
 docker ps

在这里插入图片描述

7、检查my-net和bridge桥接网络连接容器。容器cent1和cent2连接my-net,容器cent3连接默认bridge。

docker network inspect my-net
docker network inspect bridge

在这里插入图片描述
在这里插入图片描述

8、容器不仅可以通过IP地址进行通信,还可以将容器名称解析为IP地址,此功能称为自动服务发现。

网络连接测试结果:cent4同时连接在默认bridge和my-cat上,cent1、cent2都连接在my-cat上所以cent1、cent2、cent4互相连通;cent3连接在默认bridge上所以cent3、cent4互相连通。cent3和cent1、cent2连接在不同网桥,所以互相不通。

cent1与cent2、cent3、cent4连接测试过程(cent1与cent2、cent4连通,与cent3不通)

docker exec -it cent1 /bin/bash
ping -c 2 cent2
ping -c 2 172.18.0.3
ping -c 2 cent4
ping -c 2 172.18.0.4
ping -c 2 cent3
ping -c 2 172.17.0.2

在这里插入图片描述

cent2与cent1、cent3、cent4连接测试过程(cent2与cent1、cent4连通,与cent3不通)

docker exec -it cent2 /bin/bash
ping -c 2 cent1
ping -c 2 172.18.0.2
ping -c 2 cent4
ping -c 2 172.18.0.4
ping -c 2 cent3
ping -c 2 172.17.0.2

在这里插入图片描述
cent3与cent1、cent2、cent4连接测试过程(cent3与cent1、cent2不通,与cent4连通(需指定IP地址bridge网桥))

docker exec -it cent3 /bin/bash
ping -c 2 cent1
ping -c 2 172.18.0.2
ping -c 2 cent2
ping -c 2 172.18.0.3
ping -c 2 cent4
ping -c 2 172.18.0.4
ping -c 2 172.17.0.3

在这里插入图片描述

cent4与cent1、cent2、cent3连接测试过程(cent4与cent1、cent2、cent3(需使用IP地址bridge网桥)连通)

docker exec -it cent4 /bin/bash
ping -c 2 cent1
ping -c 2 172.18.0.2
ping -c 2 cent2
ping -c 2 172.18.0.3
ping -c 2 cent3
ping -c 2 172.17.0.2

在这里插入图片描述
9、测试容器是否可以连接到互联网百度。

ping  -c   2   www.baidu.com

在这里插入图片描述
10、停止并移除所有容器和my-net网络。

docker  container  stop  cent1  cent2  cent3  cent4
docker  container   rm   cent1  cent2  cent3  cent4
docker  network     rm   my-net

五、使用第三方插件创建用户自定义的网桥网络,设置容器固定的IP地址

1、安装网桥设备。

yum  install  -y   bridge-utils

2、编辑/etc/sysconfig/network-scripts/ifcfg-ens33,修改网卡配置如下图。

 vi /etc/sysconfig/network-scripts/ifcfg-ens33

增加内容

BRIDGE="br0"

注释内容

IPADDR="192.168.1.150"
PREFIX="24"
GATEWAY="192.168.1.1"
DNS1="8.8.8.8"

在这里插入图片描述

3、编辑桥接网卡配置文件/etc/sysconfig/network-scripts/ifcfg-br0,修改网卡配置内容如下。

vi   /etc/sysconfig/network-scripts/ifcfg-br0
TYPE=Bridge
BOOTPROTO=static
NAME=br0
DEVICE=br0
ONBOOT=yes
IPADDR=192.168.1.150
PREFIX=24
GATEWAY=192.168.1.1
DNS1=8.8.8.8

在这里插入图片描述

4、重启network服务。

systemctl   restart    network

5、查看docker桥接网卡。

 brctl show

在这里插入图片描述
6、创建容器staticcentos,并指定网络模式为none。

docker run  -itd  --net=none  --name staticcentos  centos:centos7.7.1908    /bin/bash

- -net=none,设置网络模式, - - name : 是给容器起一个别名,方便使用。/bin/bash启动一个一直停留在后台运行的容器

7、安装git工具,获取pipework可执行程序。

yum  install  -y  git
git clone https://github.com/jpetazzo/pipework
ls
pwd
cp /root/pipework/pipework  /usr/local/bin/

8、使用pipework工具设置容器staticcentos的IP地址。

pipework  br0  staticcentos  192.168.1.158/24@192.168.1.1

9、进入容器staticcentos的shell终端,此时使用:"cat /etc/hosts"命令无法看到设置的固定IP地址。

docker  exec   -it   staticcentos  /bin/bash
cat  /etc/hosts

在这里插入图片描述

10、yum安装net-tools工具,使用ifconfig命令即可查看设置的固定IP。

yum install -y net-tools
ifconfig

在这里插入图片描述
11、通过pipework指定的静态IP,当容器重启之后,静态IP会丢失,所以每次重新启动容器之后都需重新指定该固定IP。

pipework  br0  staticcentos  192.168.1.158/24@192.168.1.1
docker  exec  staticcentos   ifconfig

在这里插入图片描述

  • 9
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值