(四)docker=>网络篇

4.网络管理
端口映射:两种
a随机映射
参数 -P(大写)
1.默认随机映射:
docker run -d -P 镜像名称
2.指定主机随机映射
docker run -d -p [宿主机ip]::[容器端口] --name [容器名称][镜像名称]
b指定映射
-p 主机ip:主机端口:容器端口
1.指定端口映射
docker run -d -p [宿主机ip]:[宿主机端口]:[容器端口] --name [容器名字][镜像名称]
2.多端口映射
docker run -d -p [宿主机端口1]:[容器端口1] -p [宿主机端口2]:[容器端口2] --name [容器名称][镜像名称]
netstat -tnulp 查看当前宿主机开放了哪些端口
网络管理命令:
network +
ls 查看网络列表
create 创建一个网络
connect 将一个容器连接到一个网络
disconnect 将一个容器断开一个网络
inspect 显示详情
rm 删除一个或多个网络
网络模式:
bridge、host、container、none、overlay
定制bridge方法一:
1.创建网络
docker network create --driver [网络类型][网络名称]
docker network create --driver bridge bridge-test
还可自定义网络和网关
–gateway 网关
–subnet ip/子网
docker network create --driver bridge --gateway 172.99.0.1 --subnet 172.99.0.0/16 bridge-test
2.应用自定义网络启动容器
docker run --net=[网络名称] -itd --name=[容器名称][镜像名称]
docker run --net=bridge-test -itd nginx
3.容器断开网络
docker network disconnect [网络名][容器名]
docker network disconnect bridge-test
4.容器连接网络
docker network connect [网络名][容器名]
docker network connect bridge-test
定制bridge方法二:
方法一中创建的容器ip都是从docker0自动获取的,方法二来自定义一个br0网桥
网桥:根据设备的物理地址来划分网段,并传输数据的设备。docker0就是默认的网桥。
1、网桥的创建
安装网桥软件
sudo apt-get install bridge-utils -y
查看网卡
brctl show
bridge name bridge id STP enabled interfaces
网卡名称 网卡id STP启用 物理接口
创建网桥
sudo brctl addbr br0
给网桥设置网段
sudo ifconfig br0 192.168.99.1 netmask 255.255.255.0

2、docker服务使用新网桥
docker配置网桥:
配置docker文件
sudo vim /etc/default/docker
最末尾添加
DOCKER_OPTS="-b=br0"
systemctl使用docker文件:
sudo mkdir -p /etc/systemd/system/docker.service.d
sudo vim /etc/systemd/system/docker.service.d/Using_Environment_File.conf
写入内容:
[Service]
EnvironmentFile=-/etc/default/docker
ExecStart=
ExecStart=/usr/bin/dockerd -H fd:// $DOCKER_OPTS
重载服务配置文件
systemctl daemon-reload
重启docker
systemctl restart docker
重启后效果:
ps aux |grep docker
root 45737 4.3 1.2 527600 50572 ? Ssl 09:32 0:00 /usr/bin/dockerd -H fd:// -b=br0
3、测试
docker run -itd --name test nginx
docker inspect test
查看容器test 是否使用了bro的网络
dcoker network ls
docker network inspect bridge
host模型特点:
host模型比较适合于,一台宿主机跑一个固定的容器,比较稳定,或者一个宿主机跑多个占用不同端口的应用的场景,他的网络性能是很高的。
​host模型启动的容器不会有任何地址,他其实是使用了宿主机的所有信息
none模型特点:
none网络模式,是一种自由度非常高的网络模式,可以最大化的自定义想要的网络
docker run --net=none -itd --name [容器名称] 镜像名称
docker run -itd --name test --net=none nginx
test容器没有网络信息
none案例:
1、网络环境部署
1.1 网卡环境部署
1.1.1 网桥软件部署
sudo apt-get install bridge-utils -y

brctl show
bridge  name    bridge id           STP enabled interfaces
docker0         8000.0242a6e980f2   no      

1.1.2 桥接网卡配置
编辑网卡信息编辑Ubuntu的网卡信息文件
对源文件进行备份
sudo cp /etc/network/interfaces /etc/network/interfaces-old
sudo vim /etc/network/interfaces

与源文件内容进行1行的空行
auto br0
iface br0 inet static
#自己的ip
address 192.168.111.11
netmask 255.255.255.0
gateway 192.168.111.2
dns-nameservers 192.168.111.2
#网卡名称
bridge_ports ens33
重启
service networking restart

1.2 docker服务配置
1.2.1 配置docker文件
sudo vim /etc/default/docker
最末尾添加
DOCKER_OPTS="-b=br0"

1.2.2  systemctl使用docker文件
创建服务依赖文件
sudo mkdir -p /etc/systemd/system/docker.service.d
sudo vim /etc/systemd/system/docker.service.d/Using_Environment_File.conf
内容如下:

[Service]
EnvironmentFile=-/etc/default/docker
ExecStart=
ExecStart=/usr/bin/dockerd -H fd:// $DOCKER_OPTS
重载服务配置文件
systemctl daemon-reload
1.2.3 重启docker 第一次配置的时候需要重启linux虚拟机:reboot
systemctl restart docker

注意查看网卡信息
brctl show
bridge name bridge id STP enabled interfaces
br0 8000.000c2960060c no ens33
docker0 8000.02427c11f899 no

br0       Link encap:以太网  硬件地址 00:0c:29:60:06:0c  
     inet 地址:192.168.111.11  广播:192.168.111.255  掩码:255.255.255.0
     inet6 地址: fe80::20c:29ff:fe60:60c/64 Scope:Link
     UP BROADCAST RUNNING MULTICAST  MTU:1500  跃点数:1
 
ens33     Link encap:以太网  硬件地址 00:0c:29:60:06:0c  
  UP BROADCAST RUNNING MULTICAST  MTU:1500  跃点数:1

广播运行多播

验证dns解析是否正常
ping www.baidu.com
网络可能会没有dns解析所以我们需要进行dns的配置

16.04:
sudo vim/etc/resolvconf/resolv.conf.d/base
18.04:
sudo vim/etc/resolv.conf

增加内容
nameserver 223.5.5.5
nameserver 114.114.114.114
nameserver 8.8.8.8

注意如果重启后网络并未生效则
sudo /etc/init.d/networking restart

1.3 容器创建
基于ubuntu镜像创建一个容器,网络模式使用none ,启动容器时,挂载本地Linux系统的etc/apt文件
docker run -itd --net=none --name ubuntu-test1 -v /etc/apt/:/home/etc ubuntu /bin/bash
5f7b976ddfdf60dbc08cb81569488b70da15bc183d7f21da7030c316cd6ec96b
docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
5f7b976ddfdf ubuntu “/bin/bash” 5 seconds ago Up 4 seconds ubuntu-test1

2、定制容器ip
2.1 pipwork软件部署
安装pipwork
方法1:
git clone https://github.com/jpetazzo/pipework
方法2:将软件直接拖入ubuntu虚拟机
直接解压安装包
unzip pipework-master.zip
#将文件拷贝到bin下
sudo cp pipework-master/pipework /usr/local/bin/

2.2 定制容器ip
sudo pipework br0 ubuntu-test1 192.168.111.129/24@192.168.111.2

2.3 测试效果
进入容器查看ip地址信息
docker exec -it ubuntu-test1 /bin/bash

删除容器下的sources.lis
rm /etc/apt/sources.list
将本地sources.list 复制过来
cp /home/etc/sources.list  /etc/apt/
进行软件源更新
apt-get update
安装ping命令
apt-get install inetutils-ping -y
安装ifconfig命令
apt-get install net-tools -y
宿主机ping命令测试
ping 192.168.111.11

跨主机容器通信:
主机信息:
主机1:ubuntu 18.04 192.168.111.14
主机2:ubuntu 16.04 192.168.111.15
均安装 bridge-utils软件
#1、ubuntu桥接网卡配置
#1.1 软件安装
apt-get install bridge-utils -y
#1.2 编辑网卡
:~$ sudo vim /etc/network/interfaces
#与文件源内容进行1行的空行
#主机1
auto br0
iface br0 inet static
address 192.168.111.14
netmask 255.255.255.0
gateway 192.168.111.2
dns-nameservers 192.168.111.2
bridge_ports ens33
#主机2
auto br0
iface br0 inet static
address 192.168.111.15
netmask 255.255.255.0
gateway 192.168.111.2
dns-nameservers 192.168.111.2
bridge_ports ens33
#2、docker配置网桥
#2.1 配置docker文件
#修改docker的守护进程文件
vim /etc/default/docker
#末尾添加:
#主机1
DOCKER_OPTS="-b=br0 --fixed-cidr=192.168.111.99/26"
#主机2
DOCKER_OPTS="-b=br0 --fixed-cidr=192.168.111.170/26"
#注释:
#-b 用来指定容器连接的网桥名字
#–fixed-cidr用来限定为容器分配的IP地址范围
#192.168.111.99/26地址范围:192.168.111.64~192.168.111.127
#192.168.111.170/26地址范围:192.168.111.128~192.168.111.191
#网段的计算可以参考网址:http://help.bitscn.com/ip/
#2.2 systemctl使用docker文件
创建服务依赖文件
:~$ sudo mkdir -p /etc/systemd/system/docker.service.d
:~$ sudo vim /etc/systemd/system/docker.service.d/Using_Environment_File.conf
内容如下:
[Service]
EnvironmentFile=-/etc/default/docker
ExecStart=
ExecStart=/usr/bin/dockerd -H fd:// KaTeX parse error: Expected 'EOF', got '#' at position 13: DOCKER_OPTS #̲重载服务配置文件 :~systemctl daemon-reload
#2.3 重启主机
reboot
#注意如果重启后网络并未生效则
sudo /etc/init.d/networking restart
#注意查看网卡信息
:~$ brctl show
bridge name bridge id STP enabled interfaces
br0 8000.000c2960060c no ens33
docker0 8000.02427c11f899 no
br0 Link encap:以太网 硬件地址 00:0c:29:60:06:0c
inet 地址:192.168.111.14 广播:192.168.111.255 掩码:255.255.255.0
inet6 地址: fe80::20c:29ff:fe60:60c/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 跃点数:1

ens33 Link encap:以太网 硬件地址 00:0c:29:60:06:0c
UP BROADCAST RUNNING MULTICAST MTU:1500 跃点数:1
#广播运行多播

广播运行多播
#验证dns解析是否正常
ping www.baidu.com
#网络可能会没有dns解析所以我们需要进行dns的配置
#16.04:
:~$ sudo vim/etc/resolvconf/resolv.conf.d/base
#18.04:
:~$ sudo vim/etc/resolv.conf
#增加内容
nameserver 223.5.5.5
nameserver 114.114.114.114
nameserver 8.8.8.8
#注意如果重启后网络并未生效则
sudo /etc/init.d/networking restart

#3、容器测试
#3.1 创建容器
#主机1:
:~$ docker run -itd --name ubuntu-test1 -v /etc/apt/:/home/etc ubuntu /bin/bash
:~$ docker run -itd --name ubuntu-test2 -v /etc/apt/:/home/etc ubuntu /bin/bash
#主机2
:~$ docker run -itd --name ubuntu-test3 -v /etc/apt/:/home/etc ubuntu /bin/bash
:~$ docker run -itd --name ubuntu-test4 -v /etc/apt/:/home/etc ubuntu /bin/bash
#3.2 容器间测试
进入容器
#主机1
:~ d o c k e r e x e c − i t u b u n t u − t e s t 1 / b i n / b a s h :   docker exec -it ubuntu-test1 /bin/bash :~ dockerexecitubuntutest1/bin/bash: docker exec -it ubuntu-test2 /bin/bash
#主机2
:~ d o c k e r e x e c − i t u b u n t u − t e s t 3 / b i n / b a s h :   docker exec -it ubuntu-test3 /bin/bash :~ dockerexecitubuntutest3/bin/bash: docker exec -it ubuntu-test4 /bin/bash

:~# rm /etc/apt/sources.list
#容器内部将本地sources.list 复制过来
:~# cp /home/etc/sources.list /etc/apt/
#容器内部进行软件源更新
:~# apt-get update
#容器内部安装ping命令
:~# apt-get install inetutils-ping -y
#容器内部安装ifconfig命令
:~# apt-get install net-tools -y

#四个容器之间相互ping通

宿主机ping命令测试

ping 192.168.111.14
ping 192.168.111.15

总结:
优点: 配置简单,不依赖第三方软件
缺点: 容器依赖于主机间的网络 容器与主机在同网段,注意ip地址分配 生产中不容易实现、不好管理

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值