Dockaer网络

root
233
文章
0
评论
2020年5月16日21:58:35 评论 5058字阅读16分51秒

Dockaer网络

docker本地网络类型

查看本地支持网络类型

docker network ls

[root@kk ~]# docker network ls
NETWORK ID          NAME                DRIVER              SCOPE
11630d15b547        bridge              bridge              local
22c621d084e6        host                host                local
b3710c023570        none                null                local

1.bridge 相当于nat的模式

他只提供内部,容器网卡与docker0网卡,宿主机网卡之间的转换,但是无法提供由外网访问容器的作用,外部访问到容器是通过iptables的功能

自建bridge网络

当有多个独立的container之间需要彼此访问时,推荐使用自建bridge网络,而不是--link

创建bridge网络

docker network create --driver=brigen kk_network

2.none网络

这种网络模式下容器只有lo回环网络,没有其它网卡。none网络可以在容器创建时通过 --network=none 来指定。这种类型的网络没有办法联网,封闭的网络能很好的保证容器的安全性

查看host网络模式的容器信息

docker network inspect none

3.host网络

通过命令--network=host指定,使用host模式的容器可以直接使用docker host的IP地址与外接通讯,容器内部的服务端口也可以使用宿主机的端口,不需要进行nat,host最大的优势就是网络性能比较好,但是docker host上已经使用的端口就不能在用了,网络的隔离线不好

要是和宿主机共用一个网络环境,容器的sshd服务的端口号会与宿主机冲突,要修改容器的sshd服务默认端口号

4.container网络

容器和容器之间公用一个网络,可以实现一个容器dang掉,起一个容器设置这个模式,新容器可以完全占用旧网络模式

Docker跨主机网络-macvlan

docker跨主机访问-macvlan实现容器之间跨主机互联

Macvlan是一个新的尝试,是真正的网络虚拟化技术的转折点。Linux实现非常轻量级,因为与传统的Linux Bridge隔离相比,它们只是简单地与一个Linux以太网接口或子接口相关联,以实现网络之间的分离和与物理网络的连接。

Macvlan提供了许多独特的功能,并有充足的空间进一步创新与各种模式。这些方法的两个高级优点是绕过Linux网桥的正面性能以及移动部件少的简单性。删除传统上驻留在Docker主机NIC和容器接口之间的网桥留下了一个非常简单的设置,包括容器接口,直接连接到Docker主机接口。由于在这些情况下没有端口映射,因此可以轻松访问外部服务。

配置macvlan

不能访问外网,只能在宿主机内部进行相互访问

一个网卡只能配置一个

docker network create --driver macvlan --subnet=192.168.1.0/24 --gateway=192.168.1.254 -o parent=eth0 macvlan_1

--subnet=192.168.200.0/24命令指定该网络模式网段范围这个地址可以和主机地址不一样你要是设置了和主机地址不在一个网段上的地址,就需要--ip进行指定,另外的主机也需要,其中24代表该网段前24位相同,后8位不同,即该网段范围为:192.168.200.1~192.168.200.254,若该命令改为--subnet=192.168.200.0.16,即该网段范围为:192.168.0.1-192.168.255.254,这个范围就变的很大了。

--parent=宿主机网卡名称,绑定网卡

[root@kk ~]# docker network create -d macvlan --subnet=192.168.1.0/24 --gateway=192.168.1.254 -o parent=ens33 macvlan_1
6c64f4f22cc16278dfb4094b418a9f9729eca150e10342c750dbed8fcc642649
[root@kk ~]# docker network ls
NETWORK ID          NAME                DRIVER              SCOPE
11630d15b547        bridge              bridge              local
22c621d084e6        host                host                local
6c64f4f22cc1        macvlan_1           macvlan             local
b3710c023570        none                null                local

启动一个cen7的容器进行测试

[root@kk ~]# docker container run -it --name="kk02" --network=macvlan_1 --ip=192.168.1.50 centos:7
[root@d42171a86085 /]# ping 192.168.1.50
PING 192.168.1.50 (192.168.1.50) 56(84) bytes of data.
64 bytes from 192.168.1.50: icmp_seq=1 ttl=64 time=0.024 ms
64 bytes from 192.168.1.50: icmp_seq=2 ttl=64 time=0.033 ms
^C
--- 192.168.1.50 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1002ms
rtt min/avg/max/mdev = 0.024/0.028/0.033/0.007 ms

192.168.1.3的主机也要做相同的通道,做好通道启动容器,更改网络模式

[root@hwf ~]# docker network create -d macvlan --subnet=192.168.1.0/24 --gateway=192.168.1.254 -o garent=ens33 macvlan_1
f914986d43251c886a181edfd5413c516bbd1bc334487fe4a573baf53af6446b
[root@hwf ~]# docker network ls
NETWORK ID NAME DRIVER SCOPE
b0ff4c28c62c bridge bridge local
22c621d084e6 host host local
f914986d4325 macvlan_1 macvlan local
b3710c023570 none null local
[root@kk ~]# docker container run -it --name="kk01" --network=macvlan_1 centos:7

主要保证这个macvlan网络内的主机ip地址不能冲突

macvlan的弊端:

不能访问外网,只能在局域网里玩

查看网络信息的命令

[root@kk ~]# docker network ls
NETWORK ID          NAME                DRIVER              SCOPE
c287dd3b7ec6        bridge              bridge              local
22c621d084e6        host                host                local
f914986d4325        macvlan_1           macvlan             local
b3710c023570        none                null                local

删除网桥

docker network rm 网桥ID号/网桥名称

这里说一点,要是网桥被容器使用了,就无法删除,把容器停止或者删除才可以使用

删除没有被使用的网桥

docker network prune

 

Docker跨主机访问-overlay实现

overlay可以实现容器与外网互联互通

启动consul服务,实现网络的统一配置管理

想让两个网络环境下的容器互通,那么必然涉及到网络信息的同步,所以需要先配置一下consul。直接运行下面命令。启动consul。

docker container run -d -p 8500:8500 -h consul --name consul progrium/consul -server -bootstrap

[root@kk ~]# docker container run -d -p 8500:8500 -h consul --name consul progrium/consul -server -bootstrap

在/etc/docker/daemon.json文件中添加下方内容,所有服务器都要改配置文件

{
"registry-mirrors": ["https://fooyh53n.mirror.aliyuncs.com"],
"live-restore":true,
"hosts":[
"unix:///var/run/docker.sock",
"tcp://0.0.0.0:2375"
],
"cluster-store": "consul://192.168.1.2:8500",
"cluster-advertise": "192.168.1.2:2375"
}

[root@kk ~]# vim /etc/docker/daemon.json
{
"registry-mirrors": ["https://fooyh53n.mirror.aliyuncs.com"],
"live-restore":true,
"hosts":[
"unix:///var/run/docker.sock",
"tcp://0.0.0.0:2375"
],
"cluster-store": "consul://192.168.1.2:8500",
"cluster-advertise": "192.168.1.2:2375"
}
修改服务启动配置文件

vim /usr/lib/systemd/system/docker.service

将:ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock

修改为:ExecStart=/usr/bin/dockerd

重启docker服务,引擎
[root@kk ~]# systemctl daemon-reload 
[root@kk ~]# systemctl restart docker
创建overles网络,一边创建两边服务器都能看到
docker network create -d overlay --subnet 172.16.0.0/24 --gateway 172.16.0.254 ol1
[root@kk docker]# docker network create -d overlay --subnet 192.168.1.2/24 --gateway 192.168.1.254 ol1
d983f4e25ea222120226a882b83d5310961f4973234c326e830d642159bd2792
启动容器测试,这里随便启动一个镜像,把网络模式设置为我们建立的,看是否有两块网卡
[root@kk docker]# docker container run -it --network ol1 busybox
/ # ifconfig
eth0      Link encap:Ethernet  HWaddr 02:42:C0:A8:01:01  
          inet addr:192.168.1.1  Bcast:192.168.1.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1450  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

eth1      Link encap:Ethernet  HWaddr 02:42:AC:12:00:02  
          inet addr:172.18.0.2  Bcast:172.18.255.255  Mask:255.255.0.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:7 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:578 (578.0 B)  TX bytes:0 (0.0 B)
继续阅读
weinxin
我的微信
这是我的微信扫一扫
  • 文本由 发表于 2020年5月16日21:58:35
  • 除非特殊声明,本站文章均为原创,转载请务必保留本文链接
Harbor镜像仓库 Docker

Harbor镜像仓库

Harbor镜像仓库 一、Harbor特性介绍 基于角色访问控制 每个人角色不同,需求也不同,因此就需要访问权限控制,根据角色分配相应的权限。例如,开发人员需要对项目构建这就需要用到读写权限(push...
Centos7解决systemctl无法使用 Docker

Centos7解决systemctl无法使用

systemd整合: 因为systemd要求CAPSYSADMIN授权,从而得到了读取到宿主机cgroup的能力,Centos7中已经用fakesystemd代替了systemd来解决依赖问题。如果仍...
Dockerfile练习 Docker

Dockerfile练习

Dockerfile练习 实验一:要求使用centos7基础镜像,搭建httpd+sshd+php的镜像,实现httpd与sshd服务能够正常访问 创建存放dockerfile的目录 mkdir -p...
Docker-compose Docker

Docker-compose

Docker-compose 任务编排介绍 场景: 我们在工作中未来完成业务目标,首先把业务拆分成多个子任务,然后对这些子任务进行顺序组合,当子任务按照方案执行完毕后,就完成了业务目标 任务编排,就是...
匿名

发表评论

匿名网友 填写信息

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: