Update figure location
Before Width: | Height: | Size: 43 KiB |
Before Width: | Height: | Size: 29 KiB |
Before Width: | Height: | Size: 56 KiB |
Before Width: | Height: | Size: 32 KiB |
Before Width: | Height: | Size: 18 KiB |
Before Width: | Height: | Size: 137 KiB |
Before Width: | Height: | Size: 103 KiB |
@ -7,6 +7,6 @@
|
|||||||
|
|
||||||
当创建一个 Docker 容器的时候,同时会创建了一对 `veth pair` 接口(当数据包发送到一个接口时,另外一个接口也可以收到相同的数据包)。这对接口一端在容器内,即 `eth0`;另一端在本地并被挂载到 `docker0` 网桥,名称以 `veth` 开头(例如 `vethAQI2QT`)。通过这种方式,主机可以跟容器通信,容器之间也可以相互通信。Docker 就创建了在主机和所有容器之间一个虚拟共享网络。
|
当创建一个 Docker 容器的时候,同时会创建了一对 `veth pair` 接口(当数据包发送到一个接口时,另外一个接口也可以收到相同的数据包)。这对接口一端在容器内,即 `eth0`;另一端在本地并被挂载到 `docker0` 网桥,名称以 `veth` 开头(例如 `vethAQI2QT`)。通过这种方式,主机可以跟容器通信,容器之间也可以相互通信。Docker 就创建了在主机和所有容器之间一个虚拟共享网络。
|
||||||
|
|
||||||
![Docker 网络](../_images/network.png)
|
![Docker 网络](_images/network.png)
|
||||||
|
|
||||||
接下来的部分将介绍在一些场景中,Docker 所有的网络定制配置。以及通过 Linux 命令来调整、补充、甚至替换 Docker 默认的网络配置。
|
接下来的部分将介绍在一些场景中,Docker 所有的网络定制配置。以及通过 Linux 命令来调整、补充、甚至替换 Docker 默认的网络配置。
|
||||||
|
Before Width: | Height: | Size: 48 KiB After Width: | Height: | Size: 48 KiB |
Before Width: | Height: | Size: 12 KiB After Width: | Height: | Size: 12 KiB |
@ -1,6 +1,6 @@
|
|||||||
## Compose 简介
|
## Compose 简介
|
||||||
|
|
||||||
![Docker Compose 项目](../_images/docker_compose.jpg)
|
![Docker Compose 项目](_images/docker_compose.jpg)
|
||||||
|
|
||||||
Compose 项目是 Docker 官方的开源项目,负责实现对 Docker 容器集群的快速编排。从功能上看,跟 OpenStack 中的 Heat 十分类似。
|
Compose 项目是 Docker 官方的开源项目,负责实现对 Docker 容器集群的快速编排。从功能上看,跟 OpenStack 中的 Heat 十分类似。
|
||||||
|
|
||||||
|
Before Width: | Height: | Size: 4.4 KiB After Width: | Height: | Size: 4.4 KiB |
@ -1,6 +1,6 @@
|
|||||||
## 什么是 etcd
|
## 什么是 etcd
|
||||||
|
|
||||||
![](../_images/etcd_logo.png)
|
![](_images/etcd_logo.png)
|
||||||
|
|
||||||
etcd 是 CoreOS 团队于 2013 年 6 月发起的开源项目,它的目标是构建一个高可用的分布式键值(key-value)数据库,基于 Go 语言实现。我们知道,在分布式系统中,各种服务的配置信息的管理分享,服务的发现是一个很基本同时也是很重要的问题。CoreOS 项目就希望基于 etcd 来解决这一问题。
|
etcd 是 CoreOS 团队于 2013 年 6 月发起的开源项目,它的目标是构建一个高可用的分布式键值(key-value)数据库,基于 Go 语言实现。我们知道,在分布式系统中,各种服务的配置信息的管理分享,服务的发现是一个很基本同时也是很重要的问题。CoreOS 项目就希望基于 etcd 来解决这一问题。
|
||||||
|
|
||||||
|
Before Width: | Height: | Size: 77 KiB After Width: | Height: | Size: 77 KiB |
@ -16,7 +16,7 @@ docker run --name webserver -d -p 80:80 nginx
|
|||||||
|
|
||||||
直接用浏览器访问的话,我们会看到默认的 Nginx 欢迎页面。
|
直接用浏览器访问的话,我们会看到默认的 Nginx 欢迎页面。
|
||||||
|
|
||||||
<img src="../_images/install-mac-example-nginx.png" width="80%" >
|
<img src="_images/install-mac-example-nginx.png" width="80%" >
|
||||||
|
|
||||||
现在,假设我们非常不喜欢这个欢迎页面,我们希望改成欢迎 Docker 的文字,我们可以使用 `docker exec` 命令进入容器,修改其内容。
|
现在,假设我们非常不喜欢这个欢迎页面,我们希望改成欢迎 Docker 的文字,我们可以使用 `docker exec` 命令进入容器,修改其内容。
|
||||||
|
|
||||||
@ -33,7 +33,7 @@ exit
|
|||||||
|
|
||||||
现在我们再刷新浏览器的话,会发现内容被改变了。
|
现在我们再刷新浏览器的话,会发现内容被改变了。
|
||||||
|
|
||||||
<img src="../_images/images-create-nginx-docker.png" width="80%" >
|
<img src="_images/images-create-nginx-docker.png" width="80%" >
|
||||||
|
|
||||||
我们修改了容器的文件,也就是改动了容器的存储层。我们可以通过 `docker diff` 命令看到具体的改动。
|
我们修改了容器的文件,也就是改动了容器的存储层。我们可以通过 `docker diff` 命令看到具体的改动。
|
||||||
|
|
||||||
|
Before Width: | Height: | Size: 660 KiB After Width: | Height: | Size: 660 KiB |
Before Width: | Height: | Size: 291 KiB After Width: | Height: | Size: 291 KiB |
Before Width: | Height: | Size: 101 KiB After Width: | Height: | Size: 101 KiB |
Before Width: | Height: | Size: 88 KiB After Width: | Height: | Size: 88 KiB |
Before Width: | Height: | Size: 20 KiB After Width: | Height: | Size: 20 KiB |
Before Width: | Height: | Size: 146 KiB After Width: | Height: | Size: 146 KiB |
Before Width: | Height: | Size: 59 KiB After Width: | Height: | Size: 59 KiB |
@ -20,29 +20,29 @@ brew cask install docker
|
|||||||
|
|
||||||
如同 macOS 其它软件一样,安装也非常简单,双击下载的 `.dmg` 文件,然后将那只叫 [Moby](https://blog.docker.com/2013/10/call-me-moby-dock/) 的鲸鱼图标拖拽到 `Application` 文件夹即可(其间可能会询问系统密码)。
|
如同 macOS 其它软件一样,安装也非常简单,双击下载的 `.dmg` 文件,然后将那只叫 [Moby](https://blog.docker.com/2013/10/call-me-moby-dock/) 的鲸鱼图标拖拽到 `Application` 文件夹即可(其间可能会询问系统密码)。
|
||||||
|
|
||||||
<img src="../_images/install-mac-dmg.png" width="80%" >
|
<img src="_images/install-mac-dmg.png" width="80%" >
|
||||||
|
|
||||||
### 运行
|
### 运行
|
||||||
|
|
||||||
从应用中找到 Docker 图标并点击运行。
|
从应用中找到 Docker 图标并点击运行。
|
||||||
|
|
||||||
<img src="../_images/install-mac-apps.png" width="80%" >
|
<img src="_images/install-mac-apps.png" width="80%" >
|
||||||
|
|
||||||
运行之后,会在右上角菜单栏看到多了一个鲸鱼图标,这个图标表明了 Docker 的运行状态。
|
运行之后,会在右上角菜单栏看到多了一个鲸鱼图标,这个图标表明了 Docker 的运行状态。
|
||||||
|
|
||||||
<img src="../_images/install-mac-menubar.png" width="60%">
|
<img src="_images/install-mac-menubar.png" width="60%">
|
||||||
|
|
||||||
第一次点击图标,可能会看到这个安装成功的界面,点击 "Got it!" 可以关闭这个窗口。
|
第一次点击图标,可能会看到这个安装成功的界面,点击 "Got it!" 可以关闭这个窗口。
|
||||||
|
|
||||||
<img src="../_images/install-mac-success.png" width="40%">
|
<img src="_images/install-mac-success.png" width="40%">
|
||||||
|
|
||||||
以后每次点击鲸鱼图标会弹出操作菜单。
|
以后每次点击鲸鱼图标会弹出操作菜单。
|
||||||
|
|
||||||
<img src="../_images/install-mac-menu.png" width="40%">
|
<img src="_images/install-mac-menu.png" width="40%">
|
||||||
|
|
||||||
*在国内使用 Docker 的话,需要配置加速器,在菜单中点击 `Preferences...`,然后查看 `Advanced` 标签,在其中的 `Registry mirrors` 部分里可以点击加号来添加加速器地址。*
|
*在国内使用 Docker 的话,需要配置加速器,在菜单中点击 `Preferences...`,然后查看 `Advanced` 标签,在其中的 `Registry mirrors` 部分里可以点击加号来添加加速器地址。*
|
||||||
|
|
||||||
<img src="../_images/install-mac-preference-advanced.png" width="60%">
|
<img src="_images/install-mac-preference-advanced.png" width="60%">
|
||||||
|
|
||||||
启动终端后,通过命令可以检查安装后的 Docker 版本。
|
启动终端后,通过命令可以检查安装后的 Docker 版本。
|
||||||
|
|
||||||
@ -63,7 +63,7 @@ $ docker run -d -p 80:80 --name webserver nginx
|
|||||||
|
|
||||||
服务运行后,可以访问 <http://localhost>,如果看到了 "Welcome to nginx!",就说明 Docker for Mac 安装成功了。
|
服务运行后,可以访问 <http://localhost>,如果看到了 "Welcome to nginx!",就说明 Docker for Mac 安装成功了。
|
||||||
|
|
||||||
<img src="../_images/install-mac-example-nginx.png" width="80%">
|
<img src="_images/install-mac-example-nginx.png" width="80%">
|
||||||
|
|
||||||
要停止 Nginx 服务器并删除执行下面的命令:
|
要停止 Nginx 服务器并删除执行下面的命令:
|
||||||
|
|
||||||
|
Before Width: | Height: | Size: 14 KiB After Width: | Height: | Size: 14 KiB |
Before Width: | Height: | Size: 16 KiB After Width: | Height: | Size: 16 KiB |
@ -10,6 +10,6 @@ Docker 在容器的基础上,进行了进一步的封装,从文件系统、
|
|||||||
|
|
||||||
下面的图片比较了 Docker 和传统虚拟化方式的不同之处。传统虚拟机技术是虚拟出一套硬件后,在其上运行一个完整操作系统,在该系统上再运行所需应用进程;而容器内的应用进程直接运行于宿主的内核,容器内没有自己的内核,而且也没有进行硬件虚拟。因此容器要比传统虚拟机更为轻便。
|
下面的图片比较了 Docker 和传统虚拟化方式的不同之处。传统虚拟机技术是虚拟出一套硬件后,在其上运行一个完整操作系统,在该系统上再运行所需应用进程;而容器内的应用进程直接运行于宿主的内核,容器内没有自己的内核,而且也没有进行硬件虚拟。因此容器要比传统虚拟机更为轻便。
|
||||||
|
|
||||||
![传统虚拟化](../_images/virtualization.png)
|
![传统虚拟化](_images/virtualization.png)
|
||||||
|
|
||||||
![Docker](../_images/docker.png)
|
![Docker](_images/docker.png)
|
||||||
|
Before Width: | Height: | Size: 31 KiB After Width: | Height: | Size: 31 KiB |
Before Width: | Height: | Size: 217 KiB After Width: | Height: | Size: 217 KiB |
Before Width: | Height: | Size: 67 KiB After Width: | Height: | Size: 67 KiB |
Before Width: | Height: | Size: 153 KiB After Width: | Height: | Size: 153 KiB |
Before Width: | Height: | Size: 14 KiB After Width: | Height: | Size: 14 KiB |
Before Width: | Height: | Size: 41 KiB After Width: | Height: | Size: 41 KiB |
@ -1,6 +1,6 @@
|
|||||||
# 基本概念
|
# 基本概念
|
||||||
|
|
||||||
![](../_images/kubernetes_design.jpg)
|
![](_images/kubernetes_design.jpg)
|
||||||
|
|
||||||
* 节点(Node):一个节点是一个运行 Kubernetes 中的主机。
|
* 节点(Node):一个节点是一个运行 Kubernetes 中的主机。
|
||||||
* 容器组(Pod):一个 Pod 对应于由若干容器组成的一个容器组,同个组内的容器共享一个存储卷(volume)。
|
* 容器组(Pod):一个 Pod 对应于由若干容器组成的一个容器组,同个组内的容器共享一个存储卷(volume)。
|
||||||
|
@ -13,7 +13,7 @@
|
|||||||
|
|
||||||
下面这张图完整展示了 Kubernetes 的运行原理。
|
下面这张图完整展示了 Kubernetes 的运行原理。
|
||||||
|
|
||||||
![Kubernetes 架构](../_images/k8s_architecture.png)
|
![Kubernetes 架构](_images/k8s_architecture.png)
|
||||||
|
|
||||||
可见,Kubernetes 首先是一套分布式系统,由多个节点组成,节点分为两类:一类是属于管理平面的主节点/控制节点(Master Node);一类是属于运行平面的工作节点(Worker Node)。
|
可见,Kubernetes 首先是一套分布式系统,由多个节点组成,节点分为两类:一类是属于管理平面的主节点/控制节点(Master Node);一类是属于运行平面的工作节点(Worker Node)。
|
||||||
|
|
||||||
@ -39,4 +39,4 @@
|
|||||||
* kubelet 是工作节点执行操作的 agent,负责具体的容器生命周期管理,根据从数据库中获取的信息来管理容器,并上报 pod 运行状态等;
|
* kubelet 是工作节点执行操作的 agent,负责具体的容器生命周期管理,根据从数据库中获取的信息来管理容器,并上报 pod 运行状态等;
|
||||||
* kube-proxy 是一个简单的网络访问代理,同时也是一个 Load Balancer。它负责将访问到某个服务的请求具体分配给工作节点上的 Pod(同一类标签)。
|
* kube-proxy 是一个简单的网络访问代理,同时也是一个 Load Balancer。它负责将访问到某个服务的请求具体分配给工作节点上的 Pod(同一类标签)。
|
||||||
|
|
||||||
![Proxy 代理对服务的请求](../_images/kube-proxy.png)
|
![Proxy 代理对服务的请求](_images/kube-proxy.png)
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
# 项目简介
|
# 项目简介
|
||||||
|
|
||||||
![](../_images/kubernetes_logo.png)
|
![](_images/kubernetes_logo.png)
|
||||||
|
|
||||||
Kubernetes 是 Google 团队发起的开源项目,它的目标是管理跨多个主机的容器,提供基本的部署,维护以及运用伸缩,主要实现语言为Go语言。Kubernetes是:
|
Kubernetes 是 Google 团队发起的开源项目,它的目标是管理跨多个主机的容器,提供基本的部署,维护以及运用伸缩,主要实现语言为Go语言。Kubernetes是:
|
||||||
* 易学:轻量级,简单,容易理解
|
* 易学:轻量级,简单,容易理解
|
||||||
|
@ -4,7 +4,7 @@
|
|||||||
|
|
||||||
下图展示了在单节点使用 Docker 快速部署一套 Kubernetes 的拓扑。
|
下图展示了在单节点使用 Docker 快速部署一套 Kubernetes 的拓扑。
|
||||||
|
|
||||||
![在 Docker 中启动 Kubernetes](../_images/k8s-singlenode-docker.png)
|
![在 Docker 中启动 Kubernetes](_images/k8s-singlenode-docker.png)
|
||||||
|
|
||||||
Kubernetes 依赖 Etcd 服务来维护所有主节点的状态。
|
Kubernetes 依赖 Etcd 服务来维护所有主节点的状态。
|
||||||
|
|
||||||
|
Before Width: | Height: | Size: 116 KiB After Width: | Height: | Size: 116 KiB |
@ -1,6 +1,6 @@
|
|||||||
## 简介
|
## 简介
|
||||||
|
|
||||||
![Docker Machine](../_images/docker_machine.png)
|
![Docker Machine](_images/docker_machine.png)
|
||||||
|
|
||||||
Docker Machine 项目基于 Go 语言实现,目前在 [Github](https://github.com/docker/machine) 上进行维护。
|
Docker Machine 项目基于 Go 语言实现,目前在 [Github](https://github.com/docker/machine) 上进行维护。
|
||||||
|
|
||||||
|
Before Width: | Height: | Size: 42 KiB After Width: | Height: | Size: 42 KiB |
@ -3,7 +3,7 @@ Docker 采用了 C/S架构,包括客户端和服务端。
|
|||||||
Docker daemon 作为服务端接受来自客户的请求,并处理这些请求(创建、运行、分发容器)。
|
Docker daemon 作为服务端接受来自客户的请求,并处理这些请求(创建、运行、分发容器)。
|
||||||
客户端和服务端既可以运行在一个机器上,也可通过 socket 或者 RESTful API 来进行通信。
|
客户端和服务端既可以运行在一个机器上,也可通过 socket 或者 RESTful API 来进行通信。
|
||||||
|
|
||||||
![Docker 基本架构](../_images/docker_arch.png)
|
![Docker 基本架构](_images/docker_arch.png)
|
||||||
|
|
||||||
|
|
||||||
Docker daemon 一般在宿主主机后台运行,等待接收来自客户端的消息。
|
Docker daemon 一般在宿主主机后台运行,等待接收来自客户端的消息。
|
||||||
|