Skip to content

Commit

Permalink
rename images directory to _images
Browse files Browse the repository at this point in the history
  • Loading branch information
yeasy committed Sep 17, 2014
1 parent c50e2aa commit 389c15d
Show file tree
Hide file tree
Showing 18 changed files with 35 additions and 34 deletions.
8 changes: 4 additions & 4 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
Docker —— 从入门到实践
===============

v0.1.6
v0.1.8

[Docker](docker.com)是个伟大的项目,它彻底释放了虚拟化的威力
[Docker](docker.com)是个伟大的项目,它让虚拟化变得前所未有的高效和轻松,彻底释放了虚拟化的威力

本书最初源于[WaitFish](mailto:[email protected])的"Docker学习手册v1.0" pdf内容后来,[yeasy](github.com/yeasy)
本书最初源于[WaitFish](mailto:[email protected])的"Docker学习手册v1.0" pdf内容后来,[yeasy](github.com/yeasy)
根据最新Docker版本对内容进行了修订和重写,并增加了部分内容;与[WaitFish](mailto:[email protected])协商,将所有内容开源,采用互联网合作的方式进行创作和维护。

本书既适用于具备基础Linux知识的Docker初学者,也可供希望理解原理和底层实现的高级用户参考。同时,本书中给出的实践案例,可供在进行实际部署时借鉴。
Expand All @@ -16,6 +16,6 @@ v0.1.6
.com/yeasy/docker_practice)。
欢迎大家参与,提交pull request。

另外,欢迎大家加入QQ群(341410255)一起交流学习,共同提高。
另外,欢迎大家加入Docker QQ群(341410255)一起交流学习,共同提高。

本书发布时,docker的最新版本为1.20。
File renamed without changes.
File renamed without changes
File renamed without changes
File renamed without changes
File renamed without changes
File renamed without changes
File renamed without changes
File renamed without changes
File renamed without changes
9 changes: 5 additions & 4 deletions advanced_network/README.md
Original file line number Diff line number Diff line change
@@ -1,9 +1,10 @@
#docker高级网络配置
当docker启动时,会在主机上创建一个docker0的虚拟网卡。他随机挑选RFC1918私有网络中的一段地址给docker0。比如172.17.42.1/16,16位掩码的网段可以拥有65534个地址可以使用,这对主机和容器来说应该足够了。
注意:本章介绍docker的高级网络配置,一般情况下你不需要知道这些也可以使docker正常工作。简单的网络配置和介绍请看第五章内容。
#高级网络配置
当Docker启动时,会在主机上创建一个docker0的虚拟网卡。他随机挑选RFC1918私有网络中的一段地址给docker0。比如`172.17.42.1/16`,16位掩码的网段可以提供65534个地址供使用,这对主机和容器来说应该足够了。

本章将介绍Docker的高级网络配置,一般情况下你不需要知道这些也可以使Docker正常工作。简单的网络配置和介绍请看第五章内容。
docker0 不是普通的网卡,他是桥接到其他网卡的虚拟网卡,容器使用它来和主机相互通信。当创建一个docker容器的时候,它就创建了一个对接口,当数据包发送到一个接口时,另外一个接口也可以收到相同的数据包,它们是绑在一起的一对孪生接口。这对接口在容器中那一端的的名字是eth0,宿主主机端的会指定一个唯一的名字,比如vethAQI2QT这样的名字,这种接口名字不再主机的命名空间中。所有的veth*的接口都会桥接到docker0,这样docker就创建了在主机和所有容器之间一个虚拟共享网络。


![Docker网络](../images/docker0.png)
![Docker网络](../_images/docker0.png)

接下来的部分将介绍在一些场景中,docker所有的网络定制配置。linux的原生命令将调整、补充、甚至替换docker默认的网络配置。
6 changes: 3 additions & 3 deletions advanced_network/port_mapping.md
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ MASQUERADE all -- 172.17.0.0/16 !172.17.0.0/16
```

当你希望容器接收外部连接时,你需要在docker run执行的时候就指定对应选项,第五章详细介绍了2种方法:
* 指定-P --publish-all=true|false 选项会映射dockerfile
* 指定-P --publish-all=true|false 选项会映射dockerfile
中expose的所有端口,主机端口在49000-49900中随机挑选。当你的另外一个容器需要学习这个端口时候,很不方便。
* 指定-p SPEC或则 --publish=SPEC,可以指定任意端口从主机映射容器内部

Expand All @@ -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
```
注意:
* 这里看到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地址,可以 在dcoker 配置中指定--ip=IP_ADDRESS. 记得重启服务。
* 如果你希望永久改变绑定的主机ip地址,可以 在dcoker 配置中指定--ip=IP_ADDRESS. 记得重启服务。
2 changes: 1 addition & 1 deletion arch/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ docker采用了C/S架构,包括client端和daemon端。
docker daemon作为server端接受来自client的请求,并处理这些请求(创建、运行、分发容器)。
client端和server端既可以运行在一个机器上,也可通过socket或者RESTful API来进行通信。

![Docker基本架构](../images/docker_arch.png)
![Docker基本架构](../_images/docker_arch.png)


Docker daemon一般在宿主主机后台运行,等待接收来自client端的消息。
Expand Down
4 changes: 2 additions & 2 deletions command/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -163,6 +163,6 @@ docker的命令可以采用`docker-CMD`或者`docker CMD`的方式执行。两
docker-wait(1)
阻塞直到一个容器终止,然后输出它的退出符

##一张图总结docker的命令周期
##一张图总结Docker的命令

![命令周期](../images/cmd_logic.png)
![命令周期](../_images/cmd_logic.png)
4 changes: 2 additions & 2 deletions introduction/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -25,9 +25,9 @@ Docker的基础是Linux的容器技术(LXC)。

下面的图片比较了Docker和传统虚拟化方式的不同之处,可见容器是在操作系统层面上实现虚拟化,直接复用本地主机的操作系统,而传统方式则是在硬件层面实现。

![传统虚拟化](../images/virtualization.png)
![传统虚拟化](../_images/virtualization.png)

![Docker](../images/docker.png)
![Docker](../_images/docker.png)


##为什么要使用docker?
Expand Down
14 changes: 7 additions & 7 deletions practice/container_connect.md
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
##多台物理主机之间的容器互联(暴露容器到真实网络中)
docker 默认的桥接网卡是docker0。它只会在本机桥接所有的容器网卡,举例来说容器的虚拟网卡在主机上看一般叫做veth*** 而docker只是把所有这些网卡桥接在一起,如下:
```
[root@opnvz ~]# brctl show
[root@opnvz ~]# brctl show
bridge name bridge id STP enabled interfaces
docker0 8000.56847afe9799 no veth0889
veth3c7b
Expand All @@ -10,25 +10,25 @@ docker0 8000.56847afe9799 no veth0889
在容器中看到的地址一般是像下面这样的地址:
```
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
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
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
inet 172.17.0.3/16 scope global eth0
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
```
这样就可以把这个网络看成是一个私有的网络,通过nat 连接外网,如果要让外网连接到容器中,就需要做端口映射,即-p参数(更多原理参见本文第六小节)
如果在企业内部应用,或则做多个物理主机的集群,可能需要将多个物理主机的容器组到一个物理网络中来,那么就需要将这个网桥桥接到我们指定的网卡上。

###拓扑图
主机A和主机B的网卡一都连着物理交换机的同一个vlan 101,这样网桥一和网桥三就相当于在同一个物理网络中了,而容器一、容器三、容器四也在同一物理网络中了,他们之间可以相互通信,而且可以跟同一vlan中的其他物理机器互联。
![物理拓扑图](../images/container_connect_topology.png)
![物理拓扑图](../_images/container_connect_topology.png)

###ubuntu示例
下面以ubuntu为例创建多个主机的容器联网:
Expand Down Expand Up @@ -68,10 +68,10 @@ DOCKER_OPTS="-b=br0"
```
root@ubuntudocker:~# docker ps
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
bridge name bridge id STP enabled interfaces
br0 8000.7e6e617c8d53 no em1
vethe6e5
```
这样就直接把容器暴露到你的物理网络上了,多台物理主机的容器也可以相互联网了。需要注意的是,这样就需要自己来保证容器的网络安全了。
这样就直接把容器暴露到你的物理网络上了,多台物理主机的容器也可以相互联网了。需要注意的是,这样就需要自己来保证容器的网络安全了。
2 changes: 1 addition & 1 deletion practice/environment.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
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目录启动即可。这样,在公司内部的开发、测试基本就统一了,不会出现开发提交的代码,测试 部门部署不了的问题。
Expand Down
20 changes: 10 additions & 10 deletions practice/local_repo.md
Original file line number Diff line number Diff line change
Expand Up @@ -25,12 +25,12 @@ ubuntu 14.04 05ac7c0b9383 17 seconds ago
###创建私有仓库
官方指南称最简单的办法是 docker run -p 5000:5000 registry,如果被墙了,也无法下载该images。感谢CSDN,我有一个1M的腾讯云服务器,上面搭建了一个私有仓库大家可以使用
docker pull 203.195.193.251:5000/registry
到我的服务器下载 速度虽然慢点,但有保证!
到我的服务器下载 速度虽然慢点,但有保证!
另外的方法是使用刚才的创建的ubuntu来创建,官方有个docker仓库的源码地址 https://github.com/dotcloud/docker-registry 下载私有仓库的源码,可以根据上面的docker file来创建。

也可以参考:
http://www.vpsee.com/2013/11/build-your-own-docker-private-regsitry-service/

###在私有仓库上传、下载、搜索images
创建好自己的私有仓库之后,可以使用docker tag 一个镜像,然后push,然后在别的机器上pull下来就好了。这样我们的局域网私有docker仓库就搭建好了。
步骤如下:
Expand Down Expand Up @@ -70,7 +70,7 @@ apt-get install curl
```
root ~ # apt-get install curl
Reading package lists... Done
Building dependency tree
Building dependency tree
Reading state information... Done
The following NEW packages will be installed:
curl
Expand All @@ -93,15 +93,15 @@ root ~ # curl http://192.168.7.26:5000/v1/search
```
[root@opnvz ~]# docker pull 192.168.7.26:5000/test
Pulling repository 192.168.7.26:5000/test
ba5877dc9bec: Download complete
511136ea3c5a: Download complete
9bad880da3d2: Download complete
25f11f5fb0cb: Download complete
ebc34468f71d: Download complete
2318d26665ef: Download complete
ba5877dc9bec: Download complete
511136ea3c5a: Download complete
9bad880da3d2: Download complete
25f11f5fb0cb: Download complete
ebc34468f71d: Download complete
2318d26665ef: Download complete
[root@opnvz ~]# docker images
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
192.168.7.26:5000/test latest ba5877dc9bec 6 weeks ago 192.7 MB
```

这样我们就可以在新的机器上使用这个images了!
这样我们就可以在新的机器上使用这个images了!

0 comments on commit 389c15d

Please sign in to comment.