容器虚拟化网络和Docker容器网络(转载)
时间:2020-04-28
本文章向大家介绍容器虚拟化网络和Docker容器网络(转载),主要包括容器虚拟化网络和Docker容器网络(转载)使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
容器虚拟化网络和Docker容器网络
docker 6种名称空间
UTS namespace 主机名与域名
Mount namespace 挂载点
IPC namespace 信号量、消息队列和共享内存
PID namespace 进程号
User namespace 用户和组
Network namespace 网络设备、网络栈、端口等
Linux系统虚拟交换机
OVS: Open VSwitch, 开源虚拟交换机
软件功能实现交换机技术,模拟实现三层网络技术,vlan,流控,SDN
网络名称空间
网络名称命令
ip netns 命令
# ip netns help
Usage: ip netns list
ip netns add NAME
ip netns set NAME NETNSID
ip [-all] netns delete [NAME]
ip netns identify [PID]
ip netns pids NAME
ip [-all] netns exec [NAME] cmd ...
ip netns monitor
创建网络名称空间
# ip netns add r1
# ip netns add r2
## 查看名称空间网卡
# ip netns exec r1 ifconfig
# ip netns exec r1 ifconfig -a
创建虚拟网卡对
# ip link help
## 创建一堆网卡
# ip link add name veth1.1 type veth peer name veth1.2
## 移动一个网卡到r1
# ip link set dev veth1.2 netns r1
# ip netns exec r1 ifconfig -a
## 修改r1中veth1.2名字为eth0、
# ip netns exec r1 ip link set dev veth1.2 name eth0
# ip netns exec r1 ifconfig -a
## 激活网卡即可通信
# ifconfig veth1.1 10.1.0.1/24 up
# ip netns exec r1 ifconfig eth0 10.1.0.2/24 up
# ping 10.1.0.2
## r1和r2进行通信
# ip link set dev veth1.1 netns r2
# ip netns exec r2 ifconfig -a
# ip netns exec r2 ping 10.1.0.2
测试网络通信模型时使用,轻量级,模拟bridge,none,host模式
docker网络
- 查看网络
# docker network ls
# docker network inspect bridge
创建容器时,可为 docker run 命令使用 --network选项指定要加入的网络
bridge桥接
容器启动,创建一对网卡,一半在容器,一半在docker0
桥接式容器一般拥有两个接口:一个环回接口和一个连接至主机上某桥设备的以太网接口
docker daemon 启动时默认会创建一个名为 docker0的网络桥,并且创建的容器为桥接式容器,其以太网接口桥接至 docker0
--net bridge 即为将容器接口添加至 docker0
docker0 桥为 NAT桥,因此,桥接式容器可通过此桥接口访问外部网络,但防火墙规则阻止了一切从外部网络访问桥接式容器的请求
- 查看桥接信息
# yum install -y bridge-utils
# brctl show
# ip link show
# iptables -t nat -vnL
- 启动命令1
# docker run --name t1 -it --rm busybox:latest
- 启动命令2 bridge桥接
# docker run --name t1 -it --network bridge --rm busybox:latest
- 启动docker时注入参数
# docker run --name t1 -it -h evescn --rm busybox:latest
-h 注入主机名
# docker run --name t1 -it -h evescn --dns 114.114.114.114 --dns-search ilinux.io --rm busybox:latest
-h 注入主机名
--dns 注入dns IP
--dns-search 注入dns解析搜索域
# docker run --name t1 --rm --add-host "my.docker.com:172.16.0.100" busybox nslookup docker.com
--add-host HOSTNAME:IP 选项能够为容器指定本地主机名解析项
docker容器端口暴露
Docker0 为 NAT 桥,因此容器一般获得的是私有网络地址
可以把容器想像为宿主机 NAT 服务背后的主机
如果开放容器或其上的服务为外部网络访问,需要在宿主机上为其定义 DNAT 规则,例如
对宿主机某 IP 地址的访问全部映射给某容器地址
主机 IP 容器 IP
-A PREROUTING -d 主机 IP -j DNAT --to-destination 容器 IP
对宿主机某 IP 地址的某端口的访问映射给某容器地址的某端口
主机 IP:PORT 容器 IP:PORT
-A PREROUTING -d 主机 IP -p {tcp|udp} --dport 主机端口 -j DNAT --to-destination 容器 IP: 容器端口
为 docker run 命令使用 -p选项即可实现端口映射,无须手动添加规则
- -p 参数
-p选项的使用格式
-p <containerPort>
将指定的容器端口映射至主机所有地址的一个动态端口
-p <hostPort>:<containerPort>
将容器端口<containerPort>映射至指定的主机端口<hostPort>
-p <ip>::<containerPort>
将指定的容器端口<containerPort>映射至主机指定<ip>的动态端口
-p <ip>:<hostPort>:<containerPort>
将指定的容器端口<containerPort>映射至主机指定<ip>的端口<hostPort>
“动态端口”指随机端口,具体的映射结果可使用docker port命令查看
--------------------------------------------
"-P" 选项或 "--publish-all" 将容器的所有计划要暴露端口全部映射至主机端口
-P 暴露所有Dockerfile中定义好的端口暴露
计划要暴露的端口使用使用 --expose 选项指定
例如
# docker run -d -P --expose 2222 --expose 3333 --name web busybox:latest /bin/httpd -p 2222 -f
查看映射结果,查看容器暴露端口
# docker port myweb
如果不想使用默认的 docker0桥接口,或者需要修改此桥接口的网络属性,可通过为 docker daemon 命令使用 -b 、 --bip 、 --fixed-cidr 、 --default-gateway 、 --dns 以及 --mtu等选项进行设定
none
不参与网络通信,运行于此类容器中的进程仅能访问本地环回接口
仅适用于进程无须网络通信的场景中,例如备份、进程诊断及各种离线任务等
空共享,不设置网络,只要lo接口,没有网卡
- 启动命令
# docker run --name t1 -it --network none --rm busybox:latest
联盟式网络
联盟式容器是指使用某个已存在容器的网络接口的容器,接口被联盟内的各容器共享使用;因此,联盟式容器彼此间完全无隔离
联盟式容器彼此间虽然共享同一个网络名称空间,但其它名称空间如 User 、 Mount等还是隔离的
联盟式容器彼此间存在端口冲突的可能性,因此,通常只会在多个容器上的程序需要程序 loopback接口互相通信、或对某已存的容器的网络属性进行监控时才使用此种模式的网络模型
## 类似host模式
2个或多个容器共享网络名称空间
共享:UTS,Net,IPC
不共享:User,Mount,Pid
# docker run --name t1 -it --rm busybox:latest
# docker run --name t2 --network container:b1 -it --rm busybox:latest
主机模式
开放式容器共享主机网络名称空间的容器,它们对主机的网络名称空间拥有全部的访问权限,包括访问那些关键性服务,这对宿主机安全性有很大潜在威胁
容器共享物理机网络名称空间
共享:UTS,Net,IPC
不共享:User,Mount,Pid
# docker run --name t1 -it --network host --rm busybox:latest
修改docker0的网络ip地址
自定义docker0桥的网络属性信息:/etc/docker/daemon.json文件
{
"bip": "10.20.0.1/16",
"fixed-cidr": "10.20.0.0/16",
"fixed-cidr-v6": "2001:db8::/64",
"mtu": 1500,
"default-gateway": "10.20.1.1",
"default-gateway-v6": "2001:db8:abcd::89",
"dns": ["10.20.1.2","10.20.1.3"]
}
docker服务器开启远程操作
## dockerd守护进程的 C/S,其默认仅监听 Unix SOcket格式的地址,/var/run/docker.sock;如果使用TCP套接字,
# vim /etc/docker/daemon.json
"hosts": ["tcp://0.0.0.0:2375", unix:///var/run/docker.sock"]
## 远程主机向dockerd直接传递“-H|--host”选项;
# docker -H IP ps -a
创建自定义桥
## 创建桥
# docker network --help
# docker network create --help
# docker network create -d bridge --subnet "172.26.0.0/16" --gateway "172.26.0.1" mybr0
# docker network ls
## 重命名桥
# ip link set dev xxxx name docker1
## 启动容器,使其使用新桥
# docker run --name t1 -it --net mybr0 busybox
原文地址:https://www.cnblogs.com/python-gm/p/12794009.html
- 小爬虫之爬取豆瓣电影排行榜1.技术路线2.任务3.分析4.运行结果5.源码
- Numpy 修炼之道 (5)—— 索引和切片
- 深入理解final关键字
- Numpy 修炼之道 (4)—— 基本运算操作
- 一些APT攻击案例分享
- 浅谈命令查询职责分离(CQRS)模式
- Numpy 修炼之道 (3)—— 数据类型
- 熔断器设计模式
- 树链剖分详解
- 洛谷P3379 【模板】最近公共祖先(LCA)(树链剖分)
- 学习使用Jieba1.Jieba2. 特点3.功能4.安装5.使用6.其他中文分词工具
- 如何使用sklearn加载和下载机器学习数据集
- 洛谷P3224 [HNOI2012]永无乡
- 手把手教你使用sklearn快速入门机器学习
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Codeforce 270D Greenhouse Effect
- 地表最简单安装MySQL及配置的方法,没有之一
- HDOJ 1176 免费馅饼 -- 动态规划
- flex-grow计算公式
- Cypress系列(67)- 环境变量设置指南
- codeforce 270C Magical Boxes
- Java开发编程规范: 4.OOP 规约
- Codeforces 1323 div2题解ABC
- order排序
- HDU 1421 搬寝室 解题报告(超详细)
- codeforce 270B Multithreading
- flex-wrap align-content详解
- Code force-CodeCraft-20 (Div. 2) D. Nash Matrix 详解(DFS构造)
- HDU Problem D [ Humble number ]——基础DP丑数序列
- Java开发编程规范: 3.代码格式