yw1989@ubuntu:~$ ifconfig
docker0 Link encap:Ethernet HWaddr 02:42:97:61:42:9f
inet addr:172.17.0.1 Bcast:0.0.0.0 Mask:255.255.0.0
inet6 addr: fe80::42:97ff:fe61:429f/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:2517 errors:0 dropped:0 overruns:0 frame:0
TX packets:2635 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:105967 (105.9 KB) TX bytes:18523253 (18.5 MB)
Docker的守护进程是通过docker0为docker容器提供网络服务。Docker0是linux的虚拟网桥,网桥是数据链路层的设备。通过mac地址(网络设备的物理地址)对网络进行划分并且在不同的网络之间传递数据。Linux的虚礼网桥:1.可以设置ip地址2.相当于一个虚拟网卡。通常来讲ip地址是网络层设备才有的,但是linux的网桥是网络设备的一种,只要是网络设备就可以设置ip地址。当虚拟网桥有ip地址之后,linux就可以通过路由表或者ip表规则在网络层定位网桥,这个网卡的名字就是虚拟网桥的名字就是docker0。 Docker0的地址划分:
IP:172.17.42.1,子网掩码:255.255.0.0,通过子网掩码可以知道提供了65534个ip地址。Docker也会根据ip的范围为每一个容器提供mac地址,从而避免mac地址冲突,MAC:02:42:ac:11:00:00到02:42:ac:11:ff:ff。Docker守护进程在一个容器启动时会创建网络的2端,一端是在容器中的网络设备,另一端是在运行dokcer守护进程的主机上打开一个名为veth*的接口用来实现docker0网桥与容器的通信。

yw1989@ubuntu:~$ sudo apt-get install bridge-utils  :安装网桥管理工具

root@ubuntu:/# brctl show  :查看网桥
bridge name bridge id STP enabled interfaces
docker0 8000.02429761429f no veth5ef7f82 root@ubuntu:/# docker run -it --name bridge_1 ubuntu /bin/bash
root@c97b96f74c0a:/# : 创建一个容器并进来
root@c97b96f74c0a:/# ifconfig : 查看ip地址
eth0 Link encap:Ethernet HWaddr 02:42:ac:11:00:03
inet addr:172.17.0.3 Bcast:0.0.0.0 Mask:255.255.0.0
inet6 addr: fe80::42:acff:fe11:3/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:6542 errors:0 dropped:0 overruns:0 frame:0
TX packets:5115 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:25377877 (25.3 MB) TX bytes:281529 (281.5 KB) lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:65536 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:1000
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B) 修改docker0的地址:$sudo ifconfig docker0 192.138.200.1 netmask 255.255.255.0
有时候不想使用docker0的网桥,需要添加虚礼网桥:
$sudo brctl addbr br0
$sudo ifconfig br0 192.168.100.1 netmask 255.255.255.0
更改docker守护进程的启动配置:
/etc/default/docker中添加DOCKER_OPS
-b=br0
重启docker的守护进程:sudo service docker restart

Docker容器间的互联:

默认情况下允许所有容器的互联,可以拒绝容器间的连接和允许特定容器间的连接。
同宿主机下的容器是通过默认网桥连接的,同一宿主机下的容器都是可以连接的,--icc=true
启动第一个容器:
$docker run -it --name 容器名1 镜像名(已经指定了命令不用在指定命令了)
#nginx : 容器中启动ngin服务,ctrl+PQ 退出容器,保证容器一直运行
启动第二个容器:
$docker run -it --name 容器名2 镜像名(已经指定了命令不用在指定命令了)
#ifconfig :查看容器2的ip地址,ctrl+PQ 退出容器,保证容器一直运行 $docker attach 容器1
#ifconfig 查看容器1的地址
#ping 容器2的地址 $docker attach 容器2
#curl http://容器1 的地址来访问1提供的nginx服务。服务可以正常访问。 停止容器并且重新起来的时候ip地址发生了变化。所以容器的ip地址是一个不可靠的连接。
--link : 指定容器名和代号,就可以通过代号来访问容器。就避免了因为ip地址变化带来的影响。Docker会自动修改别名和ip的地址的映射。
$docker run --link=[container_name]:[alias] [image] [command]
$docker run -it --name yw3 --link=cct1:webtest3 yw
#ping webtest3 :ping 容器的别名
拒绝所有容器的互联:--icc=false
修改docker的配置文件:$sudo vim /etc/default/docker,需要重启docker的服务$sudo service docker restart。
重启3个容器:docker restart c1 c2 c3 允许特定容器的访问:--icc=false --iptables=true --link (--icc=false表示拒绝访问,--iptables=true允许特定容器的访问, --link允许访问的地址)
$sudo vim /etc/default/docker
文件最后添加DOCKER_OPTS=”--icc=false --iptables=true”
重启docker的服务$sudo service docker restart。
重启3个容器:docker restart c1 c2 c3
$docker run -it --name yw3 --link=cct4:webtest4 yw 容器与外部网络的访问:ip_forward,iptables,允许端口映射访问,限制ip访问容器。
ip_forward:是linux系统中的一个变量,他的值决定了系统是否会转发流量,docker守护进程的默认参数中也有ip_forward选项,默认是true,使用这个默认值时docker会在守护进程启动时将系统的ip_forward设置为1,也就是允许流量转发,可以使用系统自带的工具查看数据转发是否开启,$sysctl net.ipv4.conf.all.forwarding 首先通过ps命令查看docker是否已经运行了:
$ps -ef | grep docker
查看ip_forward:
yw1989@ubuntu:~$ sudo sysctl net.ipv4.conf.all.forwarding
net.ipv4.conf.all.forwarding = 1 : 已经被置为了1 Iptables:是与linux内核集成的包过滤防火墙系统,几乎所有的linux发行版都会包含iptables功能。
Iptables包含了图中所给出的功能,图给出了在iptables中网络的数据包是如何传递的。
每一个大的方框就是iptables中的一个链(chain),每一个链就是数据处理的一个环节,在每个环节中又包含了不同的操作,prerouting就包含了nat,mangle,raw这3种操作。当一个数据包进入网卡时首先进入了prerouting链,如果数据包的目的是本机ip会进入下面的input链,然后交给本机处理。处理完之后发出,经过output链,然后达到postrouting链。当数据的目的地不是本机会经过forward链然后经过postrouting链发出。

Iptables不同的层级:
1.表(table): 链中的nat,mangle,raw,filter就是
2.链(chain):数据处理中的不同环节,不同阶段
3.规则(rule):每个链下的操作 Filter表中包含的链:input,output,forward Iptables可以配置特定ip访问特定容器。Docker依赖了iptables这个防火墙设置来提供容器的访问限制。

Docker容器的网络连接:的更多相关文章

  1. Docker容器的网络连接

    Docker容器的网络连接 Docker容器的网络连接 我们用ifconfig命令来查看网络设备 我们可以看到上面有个叫docker0的网络设备,docker守护进程就是通过docker0为docke ...

  2. Docker学习(13) Docker容器的网络连接

    Docker容器的网络连接 Docker容器的网络基础 先安装网桥管理工具 Docker容器的互联 默认 Docker容器与外部网络的连接

  3. Docker基本命令与使用 —— Docker容器的网络连接(四)

    一.Docker容器的网络基础 通过ifconfig查看docker0的网络设备,docker守护进程就是通过docker0为docker的容器提供网络连接的各种服务. docker0是Linux虚拟 ...

  4. Docker 容器的网络连接 & 容器互联

    1. Docker 容器网络基础架构 Docker0 ifconfig查看到的 docker0 是linux的虚拟网桥(OSI数据链路层) docker0 地址划分: 172.17.42.1 255. ...

  5. Docker学习笔记 - Docker容器的网络基础

    一.虚拟网桥 docker0 docker0 是 linux的虚拟网桥,守护进程通过docker0给容器提供网络连接的各种服务. 网桥是数据链路层设备,通常ip地址是网络层的设置.linux的虚拟网桥 ...

  6. 从宿主机直接进入docker容器的网络空间

    Docker dns nameserver 也是进入容器网络空间,监听53端口,但它通过iptable把端口映射到宿主机上,处理DNS请求的进程就在宿主机上. how does Docker Embe ...

  7. MacOS下解决宿主机和docker容器之间网络互通

    docker在Mac下使用非常方便,官网提供了desktop版本的可视化软件,甚至还十分贴心地集成好了k8s套件.然而如果想同时部署和使用多个容器,每个容器不使用127.0.0.1地址,而是各自有ip ...

  8. Docker容器间网络互联原理,讲不明白算我输....

    @ 目录 一.今天我们要搞明白的实验 二.前置网络知识 2.1.docker默认为我们创建的网络 2.2.怎么理解docker0网桥 2.3.什么是veth-pair技术? 三.同一个局域网中不同主机 ...

  9. docker 容器间网络配置

    创建一个docker容器,docker系统会自动为该容器分配一个ip地址,通常是172.17开头. 我们可以在主机上用 docker inspect 命令 或者进入容器用ifconfig命令来查看容器 ...

随机推荐

  1. vs2017秘钥

    VS2017专业版和企业版激活密钥 需要的请自取- Enterprise: NJVYC-BMHX2-G77MM-4XJMR-6Q8QF Professional: KBJFW-NXHK6-W4WJM- ...

  2. python中执行shell命令的几个方法

    1.os.system() a=os.system("df -hT | awk 'NR==3{print $(NF-1)}'") 该命令会在页面上打印输出结果,但变量不会保留结果, ...

  3. Android 中的Canvas画图

    Android中有一个Canvas类,Canvas类就是表示一块画布,你可以在上面画你想画的东西.当然,你还可以设置画布的属性,如画布的颜色/尺寸等.Canvas提供了如下一些方法: Canvas() ...

  4. 树莓派 Zero W——随身钥匙扣

    前言 原创文章,转载引用务必注明链接.水平有限,如有疏漏,欢迎指正. 本文使用Markdown写成,为获得更好的阅读体验和正确的格式显示,请访问我的博客原文: http://www.cnblogs.c ...

  5. react 获取 input 的值

    1.通过 onChange -- e.target.value class App extends Component { state = { username: '张三' }; // 用户名 get ...

  6. 3.nginx反向代理服务器+负载均衡

    nginx反向代理服务器+负载均衡 用nginx做反向代理和负载均衡非常简单, 支持两个用法: 1个proxy, 1个upstream,分别用来做反向代理,和负载均衡 以反向代理为例, nginx不自 ...

  7. Long-term stable release maintenance

    http://en.wikipedia.org/wiki/Linux_kernel 2014.5.28 2.6.32 2 December 2009[122] 2.6.32.62[123] Willy ...

  8. [转] git clone 远程分支

    git clone只能clone远程库的master分支,无法clone所有分支,解决办法如下: 找一个干净目录,假设是git_work cd git_work git clone http://my ...

  9. SVG 签名动画 制作

    不知道哪天看到的一个朋友圈里面有发的什么什么免费教签名之类的,就看了下SVG,做这功能还不错. 主要用到的几个属性,需要自行百度一下,不详说  stroke-dashoffset ,  stroke- ...

  10. matlab2016b -ubuntu 1604 -install- and -trouble -shooting--finally-all is ok!!

    Linux系统下安装matlab2016b 标签: ubuntumatlablinux 2016-09-24 22:11 16203人阅读 评论(22) 收藏 举报 分类: linux 版权声明:本文 ...