Docker原生网络、自定义网络、Docker容器通信、跨主机容器网络
Docker原生网络、自定义网络、Docker容器通信、跨主机容器网络
- Docker原生网络
- bridge
- Host
- none
- Docker自定义网络
- 自定义bridge
- overlay
- macvian
- docker network所有基本命令
- Docker容器通信
- 双冗余机制
- 跨主机容器网络
- 一些遗留错误解决
- 错误1
- 错误2
- 错误3
- 错误4
Docker原生网络
- docker安装时会创建一个名为docker0 的Linux bridge,新建的容器会自动桥接到这个接口。
- 转发功能借助了iptables
bridge
- bridge模式下,容器内没有一个公有IP,只有宿主机可以访问,外部主机不可见 容器可以通过宿主机的nat规则访问外网
- 把linux内核(IP服务必须要打开)当成一个路由器来看待,容器之间的通信是通过docker0网关来做通信。同一个VLAN里面不做路由。
- 解决出去,但进来很难,外网对IP无法确定
- 拉取nginx镜像
- 查看桥接信息,生成了新的接口——veth6974209
- 一端连接宿主机,一端连接容器内
- 01宿主机,03容器ID(自动分配)
- 容器的ip是动态分配的,删除容器,则IP地址会回收
- 网关是宿主机
- 目前没有其他服务
- 共享宿主机的
Host
- 缺少网络隔离性,资源只有一份
- 对于桥接而言是一个很好的补充
- 容器网络和宿主机网络共享相同网络栈
- 该网络模式在创建容器时需要指定
- –network=host\n
- 只有bridge不用指定,是默认的
- 目前宿主机的80端口没有被占用,所以容器run之后就可以用80
- master
- 容器进程
- 容器进程(相对隔离)
- 这种容器只能启动一个,web2进程被挤掉直接下线
none
- none指禁用网络功能,只有io接口,在容器创建时使用
Docker自定义网络
自定义网络模式,docker提供了三种自定义网络驱动:
bridge驱动类似默认的bridge网络模式,但增加了一些新的功能,overlay和macvlan是创建垮主机网络
建议使用定义的网络来控制哪些容器可以互相通信,还可以自动DNS解析容器名称到IP地址
自定义bridge
- harbor仓库是有解析的,harbor有网络是自己创建的。
- harbor还是通过桥接,但自己定义的就多个解析
- 通过名称进入,没有解析
- 共享的是宿主机DNS,默认没有解析
- 这时,我们需要自定义一下使其拥有解析
- 这里的桥接是没有区别的,但自定义的桥接里面多了DNS解析
- 容器的IP是动态分配的,如果停了,就立刻分配给别人
- 重启,IP有可能以及分配给别的主机
- 名称是不会冲突的
- ID要唯一不然会冲突
- 自定义网络就是通过名称来做的解析
- IP动态分配,是可以由名字来访问到的
- 删除容器
overlay
- 非底层而是应用层
macvian
- 底层去用
- 自定义网络怎么创建
- 自定义的时候可以指定网络还可以指定网关
- 桥接不能手动指定IP
- 17、18
- 使用该网络,打入后台
- 成功分到网络
- 可直接访问
- 宿主机使其网关,所以肯定能访问
- 一定使用同一个网络(容器的不同网络之间默认是隔离的)
- 分到的IP地址都是一个段的
- 停掉web1,启用web2
- 这时候他的IP是原来web1的
- ping web1拼不通,web2可以通
- 再次开启web1
- 再次启动web1又可以ping通
- 即使原先容器IP变化,依然可以通(容器名称始终没有变化)
web1和web2都桥接在了宿主机新建的接口上- mynet1分配到的
- 他的网段和网关
- 创建mynet2,设置网段和网关
- 把web3桥接到mynet2上nginx
- 它们之间是不互通的因为不在一个段里
- 表面看是没有区别的,实际上指定了IP
- 可以手动指定IP
- 重启容器,IP是否会变化
- 创建被禁止
- 因为在创建mynet1时,没有手动指定子网,就无法手动指定IP
- 桥接到不同网桥上的容器彼此是不互通的
- "–rm"交互完直接回收
- 防火墙里面默认做的就是隔离
- 若想让其通信
- 解决方法就是加多个网卡
- 创建一个busybox
- 隔离的无法通
- 想让容器连接,在插一块网卡
- 两块网卡
docker network所有基本命令
Docker容器通信
- 容器和宿主机使用相同网络栈
- 容器和容器之间使用相同网络栈
- 清空环境
- demo3要和demo2一样
- demo3没有
- 当前开的容器和指定的容器是一个网站
- 网络栈资源唯一,高效回环
- 使用lamp架构
- vm1 nginx
- vm2 mysql
- vm3 php
- 端口不一样,但是连接时可以通过localhost连接
- 解决容器之间的超亲密关系,有大量的通信需求。
- 不常用
- 除了提供解析还可以注入相应的变量
- 链接到demo1上
- 会把变量(比如IP怎么连接)全部注入进来
- 别名和容器名都可以Ping
- 它是通过给hosts文件直接加了个解析
- 停掉demo2,开启demo3,就会占用IP
- 再次启动demo2,获取新的IP
- IP变化,解析已经动态变更,不依赖于DNS
- 网络使用的是自定义而非桥接
- 而env变量是不变的
- 容器在访问外网的时候该如何出去
- 数据包出去会通过网关0.1,0.1就会回到docker0
- 宿主机的数据包可以出去,容器就可以出去
- 宿主机上不了网,容器也无法出去
- 宿主机NAT表中
- 分别是mynet1和2
- 做了伪装,SNAT
- 进来没问题出去会有问题
- 端口映射
- 清空环境容器
- “-p”端口映射
- 可访问宿主机
- 容器已经在运行了
- 在容器内打开一个新的shell可以进行交互
- 退出交互就没有了
- 80宿主机已被占用,我们可以用81
- 通过非交互式把页面传过去
- 把本地的首页拷贝到容器内
- 目标地址重定向
- 官方最开始没docker-proxy,使用的是iptables
- docker-proxy是一种双冗余机制,iptables不生效可以使用docker-proxy;docker-proxy不生效可以使用iptables。有一个在都可以生效
- 删除81策略
- 仍然可以访问
- 本机也可以访问
- docker-proxy还在
- 干掉docker-proxy
- 这时本机也无法访问
- 外部也不行
- 重启容器,iptables里面的策略会重新生成
- 重新生效81端口
双冗余机制
跨主机容器网络
- 想让server1和server2两个节点容器互通
- 使用的是linux内核本身的功能
- stop harbor不然接口过多
- 网络接口已经不在了
- 打开混杂模式
- server2也要同样操作
- up通,down物理链路不通
- 指定不一样的驱动,原先都是桥接
- 该模式下管理员自己控制,直接使用物理接口
- “-d"指定驱动,”-o"指定负极
- 启动一个容器
- 获取到0.2
- 将不用的网络回收
docker network create -d macvlan --subnet 10.0.0.0/24 --gateway 10.0.0.1 -o parent=eth0 macvlan1
- 两台机器不冲突
- server1自动分配,server2手工分配
- docker要保证物理链路畅通,出去之后就不是docker管辖的了
- 创建macvlan1之后没有桥接接口
- server2也没有
- 通过server2访问curl web1
- 下载busyboxplus,带工具链可以curl
- 无需NAT
- 无NAT链
- 支持vlan子接口
- eth0.1子接口
- 指定使用网址
- server2能ping同一个vlan
- 不同vlan也能ping
- 加两块网卡,不同容器获取的地址不一样
- macvlan动态分配网卡冲突
- 删除web1
- 这两个容器都在server1上,可访问
一些遗留错误解决
- harbor down了之后,重启要对其再次认证,才能正常使用
错误1
- 解决
./install.sh
错误2
- 无法登陆docker
- 解决
- 域名文件修改指向
- 重启harbor
错误3
- 仍然不能拉取(重启之后)
- 再次认证就解决了
错误4
- yum源无法下载
- 解决:未挂载
Docker原生网络、自定义网络、Docker容器通信、跨主机容器网络相关推荐
- Docker网络——实现容器间通信、容器与外网通信以及容器的跨主机访问
前言 自定义网络 建议使用自定义的网桥来控制哪些容器可以相互通信,还可以自动DNS解析容器名称到IP地址.Docker提供了创建这些网络的默认网络驱动程序,你可以创建一个新的Bridge网络,Over ...
- docker 绑定固定ip 跨主机容器互访
之前使用pipework 分配静态ip是暂时的,重启之后就会失效,并且使用pipework绑定的ip 物理机,虚拟机,docker容器的ip都在同一网段,这在生产环境是很困难的,下面使用docker自 ...
- Docker 跨主机容器网络通信 -- Flannel 实现
一.简介 Flannel 是一种基于 overlay 网络的跨主机容器网络解决方案,也就是将 TCP 数据包封装在另一种网络包里面进行路由转发和通信,Flannel 是 CoreOS 开发,专门用于 ...
- docker容器的跨主机访问
在同一宿主机下的Docker的容器之间是默认互相联通的.通过docker inspect id或name可以查看到ip地址.在不同的容器中来执行ping是可以ping通的,然而跨容器则行不通,于是总结 ...
- Docker实现跨主机容器实例网络通信(2)——利用OpenVSwitch构建多主机Docker网络
题记 前面我们已经针对Docker容器进行了简单介绍,相信感兴趣的朋友已经能在相关帮助下部署一个docker环境感受了容器带给我们的另一种技术进步. 当然,如果你慢慢深入容器的技术研究,你会发现,尽管 ...
- docker webdav_跨主机容器共享数据卷(webdav 双向同步)
在校内搭建的 Git 仓库,有时候需要在校外访问操作.因为使用的是 Gogs 搭建,所以只需要同步 data 文件夹即可,网上关于双向同步的方案有很多,但是都很麻烦,而且经常会"打架&quo ...
- Linux 实用指令 -- 网络配置(查看网络IP和网关、 ping 测试主机之间网络连通、Linux网络环境配置(指定固定ip))
文章目录 1. 网络配置 1.1 查看网络IP和网关 1.1.1 查看虚拟网络编辑器 1.1.2 这里可以修改ip地址(修改虚拟网络的ip) 1.1.3 这里可以修改网关(虚拟网络的网关) 1.1.4 ...
- calico 跨主机容器网络通信
环境说明 etcd服务器10.0.0.210, 安装版本3.1.11 两台虚拟机 主机1: hostname: node211 ip:10.0.0.211 OS: centos 7.4 docker: ...
- Docker容器实现跨主机间通讯
最新文章
- angular2+ 自定义pipe管道实例--定义全局管道及使用
- linux内核printk调试
- Linux的一些简单命令操作
- android bitmap 替换指定颜色,Android 实现把bitmap图片的某一部分的颜色改成其他颜色...
- 一个OSPF的区域备份在手册里看到的
- Apahce服务器配置非根目录的虚拟目录
- JDBC工具类,基于C3P0的数据库连接池,提供获取连接池、获取连接对象、释放资源和封装事务操作的方法...
- 一款强大的 SQL 工具
- jquery ztree 设置勾选_JQuery Ztree 树插件配置与应用小结
- Python RPM包制作
- Android微信抢红包服务源码
- Centos7 压缩文件
- 机器学习可解释性之shap模块的使用——基础用法(一)
- css英文文本不换行,CSS样式表让英文文本自动换行
- Word标题样式关联多级列表
- 【Arduino】关于使用USB-ISP烧入bootloader的一些记录
- oracle 行转列后列名,Oracle 多行转多列,列值转为列名
- 调用开放接口(多个系统间的数据传输)
- 【经验分享】CASS无法框选的解决方案
- 基于百度AI平台的语音识别功能开发-SDK调用