From 1065a728ce21507117eedbdbb63099cf89e0b1c3 Mon Sep 17 00:00:00 2001 From: Baohua Yang Date: Wed, 17 Sep 2014 23:25:32 +0800 Subject: [PATCH] minor fix --- README.md | 2 +- SUMMARY.md | 7 ++++++- advanced_network/how_connect.md | 12 +++++++----- install/README.md | 2 +- 4 files changed, 15 insertions(+), 8 deletions(-) diff --git a/README.md b/README.md index d3995dd..54a4db6 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,7 @@ Docker —— 从入门到实践 =============== -v0.1.9 +v0.1.10 [Docker](docker.com)是个伟大的项目,它让虚拟化变得前所未有的高效和轻松,彻底释放了虚拟化的威力! diff --git a/SUMMARY.md b/SUMMARY.md index 8174df0..e31a5fb 100644 --- a/SUMMARY.md +++ b/SUMMARY.md @@ -53,7 +53,12 @@ * [其他内核安全特性](container_security/other_feature.md) * [结论](container_security/summary.md) * [Dockerfile](dockerfile/README.md) -* [底层实现](arch/README.md) +* [底层实现](underly/README.md) + * [基本架构](underly/arch.md) + * [名字空间](underly/namespace.md) + * [控制组](underly/cgroups.md) + * [Union文件系统](underly/ufs.md) + * [容器格式](underly/container_format.md) * [实战案例](practice/README.md) * [部署本地仓库](practice/local_repo.md) * [使用 Supervisor来管理进程](practice/supervisor.md) diff --git a/advanced_network/how_connect.md b/advanced_network/how_connect.md index 6873ab2..559c429 100644 --- a/advanced_network/how_connect.md +++ b/advanced_network/how_connect.md @@ -1,21 +1,23 @@ ##Docker 如何连接到容器? 让我们回顾一些基础知识: -机器需要一个网络接口来发送和接受数据包,路由表来定义如何到达哪些地址段。这里的网络接口可以不是物理接口。事实上,每个linxu机器上的lo环回接口(docker 容器中也有)就是一个完全的linux内核虚拟接口,它直接复制发送缓存中的数据包到接收缓存中。docker让宿主主机和容器使用特殊的虚拟接口来通信--通信的2端叫“peers“,他们在主机内核中连接在一起,所以能够相互通信。创建他们很简单,前面介绍过了。 +机器需要一个网络接口来发送和接受数据包,路由表来定义如何到达哪些地址段。这里的网络接口可以不是物理接口。 + +事实上,每个linxu机器上的lo环回接口(Docker 容器中也有)就是一个完整的linux内核虚拟接口,它直接复制发送缓存中的数据包到接收缓存中。Docker让宿主主机和容器使用特殊的虚拟接口来通信--通信的2端叫“peers“,他们在主机内核中连接在一起,所以能够相互通信。创建他们很简单,前面介绍过了。 docker创建容器的步骤如下: * 创建一对虚拟接口 * 其中宿主主机一端使用一个名字比如veth65f9,他是唯一的,另外一端桥接到默认的docker0,或其它你指定的桥接网卡。 -* 主机上的veth65f9这种接口映射到新的新容器中的名称通常是eth0,在容器这个隔离的network namespace +* 主机上的veth65f9这种接口映射到新的新容器中的名称通常是eth0,在容器这个隔离的network namespace 中,它是唯一的,不会有其他接口名字和它冲突。 * 从主机桥接网卡的地址段中获取一个空闲地址给eth0使用,并设定默认路由到桥接网卡。 * 完成这些之后,容器就可以使用这eth0虚拟网卡来连接其他容器和其他网络。 - + 你也可以为特殊的容器设定特定的参数,在docker run的时候使用--net,它有4个可选参数: * --net=bridge — .默认连接到docker0网桥。 * --net=host — 告诉docker不要将容器放到隔离的网络堆栈中。从本质上讲,这个选项告诉docker 不要容器化容器的网络!尽管容器还是有自己的文件系统、进程列表和资源限制。但使用ip addr命令这样命令就可以知道实际上此时的的容器处于和docker 宿主主机的一样的网络级别,它拥有完全的宿主主机接口访问权限。虽然它不允许容器重新配置主机的网络堆栈,除非--privileged=true — 但是容器进程可以跟其他root进程一样可以打开低数字的端口,可以访问本地网络服务比如D-bus,还可以让容器做一些意想不到的事情,比如重启主机,使用这个选项的时候要非常小心! -* --net=container:NAME_or_ID — +* --net=container:NAME_or_ID — 告诉docker将新容器的进程放到一个已经存在的容器的网络堆栈中,新容器进程有它自己的文件系统、进程列表和资源限制,但它会和那个已经存在的容器共享ip地址和端口,他们之间来可以通过环回接口通信。 * --net=none — 告诉docker将新容器放到自己的网络堆栈中,但是不要配置它的网络, 类似于vmware的host-only。这可以让你创建任何自定义的配置,本文最后一段将介绍 他们。 @@ -33,7 +35,7 @@ $ sudo docker inspect -f '{{.State.Pid}}' 63f36fc01b5f 2778 $ pid=2778 $ sudo mkdir -p /var/run/netns -$ sudo ln -s /proc/$pid/ns/net /var/run/netns/$pid +$ sudo ln -s /proc/$pid/ns/net /var/run/netns/$pid ``` 检查桥接网卡的ip和子网掩码 ``` diff --git a/install/README.md b/install/README.md index 3d389d3..94c43a8 100644 --- a/install/README.md +++ b/install/README.md @@ -1,2 +1,2 @@ #安装 -官方网站上有各个linux发行版的安装指南,这里介绍下centos和ubuntu的安装。 +官方网站上有各种环境下的[安装指南](https://docs.docker.com/installation/),这里介绍下centos和ubuntu的安装。