rename images directory to _images
|
@ -1,11 +1,11 @@
|
||||||
Docker —— 从入门到实践
|
Docker —— 从入门到实践
|
||||||
===============
|
===============
|
||||||
|
|
||||||
v0.1.6
|
v0.1.8
|
||||||
|
|
||||||
[Docker](docker.com)是个伟大的项目,它彻底释放了虚拟化的威力!
|
[Docker](docker.com)是个伟大的项目,它让虚拟化变得前所未有的高效和轻松,彻底释放了虚拟化的威力!
|
||||||
|
|
||||||
本书最初源于[WaitFish](mailto:dwj_wz@163.com)的"Docker学习手册v1.0" pdf内容,后来,[yeasy](github.com/yeasy)
|
本书最初源于[WaitFish](mailto:dwj_wz@163.com)的"Docker学习手册v1.0" pdf内容。后来,[yeasy](github.com/yeasy)
|
||||||
根据最新Docker版本对内容进行了修订和重写,并增加了部分内容;与[WaitFish](mailto:dwj_wz@163.com)协商,将所有内容开源,采用互联网合作的方式进行创作和维护。
|
根据最新Docker版本对内容进行了修订和重写,并增加了部分内容;与[WaitFish](mailto:dwj_wz@163.com)协商,将所有内容开源,采用互联网合作的方式进行创作和维护。
|
||||||
|
|
||||||
本书既适用于具备基础Linux知识的Docker初学者,也可供希望理解原理和底层实现的高级用户参考。同时,本书中给出的实践案例,可供在进行实际部署时借鉴。
|
本书既适用于具备基础Linux知识的Docker初学者,也可供希望理解原理和底层实现的高级用户参考。同时,本书中给出的实践案例,可供在进行实际部署时借鉴。
|
||||||
|
@ -16,6 +16,6 @@ v0.1.6
|
||||||
.com/yeasy/docker_practice)。
|
.com/yeasy/docker_practice)。
|
||||||
欢迎大家参与,提交pull request。
|
欢迎大家参与,提交pull request。
|
||||||
|
|
||||||
另外,欢迎大家加入QQ群(341410255)一起交流学习,共同提高。
|
另外,欢迎大家加入Docker QQ群(341410255)一起交流学习,共同提高。
|
||||||
|
|
||||||
本书发布时,docker的最新版本为1.20。
|
本书发布时,docker的最新版本为1.20。
|
||||||
|
|
Before Width: | Height: | Size: 38 KiB After Width: | Height: | Size: 38 KiB |
Before Width: | Height: | Size: 29 KiB After Width: | Height: | Size: 29 KiB |
Before Width: | Height: | Size: 24 KiB After Width: | Height: | Size: 24 KiB |
Before Width: | Height: | Size: 14 KiB After Width: | Height: | Size: 14 KiB |
Before Width: | Height: | Size: 100 KiB After Width: | Height: | Size: 100 KiB |
Before Width: | Height: | Size: 42 KiB After Width: | Height: | Size: 42 KiB |
Before Width: | Height: | Size: 56 KiB After Width: | Height: | Size: 56 KiB |
Before Width: | Height: | Size: 16 KiB After Width: | Height: | Size: 16 KiB |
|
@ -1,9 +1,10 @@
|
||||||
#docker高级网络配置
|
#高级网络配置
|
||||||
当docker启动时,会在主机上创建一个docker0的虚拟网卡。他随机挑选RFC1918私有网络中的一段地址给docker0。比如172.17.42.1/16,16位掩码的网段可以拥有65534个地址可以使用,这对主机和容器来说应该足够了。
|
当Docker启动时,会在主机上创建一个docker0的虚拟网卡。他随机挑选RFC1918私有网络中的一段地址给docker0。比如`172.17.42.1/16`,16位掩码的网段可以提供65534个地址供使用,这对主机和容器来说应该足够了。
|
||||||
注意:本章介绍docker的高级网络配置,一般情况下你不需要知道这些也可以使docker正常工作。简单的网络配置和介绍请看第五章内容。
|
|
||||||
|
本章将介绍Docker的高级网络配置,一般情况下你不需要知道这些也可以使Docker正常工作。简单的网络配置和介绍请看第五章内容。
|
||||||
docker0 不是普通的网卡,他是桥接到其他网卡的虚拟网卡,容器使用它来和主机相互通信。当创建一个docker容器的时候,它就创建了一个对接口,当数据包发送到一个接口时,另外一个接口也可以收到相同的数据包,它们是绑在一起的一对孪生接口。这对接口在容器中那一端的的名字是eth0,宿主主机端的会指定一个唯一的名字,比如vethAQI2QT这样的名字,这种接口名字不再主机的命名空间中。所有的veth*的接口都会桥接到docker0,这样docker就创建了在主机和所有容器之间一个虚拟共享网络。
|
docker0 不是普通的网卡,他是桥接到其他网卡的虚拟网卡,容器使用它来和主机相互通信。当创建一个docker容器的时候,它就创建了一个对接口,当数据包发送到一个接口时,另外一个接口也可以收到相同的数据包,它们是绑在一起的一对孪生接口。这对接口在容器中那一端的的名字是eth0,宿主主机端的会指定一个唯一的名字,比如vethAQI2QT这样的名字,这种接口名字不再主机的命名空间中。所有的veth*的接口都会桥接到docker0,这样docker就创建了在主机和所有容器之间一个虚拟共享网络。
|
||||||
|
|
||||||
|
|
||||||
![Docker网络](../images/docker0.png)
|
![Docker网络](../_images/docker0.png)
|
||||||
|
|
||||||
接下来的部分将介绍在一些场景中,docker所有的网络定制配置。linux的原生命令将调整、补充、甚至替换docker默认的网络配置。
|
接下来的部分将介绍在一些场景中,docker所有的网络定制配置。linux的原生命令将调整、补充、甚至替换docker默认的网络配置。
|
||||||
|
|
|
@ -3,7 +3,7 @@ docker采用了C/S架构,包括client端和daemon端。
|
||||||
docker daemon作为server端接受来自client的请求,并处理这些请求(创建、运行、分发容器)。
|
docker daemon作为server端接受来自client的请求,并处理这些请求(创建、运行、分发容器)。
|
||||||
client端和server端既可以运行在一个机器上,也可通过socket或者RESTful API来进行通信。
|
client端和server端既可以运行在一个机器上,也可通过socket或者RESTful API来进行通信。
|
||||||
|
|
||||||
![Docker基本架构](../images/docker_arch.png)
|
![Docker基本架构](../_images/docker_arch.png)
|
||||||
|
|
||||||
|
|
||||||
Docker daemon一般在宿主主机后台运行,等待接收来自client端的消息。
|
Docker daemon一般在宿主主机后台运行,等待接收来自client端的消息。
|
||||||
|
|
|
@ -163,6 +163,6 @@ docker的命令可以采用`docker-CMD`或者`docker CMD`的方式执行。两
|
||||||
docker-wait(1)
|
docker-wait(1)
|
||||||
阻塞直到一个容器终止,然后输出它的退出符
|
阻塞直到一个容器终止,然后输出它的退出符
|
||||||
|
|
||||||
##一张图总结docker的命令周期
|
##一张图总结Docker的命令
|
||||||
|
|
||||||
![命令周期](../images/cmd_logic.png)
|
![命令周期](../_images/cmd_logic.png)
|
||||||
|
|
|
@ -25,9 +25,9 @@ Docker的基础是Linux的容器技术(LXC)。
|
||||||
|
|
||||||
下面的图片比较了Docker和传统虚拟化方式的不同之处,可见容器是在操作系统层面上实现虚拟化,直接复用本地主机的操作系统,而传统方式则是在硬件层面实现。
|
下面的图片比较了Docker和传统虚拟化方式的不同之处,可见容器是在操作系统层面上实现虚拟化,直接复用本地主机的操作系统,而传统方式则是在硬件层面实现。
|
||||||
|
|
||||||
![传统虚拟化](../images/virtualization.png)
|
![传统虚拟化](../_images/virtualization.png)
|
||||||
|
|
||||||
![Docker](../images/docker.png)
|
![Docker](../_images/docker.png)
|
||||||
|
|
||||||
|
|
||||||
##为什么要使用docker?
|
##为什么要使用docker?
|
||||||
|
|
|
@ -28,7 +28,7 @@ root@ac6474aeb31d:~# ip a
|
||||||
|
|
||||||
###拓扑图
|
###拓扑图
|
||||||
主机A和主机B的网卡一都连着物理交换机的同一个vlan 101,这样网桥一和网桥三就相当于在同一个物理网络中了,而容器一、容器三、容器四也在同一物理网络中了,他们之间可以相互通信,而且可以跟同一vlan中的其他物理机器互联。
|
主机A和主机B的网卡一都连着物理交换机的同一个vlan 101,这样网桥一和网桥三就相当于在同一个物理网络中了,而容器一、容器三、容器四也在同一物理网络中了,他们之间可以相互通信,而且可以跟同一vlan中的其他物理机器互联。
|
||||||
![物理拓扑图](../images/container_connect_topology.png)
|
![物理拓扑图](../_images/container_connect_topology.png)
|
||||||
|
|
||||||
###ubuntu示例
|
###ubuntu示例
|
||||||
下面以ubuntu为例创建多个主机的容器联网:
|
下面以ubuntu为例创建多个主机的容器联网:
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
docker对于中小企业来说,搭建paas没有那个精力,也没那个必要,用做个人的sandbox用处又小了点,个人认为作为中小企业可以用docker来标准化开发、测试、生产环境。
|
docker对于中小企业来说,搭建paas没有那个精力,也没那个必要,用做个人的sandbox用处又小了点,个人认为作为中小企业可以用docker来标准化开发、测试、生产环境。
|
||||||
|
|
||||||
|
|
||||||
![企业应用结构](../images/enterprise_usage.png)
|
![企业应用结构](../_images/enterprise_usage.png)
|
||||||
|
|
||||||
|
|
||||||
docker占用资源小,在一台E5 128G内存的服务器服务器上部署100个容器都绰绰有余,可以单独抽一个容器或则直接在宿主物理主机上部署samba,利用samba的home分享方案将每个用户的home目录映射到开发中心和测试部门的windows机器上。可以针对项目组,由架构师搭建好一个标准的容器环境供项目组和测试部门使用,每个开发工程师可以拥有自己单独的容器,通过docker run -v 将用户的home目录映射到容器中。需要提交测试时,只需要将代码移交给测试部门,然后分配一个容器使用-v 加载测试部门的home目录启动即可。这样,在公司内部的开发、测试基本就统一了,不会出现开发提交的代码,测试 部门部署不了的问题。
|
docker占用资源小,在一台E5 128G内存的服务器服务器上部署100个容器都绰绰有余,可以单独抽一个容器或则直接在宿主物理主机上部署samba,利用samba的home分享方案将每个用户的home目录映射到开发中心和测试部门的windows机器上。可以针对项目组,由架构师搭建好一个标准的容器环境供项目组和测试部门使用,每个开发工程师可以拥有自己单独的容器,通过docker run -v 将用户的home目录映射到容器中。需要提交测试时,只需要将代码移交给测试部门,然后分配一个容器使用-v 加载测试部门的home目录启动即可。这样,在公司内部的开发、测试基本就统一了,不会出现开发提交的代码,测试 部门部署不了的问题。
|
||||||
|
|