rename images directory to _images

pull/3/head
Baohua Yang 2014-09-17 14:52:55 +08:00
parent c50e2aaf60
commit 389c15d748
18 changed files with 35 additions and 34 deletions

View File

@ -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。

View File

Before

Width:  |  Height:  |  Size: 38 KiB

After

Width:  |  Height:  |  Size: 38 KiB

View File

Before

Width:  |  Height:  |  Size: 29 KiB

After

Width:  |  Height:  |  Size: 29 KiB

View File

Before

Width:  |  Height:  |  Size: 24 KiB

After

Width:  |  Height:  |  Size: 24 KiB

View File

Before

Width:  |  Height:  |  Size: 14 KiB

After

Width:  |  Height:  |  Size: 14 KiB

View File

Before

Width:  |  Height:  |  Size: 100 KiB

After

Width:  |  Height:  |  Size: 100 KiB

View File

Before

Width:  |  Height:  |  Size: 42 KiB

After

Width:  |  Height:  |  Size: 42 KiB

View File

Before

Width:  |  Height:  |  Size: 56 KiB

After

Width:  |  Height:  |  Size: 56 KiB

View File

Before

Width:  |  Height:  |  Size: 16 KiB

After

Width:  |  Height:  |  Size: 16 KiB

View File

@ -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默认的网络配置。

View File

@ -13,7 +13,7 @@ MASQUERADE all -- 172.17.0.0/16 !172.17.0.0/16
``` ```
当你希望容器接收外部连接时你需要在docker run执行的时候就指定对应选项第五章详细介绍了2种方法 当你希望容器接收外部连接时你需要在docker run执行的时候就指定对应选项第五章详细介绍了2种方法
* 指定-P --publish-all=true|false 选项会映射dockerfile * 指定-P --publish-all=true|false 选项会映射dockerfile
中expose的所有端口主机端口在49000-49900中随机挑选。当你的另外一个容器需要学习这个端口时候很不方便。 中expose的所有端口主机端口在49000-49900中随机挑选。当你的另外一个容器需要学习这个端口时候很不方便。
* 指定-p SPEC或则 --publish=SPEC,可以指定任意端口从主机映射容器内部 * 指定-p SPEC或则 --publish=SPEC,可以指定任意端口从主机映射容器内部
@ -32,6 +32,6 @@ target prot opt source destination
DNAT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:80 to:172.17.0.2:80 DNAT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:80 to:172.17.0.2:80
``` ```
注意: 注意:
* 这里看到docker映射了0.0.0.0.它接受主机上的所有接口地址。可以通过-p IP:host_port:container_port 或则 -p * 这里看到docker映射了0.0.0.0.它接受主机上的所有接口地址。可以通过-p IP:host_port:container_port 或则 -p
IP::port 来指定主机上的ip、接口制定更严格的规则。 IP::port 来指定主机上的ip、接口制定更严格的规则。
* 如果你希望永久改变绑定的主机ip地址可以 在dcoker 配置中指定--ip=IP_ADDRESS. 记得重启服务。 * 如果你希望永久改变绑定的主机ip地址可以 在dcoker 配置中指定--ip=IP_ADDRESS. 记得重启服务。

View File

@ -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端的消息。

View File

@ -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)

View File

@ -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

View File

@ -1,7 +1,7 @@
##多台物理主机之间的容器互联(暴露容器到真实网络中) ##多台物理主机之间的容器互联(暴露容器到真实网络中)
docker 默认的桥接网卡是docker0。它只会在本机桥接所有的容器网卡举例来说容器的虚拟网卡在主机上看一般叫做veth*** 而docker只是把所有这些网卡桥接在一起如下 docker 默认的桥接网卡是docker0。它只会在本机桥接所有的容器网卡举例来说容器的虚拟网卡在主机上看一般叫做veth*** 而docker只是把所有这些网卡桥接在一起如下
``` ```
[root@opnvz ~]# brctl show [root@opnvz ~]# brctl show
bridge name bridge id STP enabled interfaces bridge name bridge id STP enabled interfaces
docker0 8000.56847afe9799 no veth0889 docker0 8000.56847afe9799 no veth0889
veth3c7b veth3c7b
@ -10,17 +10,17 @@ docker0 8000.56847afe9799 no veth0889
在容器中看到的地址一般是像下面这样的地址: 在容器中看到的地址一般是像下面这样的地址:
``` ```
root@ac6474aeb31d:~# ip a root@ac6474aeb31d:~# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 1500 qdisc noqueue state UNKNOWN group default 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 1500 qdisc noqueue state UNKNOWN group default
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever valid_lft forever preferred_lft forever
inet6 ::1/128 scope host inet6 ::1/128 scope host
valid_lft forever preferred_lft forever valid_lft forever preferred_lft forever
11: eth0: <BROADCAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000 11: eth0: <BROADCAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 4a:7d:68:da:09:cf brd ff:ff:ff:ff:ff:ff link/ether 4a:7d:68:da:09:cf brd ff:ff:ff:ff:ff:ff
inet 172.17.0.3/16 scope global eth0 inet 172.17.0.3/16 scope global eth0
valid_lft forever preferred_lft forever valid_lft forever preferred_lft forever
inet6 fe80::487d:68ff:feda:9cf/64 scope link inet6 fe80::487d:68ff:feda:9cf/64 scope link
valid_lft forever preferred_lft forever valid_lft forever preferred_lft forever
``` ```
这样就可以把这个网络看成是一个私有的网络通过nat 连接外网,如果要让外网连接到容器中,就需要做端口映射,即-p参数更多原理参见本文第六小节 这样就可以把这个网络看成是一个私有的网络通过nat 连接外网,如果要让外网连接到容器中,就需要做端口映射,即-p参数更多原理参见本文第六小节
@ -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为例创建多个主机的容器联网:
@ -68,10 +68,10 @@ DOCKER_OPTS="-b=br0"
``` ```
root@ubuntudocker:~# docker ps root@ubuntudocker:~# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
58b043aa05eb desk_hz:v1 "/startup.sh" 5 days ago Up 2 seconds 5900/tcp, 6080/tcp, 22/tcp yanlx 58b043aa05eb desk_hz:v1 "/startup.sh" 5 days ago Up 2 seconds 5900/tcp, 6080/tcp, 22/tcp yanlx
root@ubuntudocker:~# brctl show root@ubuntudocker:~# brctl show
bridge name bridge id STP enabled interfaces bridge name bridge id STP enabled interfaces
br0 8000.7e6e617c8d53 no em1 br0 8000.7e6e617c8d53 no em1
vethe6e5 vethe6e5
``` ```
这样就直接把容器暴露到你的物理网络上了,多台物理主机的容器也可以相互联网了。需要注意的是,这样就需要自己来保证容器的网络安全了。 这样就直接把容器暴露到你的物理网络上了,多台物理主机的容器也可以相互联网了。需要注意的是,这样就需要自己来保证容器的网络安全了。

View File

@ -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目录启动即可。这样在公司内部的开发、测试基本就统一了不会出现开发提交的代码测试 部门部署不了的问题。

View File

@ -25,12 +25,12 @@ ubuntu 14.04 05ac7c0b9383 17 seconds ago
###创建私有仓库 ###创建私有仓库
官方指南称最简单的办法是 docker run -p 5000:5000 registry如果被墙了也无法下载该images。感谢CSDN我有一个1M的腾讯云服务器上面搭建了一个私有仓库大家可以使用 官方指南称最简单的办法是 docker run -p 5000:5000 registry如果被墙了也无法下载该images。感谢CSDN我有一个1M的腾讯云服务器上面搭建了一个私有仓库大家可以使用
docker pull 203.195.193.251:5000/registry docker pull 203.195.193.251:5000/registry
到我的服务器下载 速度虽然慢点,但有保证! 到我的服务器下载 速度虽然慢点,但有保证!
另外的方法是使用刚才的创建的ubuntu来创建官方有个docker仓库的源码地址 https://github.com/dotcloud/docker-registry 下载私有仓库的源码可以根据上面的docker file来创建。 另外的方法是使用刚才的创建的ubuntu来创建官方有个docker仓库的源码地址 https://github.com/dotcloud/docker-registry 下载私有仓库的源码可以根据上面的docker file来创建。
也可以参考: 也可以参考:
http://www.vpsee.com/2013/11/build-your-own-docker-private-regsitry-service/ http://www.vpsee.com/2013/11/build-your-own-docker-private-regsitry-service/
###在私有仓库上传、下载、搜索images ###在私有仓库上传、下载、搜索images
创建好自己的私有仓库之后可以使用docker tag 一个镜像然后push然后在别的机器上pull下来就好了。这样我们的局域网私有docker仓库就搭建好了。 创建好自己的私有仓库之后可以使用docker tag 一个镜像然后push然后在别的机器上pull下来就好了。这样我们的局域网私有docker仓库就搭建好了。
步骤如下: 步骤如下:
@ -70,7 +70,7 @@ apt-get install curl
``` ```
root ~ # apt-get install curl root ~ # apt-get install curl
Reading package lists... Done Reading package lists... Done
Building dependency tree Building dependency tree
Reading state information... Done Reading state information... Done
The following NEW packages will be installed: The following NEW packages will be installed:
curl curl
@ -93,15 +93,15 @@ root ~ # curl http://192.168.7.26:5000/v1/search
``` ```
[root@opnvz ~]# docker pull 192.168.7.26:5000/test [root@opnvz ~]# docker pull 192.168.7.26:5000/test
Pulling repository 192.168.7.26:5000/test Pulling repository 192.168.7.26:5000/test
ba5877dc9bec: Download complete ba5877dc9bec: Download complete
511136ea3c5a: Download complete 511136ea3c5a: Download complete
9bad880da3d2: Download complete 9bad880da3d2: Download complete
25f11f5fb0cb: Download complete 25f11f5fb0cb: Download complete
ebc34468f71d: Download complete ebc34468f71d: Download complete
2318d26665ef: Download complete 2318d26665ef: Download complete
[root@opnvz ~]# docker images [root@opnvz ~]# docker images
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
192.168.7.26:5000/test latest ba5877dc9bec 6 weeks ago 192.7 MB 192.168.7.26:5000/test latest ba5877dc9bec 6 weeks ago 192.7 MB
``` ```
这样我们就可以在新的机器上使用这个images了 这样我们就可以在新的机器上使用这个images了