Docker系统六:Docker网络管理
Docker网络
I. Docer的通信方式
默认情况下,Docker使用网桥(brige)+ NAT的通信模型.
Docker启动时会自动创建网桥Docker0,并配置ip 172.17.0.1/16
ifconfig docker0
docker0 Link encap:Ethernet HWaddr 02:42:e0:31:ac:10inet addr:172.17.0.1 Bcast:0.0.0.0 Mask:255.255.0.0UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1RX packets:1846 errors:0 dropped:0 overruns:0 frame:0TX packets:5562 errors:0 dropped:0 overruns:0 carrier:0collisions:0 txqueuelen:0RX bytes:168242 (168.2 KB) TX bytes:23550976 (23.5 MB)
Docker容器内容及容器与宿主机通信方式(Brige方式)
当Docker启动容器时,会创建一对veth虚拟网络设备:
- 一个附加到网桥上;
- 一个加入容器的网张命名空间并被改名为eth0
Docker容器与外部网张通信(NAT方式)
1)容器访问外网
Docker通过创建如下MASQUERADE规则进行外部网络访问:
iptables -t nat -A POSTROUTING -s 172.17.0.0/16 !-o docker0 -j MASQUERADE
规则说明:奖所有从容器(172.17.0.0/16)发往外网的包的源地址都改为Host(宿主机)的IP。
2)外网访问容器
当容器提供的服务需要暴露给外部网络里,Docker启动容器里,会创建SNAT规则。eg,启动一个apache容器:
docker run -d -p 80:80 apache
在上述命令背后其实会创建如下SNAT规则:
iptables -t nat -A PREROUTING -m addrtype --dst-type LOCAL -j DOCKER
iptables -t nat -A DOCKER !-i docker0 -p tcp -m tcp --dport 80 -j DNAT --to-destination 172.17.0.2:80
II. Docker的网络配置
Docker中很多网络相关的参数主是有:
- Docker进程本身的,影响所有docker容器;
- Docker容器相关的,只影响当前容器;
1. 网络配置参数
1)Docker进程的网络配置
相关参数如下:
-b, --bridge="" ;//指定Docker使用的网络设备。默认下,Docker会创建docker0网桥设备,通过该参数可以指定Docker使用已存在的网桥设备--bip="" ;//指定网桥设备的docker0的IP和掩码,使用标准的CIDR形式,如192.168.1.5/24--dns=[] ;//强制docker使用指定的DNS servers--dns-search=[] ;//强制docker使用指定的DNS search domains--icc=true ;//打开inter-container沟通--ip="0.0.0.0" ;//绑定容器端口时的默认IP--ip-forward=true ;//打开 net.ipv4.ip_forward--iptables=true; //打开docker的iptables rules增加--mtu=0; //设置容器的网络MTU,如果没有设置任何值则默认route MTU ,当默认路由不存在时,使用1500
Note:
--dns/--dns-search: 配置容器的DNS,改参数可以在启动Docker进程时指定(成为所有容器的默认值),也可以在启动容器(docker run)时指定(覆盖默认值)。
2)容器的网络配置
下面是docker run时的一些网络配置参数:
--net="bridge" //用于指定容器使用的网络通信方式;
它有如下四个值:
- bridge : Docker容器的默认通信方式;
- none : 容器没有网络栈,此时容器无法与外界通信;
- container:<name|id> : 使用其他容器(name或id)的网络栈。实际上,Docker会将该容器加到指定的容器network namespace, 这是一种非常有用的方式。
- host : 表示容器使用Host的网络,没有自己独立的网络栈。实际上,在这种情况下,Docker不会给容器创建单独的网络名字空间(newwork namespace).由于容器可以完全访问Host的网络,所以此方式也是不安全的。
2. 配置DNS
一般来说每个容器的hostname和DNS配置信息是不同的,我们不可能为每个容器都构建一个镜像,并在镜像中指定这些信息。实际上,Docker在启动容器时,会使用bind mount动态挂载/etc/hostname,/etc/hosts,/etc/resolv.conf几个文件,覆盖镜像中原来的文件。通过如下命令我们可以在容器内看到这个信息:
docker exec -it {容器} /bin/bash
mount/dev/vda1 on /etc/resolv.conf type ext4 (rw,relatime,errors=remount-ro,data=ordered)
/dev/vda1 on /etc/hostname type ext4 (rw,relatime,errors=remount-ro,data=ordered)
/dev/vda1 on /etc/hosts type ext4 (rw,relatime,errors=remount-ro,data=ordered)
所以,我们可以通过命令行参数在启动Doker时指定DNS
3. Docker网络相关的一些参考
关于docker网络的概念:理解Docker容器网络之Linux Network Namespace
关于源地址和目地地址的转换关系:iptables中DNAT、SNAT和MASQUERADE的理解
Docker相关的网络详解:Docker网络详解
iptables命令详解:iptables命令详解
转载于:https://www.cnblogs.com/Terry-Wu/p/7461453.html
Docker系统六:Docker网络管理相关推荐
- Docker系列(二十四)——Docker实例六Docker安装Redis实例
< Docker实例三Docker安装Redis实例 > 前言 在前面一篇文章种,完成了 < Docker安装MongoDB实例 >,本篇将继续镜像安装教程,并完成Docker ...
- Docker专题(六)-Docker镜像详解
1.Docker镜像(images)概念 镜像是一种轻量级.可执行的独立软件包,用来打包软件运行环境和基于运行环境开发的软件,它包含运行某个软件所需的所有内容,包括代码.运行时.库.环境变量和配置文件 ...
- Docker学习(六)-----Docker数据卷
十.Docker数据卷 问题:通过镜像创建一个容器,容器一旦被销毁,则容器内的数据将一并被删除,但有些情况下,通过服务器上传的图片出会丢失.容器中的数据不是持久化状态的. 那有没有一种独立于容器,提供 ...
- Docker系列 六. Docker 安装 Redis
Docker 安装 Redis Redis 是一个开源的使用 ANSI C 语言编写.支持网络.可基于内存亦可持久化的日志型.Key-Value 的 NoSQL 数据库,并提供多种语言的 API . ...
- 如何进入docker系统
如何进入docker系统: docker exec -it {docker镜像id} bash 进入之后就是一个操作系统:
- Docker学习六:综合实践
前言 本次学习来自于datawhale组队学习: 教程地址为: https://github.com/datawhalechina/team-learning-program/tree/master/ ...
- 腾讯云轻量应用服务器CentOS系统使用docker安装tomcat,MySQL 并发布SSM maven项目
腾讯云轻量应用服务器CentOS系统使用docker安装tomcat,MySQL 并发布SSM maven项目(记录) 一.服务器修改密码(此时已安装CentOS系统) 二.防火墙添加规则 三.连接X ...
- Docker入门六部曲——Swarm
原文链接:http://www.dubby.cn/detail.html?id=8738 准备工作 安装Docker(版本最低1.13). 安装好Docker Compose,上一篇文章介绍过的. 安 ...
- Docker入门六部曲——Stack
原文链接:http://www.dubby.cn/detail.html?id=8739 准备知识 安装Docker(版本最低1.13). 阅读完Docker入门六部曲--Swarm,并且完成其中介绍 ...
最新文章
- 利用OpenCV的级联分类器类CascadeClassifier和Haar特征实现人脸区域的检测
- python手机端秒杀_python实现淘宝秒杀脚本
- NLP产品级系统设计模式
- MVC传递Model
- c语言合法自定义标识符_计算机二级C语言干货来了
- Python学习 Day 2-数据类型和变量
- 请用旧版的 Scala-2.11 搭配 Spark-2.4.8 / hadoop-2.7
- c#控制IE浏览器自动点击等事件WebBrowser,mshtml.IHTMLDocument2 .
- 《数据库系统概论》第五版 +学习笔记总目录
- 网络安全-技术与实践 书本习题练习
- [转载]世界各个地区WIFI 2.4G及5G信道划分表(附无线通信频率分配表)
- 爬虫 and 数据分析 | 一万条b站评论看工作细胞
- CS5801HDMI转eDP/DP转换芯片资料|CS5801规格书
- ubuntu20.04修改用户名【保留文件】
- 重上吹麻滩——段芝堂创始人翟立冬游记
- 如何关闭win10防火墙_Win技巧 | 如何关闭防火墙
- 使用模拟器玩地下城与勇士M电脑版试玩分享
- c语言程序设计之基础题
- EasyNVR完美搭配腾讯云CDN/阿里云CDN进行RTMP、HLS直播加速的使用说明
- 菲律宾的光伏市场只有一个字概况:穷
热门文章
- ai/ml_您本周应阅读的有趣的AI / ML文章(8月15日)
- Markdown 图标 快捷键
- 嘉年华回顾丨阿里云吕漫漪带你一览POLARDB整体架构设计...
- Chapter 7:Statistical-Model-Based Methods
- 乱查征信,贷款不想要了吗?
- 你真的会 snapshot 吗? - 每天5分钟玩转 OpenStack(163)
- _VARIANT_T 到 CSTRING 转换
- vue axios 发送get请求传递参数给后端失败_Java之Vue插件之Axios
- php中tables,php显示TABLE数据
- GameObject数组逐渐消失