translate cases into traditional chinese

This commit is contained in:
a504082002 2014-11-18 21:05:06 +08:00
parent f6073d41af
commit 54ad70f9fd
5 changed files with 60 additions and 60 deletions

View File

@ -1,2 +1,2 @@
#实战案例 #實戰案例
绍一些典型的应用场景和案例。 紹一些典型的應用場景和案例。

View File

@ -1,5 +1,5 @@
## 多台物理主机之间的容器互联(暴露容器到真实网络中) ## 多臺物理主機之間的容器互聯(暴露容器到真實網絡中)
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
@ -7,7 +7,7 @@ docker0 8000.56847afe9799 no veth0889
veth3c7b veth3c7b
veth4061 veth4061
``` ```
在容器中看到的地址一般是像下面这样的地址: 在容器中看到的地址一般是像下面這樣的地址:
``` ```
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
@ -23,17 +23,17 @@ root@ac6474aeb31d:~# ip a
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 參數
如果在企业内部应用,或者做多个物理主机的集群,可能需要将多个物理主机的容器组到一个物理网络中来,那么就需要将这个网桥桥接到我们指定的网卡上。 如果在企業內部應用,或者做多個物理主機的集群,可能需要將多個物理主機的容器組到一個物理網絡中來,那麽就需要將這個網橋橋接到我們指定的網卡上。
### 拓扑图 ### 拓撲圖
机 A 和主机 B 的网卡一都连着物理交换机的同一个 vlan 101,这样网桥一和网桥三就相当于在同一个物理网络中了,而容器一、容器三、容器四也在同一物理网络中了,他们之间可以相互通信,而且可以跟同一 vlan 中的其他物理机器互联 機 A 和主機 B 的網卡一都連著物理交換機的同一個 vlan 101,這樣網橋一和網橋三就相當於在同一個物理網絡中了,而容器一、容器三、容器四也在同一物理網絡中了,他們之間可以相互通信,而且可以跟同一 vlan 中的其他物理機器互聯
![物理拓扑图](../_images/container_connect_topology.png) ![物理拓撲圖](../_images/container_connect_topology.png)
### ubuntu 示例 ### ubuntu 示例
下面以 ubuntu 为例创建多个主机的容器联网: 下面以 ubuntu 為例創建多個主機的容器聯網:
创建自己的网桥,编辑 /etc/network/interface 文件 創建自己的網橋,編輯 /etc/network/interface 文件
``` ```
auto br0 auto br0
iface br0 inet static iface br0 inet static
@ -44,9 +44,9 @@ bridge_ports em1
bridge_stp off bridge_stp off
dns-nameservers 8.8.8.8 192.168.6.1 dns-nameservers 8.8.8.8 192.168.6.1
``` ```
将 Docker 的默认网桥绑定到这个新建的 br0 上面,这样就将这台机器上容器绑定到 em1 这个网卡所对应的物理网络上了。 將 Docker 的默認網橋綁定到這個新建的 br0 上面,這樣就將這臺機器上容器綁定到 em1 這個網卡所對應的物理網絡上了。
ubuntu 修改 /etc/default/docker 文件,添加最后一行内 ubuntu 修改 /etc/default/docker 文件,添加最後一行內
``` ```
# Docker Upstart and SysVinit configuration file # Docker Upstart and SysVinit configuration file
@ -64,7 +64,7 @@ ubuntu 修改 /etc/default/docker 文件,添加最后一行内容
DOCKER_OPTS="-b=br0" DOCKER_OPTS="-b=br0"
``` ```
启动 Docker 的时候 使用 -b 参数 将容器绑定到物理网络上。重启 Docker 服务后,再进入容器可以看到它已经绑定到你的物理网络上了。 啟動 Docker 的時候 使用 -b 參數 將容器綁定到物理網絡上。重啟 Docker 服務後,再進入容器可以看到它已經綁定到你的物理網絡上了。
``` ```
root@ubuntudocker:~# docker ps root@ubuntudocker:~# docker ps
@ -75,4 +75,4 @@ bridge name bridge id STP enabled interfaces
br0 8000.7e6e617c8d53 no em1 br0 8000.7e6e617c8d53 no em1
vethe6e5 vethe6e5
``` ```
这样就直接把容器暴露到物理网络上了,多台物理主机的容器也可以相互联网了。需要注意的是,这样就需要自己来保证容器的网络安全了。 這樣就直接把容器暴露到物理網絡上了,多臺物理主機的容器也可以相互聯網了。需要註意的是,這樣就需要自己來保證容器的網絡安全了。

View File

@ -1,14 +1,14 @@
## 标准化开发测试和生产环 ## 標準化開發測試和生產環
对于大部分企业来说,搭建 PaaS 既没有那个精力,也没那个必要,用 Docker 做个人的 sandbox 用处又小了点 對於大部分企業來說,搭建 PaaS 既沒有那個精力,也沒那個必要,用 Docker 做個人的 sandbox 用處又小了點
可以用 Docker 来标准化开发、测试、生产环境。 可以用 Docker 來標準化開發、測試、生產環境。
![业应用结构](../_images/enterprise_usage.png) ![業應用結構](../_images/enterprise_usage.png)
Docker 占用资源小,在一台 E5 128 G 内存的服务器上部署 100 个容器都绰绰有余,可以单独抽一个容器或者直接在宿主物理主机上部署 samba利用 samba 的 home 分享方案将每个用户的 home 目录映射到开发中心和测试部门的 Windows 机器上。 Docker 占用資源小,在一臺 E5 128 G 內存的服務器上部署 100 個容器都綽綽有余,可以單獨抽一個容器或者直接在宿主物理主機上部署 samba利用 samba 的 home 分享方案將每個用戶的 home 目錄映射到開發中心和測試部門的 Windows 機器上。
针对某个项目组,由架构师搭建好一个标准的容器环境供项目组和测试部门使用,每个开发工程师可以拥有自己单独的容器,通过 `docker run -v` 将用户的 home 目录映射到容器中。需要提交测试时,只需要将代码移交给测试部门,然后分配一个容器使用 `-v` 加载测试部门的 home 目录启动即可。这样,在公司内部的开发、测试基本就统一了,不会出现开发部门提交的代码,测试部门部署不了的问题 針對某個項目組,由架構師搭建好一個標準的容器環境供項目組和測試部門使用,每個開發工程師可以擁有自己單獨的容器,通過 `docker run -v` 將用戶的 home 目錄映射到容器中。需要提交測試時,只需要將代碼移交給測試部門,然後分配一個容器使用 `-v` 加載測試部門的 home 目錄啟動即可。這樣,在公司內部的開發、測試基本就統一了,不會出現開發部門提交的代碼,測試部門部署不了的問題
测试部门发布测试通过的报告后,架构师再一次检测容器环境,就可以直接交由部署工程师将代码和容器分别部署到生产环境中了。这种方式的部署横向性能的扩展性也极好。 測試部門發布測試通過的報告後,架構師再一次檢測容器環境,就可以直接交由部署工程師將代碼和容器分別部署到生產環境中了。這種方式的部署橫向性能的擴展性也極好。

View File

@ -1,10 +1,10 @@
## 使用 Supervisor 来管理进 ## 使用 Supervisor 來管理進
Docker 容器在启动的时候开启单个进程,比如,一个 ssh 或者 apache 的 daemon 服务。但我们经常需要在一个机器上开启多个服务,这可以有很多方法,最简单的就是把多个启动命令方到一个启动脚本里面,启动的时候直接启动这个脚本,另外就是安装进程管理工具。 Docker 容器在啟動的時候開啟單個進程,比如,一個 ssh 或者 apache 的 daemon 服務。但我們經常需要在一個機器上開啟多個服務,這可以有很多方法,最簡單的就是把多個啟動命令方到一個啟動腳本裏面,啟動的時候直接啟動這個腳本,另外就是安裝進程管理工具。
本小节将使用进程管理工具 supervisor 来管理容器中的多个进程。使用 Supervisor 可以更好的控制、管理、重启我们希望运行的进程。在这里我们演示一下如何同时使用 ssh 和 apache 服务 本小節將使用進程管理工具 supervisor 來管理容器中的多個進程。使用 Supervisor 可以更好的控制、管理、重啟我們希望運行的進程。在這裏我們演示一下如何同時使用 ssh 和 apache 服務
### 配置 ### 配置
首先创建一个 Dockerfile内容和各部分的解释如下。 首先創建一個 Dockerfile內容和各部分的解釋如下。
``` ```
FROM ubuntu:13.04 FROM ubuntu:13.04
MAINTAINER examples@docker.com MAINTAINER examples@docker.com
@ -13,28 +13,28 @@ RUN apt-get update
RUN apt-get upgrade -y RUN apt-get upgrade -y
``` ```
### 安 supervisor ### 安 supervisor
ssh、apache 和 supervisor。 ssh、apache 和 supervisor。
``` ```
RUN apt-get install -y openssh-server apache2 supervisor RUN apt-get install -y openssh-server apache2 supervisor
RUN mkdir -p /var/run/sshd RUN mkdir -p /var/run/sshd
RUN mkdir -p /var/log/supervisor RUN mkdir -p /var/log/supervisor
``` ```
这里安装 3 个软件,还创建了 2 个 ssh 和 supervisor 服务正常运行所需要的目录 這裏安裝 3 個軟件,還創建了 2 個 ssh 和 supervisor 服務正常運行所需要的目錄
``` ```
COPY supervisord.conf /etc/supervisor/conf.d/supervisord.conf COPY supervisord.conf /etc/supervisor/conf.d/supervisord.conf
``` ```
添加 supervisord 的配置文件,并复制配置文件到对应目录下面。 添加 supervisord 的配置文件,並復制配置文件到對應目錄下面。
``` ```
EXPOSE 22 80 EXPOSE 22 80
CMD ["/usr/bin/supervisord"] CMD ["/usr/bin/supervisord"]
``` ```
这里我们映射了 22 和 80 端口,使用 supervisord 的可执行路径启动服务 這裏我們映射了 22 和 80 端口,使用 supervisord 的可執行路徑啟動服務
### supervisor配置文件 ### supervisor配置文件
``` ```
[supervisord] [supervisord]
nodaemon=true nodaemon=true
@ -44,14 +44,14 @@ command=/usr/sbin/sshd -D
[program:apache2] [program:apache2]
command=/bin/bash -c "source /etc/apache2/envvars && exec /usr/sbin/apache2 -DFOREGROUND" command=/bin/bash -c "source /etc/apache2/envvars && exec /usr/sbin/apache2 -DFOREGROUND"
``` ```
配置文件包含目录和进程,第一段 supervsord 配置软件本身,使用 nodaemon 参数来运行。第二段包含要控制的 2 个服务。每一段包含一个服务的目录和启动这个服务的命令。 配置文件包含目錄和進程,第一段 supervsord 配置軟件本身,使用 nodaemon 參數來運行。第二段包含要控制的 2 個服務。每一段包含一個服務的目錄和啟動這個服務的命令。
### 使用方法 ### 使用方法
创建镜像。 創建鏡像。
``` ```
$ sudo docker build -t test/supervisord . $ sudo docker build -t test/supervisord .
``` ```
启动 supervisor 容器。 啟動 supervisor 容器。
``` ```
$ sudo docker run -p 22 -p 80 -t -i test/supervisords $ sudo docker run -p 22 -p 80 -t -i test/supervisords
2013-11-25 18:53:22,312 CRIT Supervisor running as root (no user in config file) 2013-11-25 18:53:22,312 CRIT Supervisor running as root (no user in config file)
@ -60,6 +60,6 @@ $ sudo docker run -p 22 -p 80 -t -i test/supervisords
2013-11-25 18:53:23,346 INFO spawned: 'sshd' with pid 6 2013-11-25 18:53:23,346 INFO spawned: 'sshd' with pid 6
2013-11-25 18:53:23,349 INFO spawned: 'apache2' with pid 7 2013-11-25 18:53:23,349 INFO spawned: 'apache2' with pid 7
``` ```
使用 `docker run` 来启动我们创建的容器。使用多个 `-p` 来映射多个端口,这样我们就能同时访问 ssh 和 apache 服务了。 使用 `docker run` 來啟動我們創建的容器。使用多個 `-p` 來映射多個端口,這樣我們就能同時訪問 ssh 和 apache 服務了。
可以使用这个方法创建一个只有 ssh 服务的基础镜像,之后创建镜像可以使用这个镜像为基础来创 可以使用這個方法創建一個只有 ssh 服務的基礎鏡像,之後創建鏡像可以使用這個鏡像為基礎來創

View File

@ -1,11 +1,11 @@
## 建 tomcat/weblogic 集群 ## 建 tomcat/weblogic 集群
### 安装 tomcat 镜 ### 安裝 tomcat 鏡
准备好需要的 jdk、tomcat 等软件放到 home 目录下面,启动一个容器 準備好需要的 jdk、tomcat 等軟件放到 home 目錄下面,啟動一個容器
``` ```
docker run -t -i -v /home:/opt/data --name mk_tomcat ubuntu /bin/bash docker run -t -i -v /home:/opt/data --name mk_tomcat ubuntu /bin/bash
``` ```
这条命令挂载本地 home 目录到容器的 /opt/data 目录,容器内目录若不存在,则会自动创建。接下来就是 tomcat 的基本配置jdk 环境变量设置好之后,将 tomcat 程序放到 /opt/apache-tomcat 下面 這條命令掛載本地 home 目錄到容器的 /opt/data 目錄,容器內目錄若不存在,則會自動創建。接下來就是 tomcat 的基本配置jdk 環境變量設置好之後,將 tomcat 程序放到 /opt/apache-tomcat 下面
编辑 /etc/supervisor/conf.d/supervisor.conf 文件,添加 tomcat 项 編輯 /etc/supervisor/conf.d/supervisor.conf 文件,添加 tomcat 項
``` ```
[supervisord] [supervisord]
nodaemon=true nodaemon=true
@ -18,19 +18,19 @@ command=/usr/sbin/sshd -D
docker commit ac6474aeb31d tomcat docker commit ac6474aeb31d tomcat
``` ```
新建 tomcat 文件,新建 Dockerfile。 新建 tomcat 文件,新建 Dockerfile。
``` ```
FROM mk_tomcat FROM mk_tomcat
EXPOSE 22 8080 EXPOSE 22 8080
CMD ["/usr/bin/supervisord"] CMD ["/usr/bin/supervisord"]
``` ```
据 Dockerfile 创建镜像。 據 Dockerfile 創建鏡像。
``` ```
docker build tomcat tomcat docker build tomcat tomcat
``` ```
### 安装 weblogic 镜 ### 安裝 weblogic 鏡
骤和 tomcat 基本一致,这里贴一下配置文件 驟和 tomcat 基本一致,這裏貼一下配置文件
``` ```
supervisor.conf supervisor.conf
[supervisord] [supervisord]
@ -48,34 +48,34 @@ EXPOSE 22 7001
CMD ["/usr/bin/supervisord"] CMD ["/usr/bin/supervisord"]
``` ```
### tomcat/weblogic 像的使用 ### tomcat/weblogic 像的使用
#### 存的使用 #### 存的使用
启动的时候,使用 `-v` 参数 啟動的時候,使用 `-v` 參數
-v, --volume=[] Bind mount a volume (e.g. from the host: -v /host:/container, from docker: -v /container) -v, --volume=[] Bind mount a volume (e.g. from the host: -v /host:/container, from docker: -v /container)
将本地磁盘映射到容器内部,它在主机和容器之间是实时变化的,所以我们更新程序、上传代码只需要更新物理主机的目录就可以了 將本地磁盤映射到容器內部,它在主機和容器之間是實時變化的,所以我們更新程序、上傳代碼只需要更新物理主機的目錄就可以了
#### tomcat 和 weblogic 集群的实现 #### tomcat 和 weblogic 集群的實現
tomcat 只要开启多个容器即可 tomcat 只要開啟多個容器即可
``` ```
docker run -d -v -p 204:22 -p 7003:8080 -v /home/data:/opt/data --name tm1 tomcat /usr/bin/supervisord docker run -d -v -p 204:22 -p 7003:8080 -v /home/data:/opt/data --name tm1 tomcat /usr/bin/supervisord
docker run -d -v -p 205:22 -p 7004:8080 -v /home/data:/opt/data --name tm2 tomcat /usr/bin/supervisord docker run -d -v -p 205:22 -p 7004:8080 -v /home/data:/opt/data --name tm2 tomcat /usr/bin/supervisord
docker run -d -v -p 206:22 -p 7005:8080 -v /home/data:/opt/data --name tm3 tomcat /usr/bin/supervisord docker run -d -v -p 206:22 -p 7005:8080 -v /home/data:/opt/data --name tm3 tomcat /usr/bin/supervisord
``` ```
这里说一下 weblogic 的配置,大家知道 weblogic 有一个域的概念。如果要使用常规的 administrator +node 的方式部署,就需要在 supervisord 中分别写出 administartor server 和 node server 的启动脚本,这样做的优点是: 這裏說一下 weblogic 的配置,大家知道 weblogic 有一個域的概念。如果要使用常規的 administrator +node 的方式部署,就需要在 supervisord 中分別寫出 administartor server 和 node server 的啟動腳本,這樣做的優點是:
* 可以使用 weblogic 的集群,同步等概念 * 可以使用 weblogic 的集群,同步等概念
* 部署一个集群应用程序,只需要安装一次应用到集群上即可 * 部署一個集群應用程序,只需要安裝一次應用到集群上即可
是: 是:
* Docker 配置复杂 * Docker 配置復雜
* 没办法自动扩展集群的计算容量,如需添加节点,需要在 administrator 上先创建节点,然后再配置新的容器 supervisor 启动脚本,然后再启动容器 * 沒辦法自動擴展集群的計算容量,如需添加節點,需要在 administrator 上先創建節點,然後再配置新的容器 supervisor 啟動腳本,然後再啟動容器
另外种方法是将所有的程序都安装在 adminiserver 上面,需要扩展的时候,启动多个节点即可,它的优点和缺点和上一种方法恰恰相反。(建议使用这种方式来部署开发和测试环境) 另外種方法是將所有的程序都安裝在 adminiserver 上面,需要擴展的時候,啟動多個節點即可,它的優點和缺點和上一種方法恰恰相反。(建議使用這種方式來部署開發和測試環境)
``` ```
docker run -d -v -p 204:22 -p 7001:7001 -v /home/data:/opt/data --name node1 weblogic /usr/bin/supervisord docker run -d -v -p 204:22 -p 7001:7001 -v /home/data:/opt/data --name node1 weblogic /usr/bin/supervisord
docker run -d -v -p 205:22 -p 7002:7001 -v /home/data:/opt/data --name node2 weblogic /usr/bin/supervisord docker run -d -v -p 205:22 -p 7002:7001 -v /home/data:/opt/data --name node2 weblogic /usr/bin/supervisord
docker run -d -v -p 206:22 -p 7003:7001 -v /home/data:/opt/data --name node3 weblogic /usr/bin/supervisord docker run -d -v -p 206:22 -p 7003:7001 -v /home/data:/opt/data --name node3 weblogic /usr/bin/supervisord
``` ```
这样在前端使用 nginx 来做负载均衡就可以完成配置了 這樣在前端使用 nginx 來做負載均衡就可以完成配置了