Docker(四):Docker基本网络配置
1、Libnetwork
Libnetwork提出了新的容器网络模型简称为CNM,定义了标准的API用于为容器配置网络。
CNM三个重要概念:
沙盒:一个隔离的网络运行环境,保存了容器网络栈的配置,包括了对网络接口、路由表、DNS的配置。
Endpoint:Endpoint将沙盒加入到一个网络中,一个Endpoint只能属于一个沙盒。
网络:网络包括一组能互相通信的Endpoint。
CNM的五种驱动:
bridge:Docker默认的网络驱动,Container通过一对veth pair链接到Dokcer网桥上,由Docker为容器动态分配IP及路由规则等。
host:容器与主机共享同一Network Namespace。
null:容器内网络配置为空,需要用户手动配置网络。
remote:Docker网络插件的实现,使CNM通过HTTP RESTful API对接第三方的网络方案。
overlay:Docker原生跨主机多子网网络方案,需要内核>=3.16才可正常使用。
2、基本网络配置
none:不为容器配置任何网络参数
启动容器:docker run --net=none -ti ubuntu:latest ip addr show
可以看到容器仅有一个lo环回接口,可以为手动容器配置网络。
container:与另一个容器共享Network Namespace
首先启动一个名为dockerNet的容器,dns为8.8.4.4
docker run -h dockerNet --dns 8.8.4.4 -tid ubuntu:latest bash
进入到容器并查看网络配置
docker exec -ti dockerNetID bash
再次启动共享网络的docker容器
docker run --net=container:dockerNetID -ti ubuntu:latest bash
再次查看网络配置,其IP地址、DNS、hostname都继承了dockerNet
host:与主机共享Root Network Namespace,容器可以完全操纵主机的协议栈、路由表,所以一般避免使用host模式
docker run --net=host -ti ubuntu:latest bash
查看网络配置与主机一样
bridge:Docker设计的NAT网络模型
docke run -ti --net=bridge ubuntu:latest ip addr show
该容器会从172.17.42.1/16子网内分配IP
overlay:Docker原生的跨主机多子网模型
overlay网络比较复杂,底层需要类似consul或etcd的KV存储系统进行消息同步,核心是通过Linux网桥与vxlan隧道实现跨主机划分子网。
overlay网络创建步骤:
获取实验版Docker:
curl -sSL https://experimental.docker.com/ | sh
主机1以bootstrap模式运行consul server
consul agent -server -bootstrap -data-dir /tmp/consul -bind Host-1-IP
主机2启动consul client
consul agent -data-dir /tmp/consul -bind HOST-2-IP
consul join HOST-1-IP
主机1启动Docker daemon
docker daemon --kv-store=consul:localhost:8500 --label=com.docker.network.driver.overlay.bind_interface=eth0
主机2启动daemon
docker daemon --kv-store=consul:localhost:8500 --label=com.docker.network.driver.overlay.bind_interface=eth0 \
--label=com.docker.network.driver.overlay.neighbor_ip=Host-1-IP
在主机1上创建overlay网络
docker network create -d overlay dev
查看创建的网络:docker network ls
在主机1上运行一个容器
docker run -tid --publish-service test.dev ubuntu:latest bash
test.dev:为容器在dev网络上绑定一个test的服务
在主机2上运行一个容器
docker run -tid --publish-service test1.dev.overlay ubuntu:latest bash
test1.dev.overlay:绑定名为test1的服务,test1服务所在的网络是dev,网络类型是overlay
此时主机1和主机2上的容器是可以通信的
overlay网络详情查看
沙盒保存在/var/run/docker/netns
创建软连接:ln -s /var/run/docker/netns/OverLayNetID /var/run/netns/OverLayNetID
创建软连接是为了能够使用IP命令操纵名字空间
查看端口详细信息:
ip netns exec OverLayNetID ip addr show
查看网桥信息:
ip netns exec OverLayNetID brctl show
查看vxlan信息:
ip netns exec OverLayNetID ip -d link show vxlan1 (vxlan1为网桥信息显示的interfaces)
# vxlan id表示为占用的vxlan隧道,一般为256~1000
3、Docker相关网络参数
Daemon相关:
查看帮助:docker daemon --help
-b,--bridge= #指定docker使用的网桥,默认为docker0
--bip= #指定docker0网桥的IP,不能与-b一起使用
--default-gateway= #设置容器的默认网关
--default-gateway-ipv6 #设置容器的ipv6网关
--dns=[] #设置容器的dns
--dns-search=[] #设置容器的search domain
--fixed-cidr= #定义容器的网段
--fixed-cidr-ipv6=
-H,--host=[] #指定docker client和docker daemon通信的socket地址,可以是tcp地址、unix socket地址或socket文件描述符,可同时指定多个
#如:docker daemon -H tcp://10.10.10.10:60000 -H unix:///var/run/docker.sock
#代表docker同时监听60000端口和docker.sock文件
--icc=true #允许/禁止容器间通信
--ip=0.0.0.0 #容器暴露端口时绑定的主机IP,默认为0.0.0.0
--ip-forward=true #开启转发功能
--userland-proxy=true #生产环境建议设置为false
Client相关:
查看帮助:docker run --help
--add-host=[] #在容器内的hosts文件添加一行解析
--dns=[]
--dns-search=[]
--expose=[] #暴露容器的端口,而不映射到主机端口
-h,--hostname= #设置容器的主机名
--link=[] #链接到另一个容器,在容器中可以通过ID或主机名访问到其他容器
--max-address=
-net=bridge #设置容器的网络运行模式,模式为上述介绍
-P,--publish-all=false #将容器所有暴露出的端口映射到主机随机端口
-p,--publish=[] #将容器一段范围内的端口映射到主机指定的端口
Docker Daemon实例:
docker daemon -H tcp://10.10.10.10:50000 -H unix:///var/run/docker.sock --fixed-cidr=172.17.55.0/24 --icc=false --userland-proxy=false
# --fixed-cidr指定容器将从172.17.55.0网段分配IP,--icc 禁止容器间通信,
Dokcer Client示例1:
docker run -tid --net=bridge -p 10000:22/tcp -h docker ubuntu:latest bash
# 启动一个主机名为docker 网络模式为bridge的容器,将10000映射到22端口,此容器会获取一个55.0网段的IP
Docker Client示例2:
docker run -tid --name=c1 ubuntu:latest bash
docker run -tid --link=c1:alias_c1 --name=c2 ubuntu:latest bash
# 首先启动了一个名为c1的容器,然后启动了一个连接到c1的名叫c2的容器,c1别名起为alias_c1,此时容器c2可通过c1别名与c1通信
Docker(四):Docker基本网络配置的更多相关文章
- Docker 使用指南 (三)—— 网络配置
版权声明:本文由田飞雨原创文章,转载请注明出处: 文章原文链接:https://www.qcloud.com/community/article/95 来源:腾云阁 https://www.qclou ...
- Docker Network Configuration 高级网络配置
Network Configuration TL;DR When Docker starts, it creates a virtual interface named docker0 on the ...
- DOCKER学习_005:Flannel网络配置
一 简介 Flannel是一种基于overlay网络的跨主机容器网络解决方案,也就是将TCP数据包封装在另一种网络包里面进行路由转发和通信, Flannel是CoreOS开发,专门用于docker多机 ...
- (转) docker跨主机 macvlan 网络配置
原文链接 https://github.com/alfredhuang211/study-docker-doc/blob/master/docker%E8%B7%A8%E4%B8%BB%E6%9C%B ...
- Docker——四种网络模式
docker run创建Docker容器时,可以用–net选项指定容器的网络模式,Docker有以下4种网络模式: bridge模式:使用–net =bridge指定,默认设置: host模式 ...
- Docker学习第四天(Docker四种网络模式)
Docker四种网络模式 实现原理 Docker使用Linux桥接(参考<Linux虚拟网络技术>),在宿主机虚拟一个Docker容器网桥(docker0),Docker启动一个容器时会根 ...
- 5、Docker网络配置(单机)
一.概述 以下内容参考:https://docs.docker.com/network/#network-drivers Docker容器和服务如此强大的原因之一是您可以将它们连接在一起,或者将它们连 ...
- Docker 四种网络模式
原文 https://www.cnblogs.com/gispathfinder/p/5871043.html 我们在使用docker run创建Docker容器时,可以用--net选项指定容器的网络 ...
- Docker的4种网络模式
我们在使用docker run创建Docker容器时,可以用--net选项指定容器的网络模式,Docker有以下4种网络模式: · host模式,使用--net=host指定. · container ...
- docker学习3-虚拟网络模式
一.虚拟机网络模式 在理解docker网络隔离前,先看下之前虚拟机里对网络的处理,VirtualBox中有4中网络连接方式: NAT Bridged Adapter Internal Host-onl ...
随机推荐
- python语言 第一个程序
print("hello word!") # for i in range(1, 10):# for j in range(1, 10):# print(j, "x&qu ...
- UEditor1.4.3.3实现图片上传、删除功能
1.下载ueditor1.4.3.3 UTF-8的版本 2.新建一个项目,在项目中添加UEditor,把下载好的插件都放在ueditor这个文件夹中,在进行一些基本的配置 3.在根目录下新建一个为in ...
- 求知的木头 Cannot load browser "PhantomJS": it is not registered! Perhaps you are missing some plugin? 测试安装遇到的BUG
原文链接 求知的木头 Cannot load browser "PhantomJS": it is not registered! Perhaps you are missin ...
- OpenStack搭建遇到的问题2(组件配置错误了,别重装全部,就把模块卸载就行了)
apt-get remove -y mysql-server python-mysqldb 在装OpenStack的时候,出错的可能就是就是一个模块,比如keysstone或者是glance出错了,我 ...
- phython廖雪峰
这是小白的Python新手教程,具有如下特点: 中文,免费,零起点,完整示例,基于最新的Python 3版本. Python是一种计算机程序设计语言.你可能已经听说过很多种流行的编程语言,比如非常难学 ...
- python3 中encode 和decode的使用方法。
编码: 将文本转换成字节流的过程.即Unicode----------->特定格式的编码方式,产生特定的字节流保存在硬盘中(一般为utf-8格式). 解码: 将硬盘中的字节流转换成文本的过程.即 ...
- 【深度学习系列】用PaddlePaddle和Tensorflow实现经典CNN网络Vgg
上周我们讲了经典CNN网络AlexNet对图像分类的效果,2014年,在AlexNet出来的两年后,牛津大学提出了Vgg网络,并在ILSVRC 2014中的classification项目的比赛中取得 ...
- 》》QQ-注册
<!doctype html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- [睡前灵感and发散思维]由一个简单的数组比较问题而想到的
前言 据说,一只优秀的程序猿往往会有这样的经历,白天遇到一个绞尽脑汁也无法解决的问题,晚上睡了后,半夜在梦中会灵感涌现,立马起床,打开电脑,一气呵成.第二天如果不看注释,完全不知道自己找到了如此巧妙地 ...
- jQuery->JavaScript一览表
比较jQuery与JavaScript的不同功能实现 CSS选择器 元素选择 // jQuery $("li").css("color", "red& ...