Merge branch 'master' of github.com:yeasy/docker_practice

Conflicts:
	practice/supervisor.md
pull/7/head
Baohua Yang 2014-09-17 19:33:05 +08:00
commit edbc260ba9
4 changed files with 25 additions and 16 deletions

View File

@ -28,7 +28,8 @@ $ sudo docker run -i -t --rm --net=none base /bin/bash
root@63f36fc01b5f:/#
```
再开启一个新的终端查找这个容器的进程id然后创建它的命名空间后面的ip netns会用到
```$ sudo docker inspect -f '{{.State.Pid}}' 63f36fc01b5f
```
$ sudo docker inspect -f '{{.State.Pid}}' 63f36fc01b5f
2778
$ pid=2778
$ sudo mkdir -p /var/run/netns
@ -57,4 +58,4 @@ $ sudo ip netns exec $pid ip route add default via 172.17.42.1
```
自此,你又可以像平常一样使用网络了
当你退出shell后docker清空容器容器的eth0随网络命名空间一起被摧毁A 接口也被自动从docker0取消注册。不用其他命令所有东西都被清理掉了
注意ip netns exec命令它可以让我们像root一样配置网络命名空间。但在容器内部无法使用因为统一的安全策略docker限制容器进程配置自己的网络。使用ip netns exec 可以让我们不用设置--privileged=true就可以完成一些可能带来危险的操作。
注意ip netns exec命令它可以让我们像root一样配置网络命名空间。但在容器内部无法使用因为统一的安全策略docker限制容器进程配置自己的网络。使用ip netns exec 可以让我们不用设置--privileged=true就可以完成一些可能带来危险的操作。

View File

@ -15,7 +15,7 @@ $ sudo sed -i '$acomplete -F _docker docker' /etc/bash_completion.d/docker.io
```
$ sudo apt-get install apt-transport-https
$ sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 36A1D7869245C8950F966E92D8576A8BA88D21E9
$ sudo echo "deb https://get.docker.io/ubuntu docker main" > /etc/apt/sources.list.d/docker.list"
$ sudo bash -c "echo deb https://get.docker.io/ubuntu docker main > /etc/apt/sources.list.d/docker.list"
$ sudo apt-get update
$ sudo apt-get install lxc-docker
```

View File

@ -4,7 +4,7 @@ docker 容器在启动的时候开启单个进程比如一个ssh或则apac
本小节将使用进程管理工具supervisor来管理容器中的多个进程。使用Supervisor可以更好的控制、管理、重启我们希望运行的进程。在这里我们演示一下如何同时使用ssh和apache服务。
###配置
首先创建一个dockerfile。
首先创建一个dockerfile,内容和各部分的解释如下
```
FROM ubuntu:13.04
MAINTAINER examples@docker.com
@ -14,25 +14,27 @@ RUN apt-get upgrade -y
```
安装supervisor
安装 ssh apache supervisor
安装 ssh、apache和supervisor。
```
RUN apt-get install -y openssh-server apache2 supervisor
RUN mkdir -p /var/run/sshd
RUN mkdir -p /var/log/supervisor
```
这里安装3个软件还创建了2个用来允许ssh和supervisor的目录
这里安装3个软件还创建了2个ssh和supervisor服务正常运行所需要的目录。
```
COPY supervisord.conf /etc/supervisor/conf.d/supervisord.conf
添加supervisors的配置文件
添加配置文件到对应目录下面
映射端口开启supervisor
使用dockerfile来映射指定的端口使用cmd来启动supervisord
```
添加supervisors的配置文件并复制配置文件到对应目录下面。
```
EXPOSE 22 80
CMD ["/usr/bin/supervisord"]
```
这里我们映射了22 和80端口使用supervisord的可执行路径启动服务。
supervisor配置文件内容为。
###supervisor配置文件内容
```
[supervisord]
nodaemon=true
@ -42,13 +44,14 @@ command=/usr/sbin/sshd -D
[program:apache2]
command=/bin/bash -c "source /etc/apache2/envvars && exec /usr/sbin/apache2 -DFOREGROUND"
```
配置文件包含目录和进程第一段supervsord配置软件本身使用nodaemon参数来运行。下面2段包含我们要控制的2个服务。每一段包含一个服务的目录和启动这个服务的命令
配置文件包含目录和进程第一段supervsord配置软件本身使用nodaemon参数来运行。第二段包含要控制的2个服务。每一段包含一个服务的目录和启动这个服务的命令
###使用方法
创建镜像
创建镜像
```
$ sudo docker build -t test/supervisord .
```
启动我们的supervisor容器
启动supervisor容器
```
$ 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)

View File

@ -51,14 +51,17 @@ CMD ["/usr/bin/supervisord"]
###tomcat/weblogic 镜像的使用
1)存储的使用
在启用docker run 的时候,使用 -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)
将本地磁盘映射到虚拟机内部,它在主机和虚拟机容器之间是实时变化的,所以我们更新程序、上传代码只需要更新物理主机的目录就可以了,数据存储的详细介绍请参见本文第七小节
2)tomcat和weblogic集群的实现
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 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
```
这里说一下weblogic的配置大家知道weblogic有一个域的概念。如果要使用常规的administrator +node的方式部署就需要在supervisord中分别写出administartor server和node server的启动脚本这样做的优点是
* 可以使用weblogic的集群同步等概念
@ -67,8 +70,10 @@ docker run -d -v -p 206:22 -p 7005:8080 -v /home/data:/opt/data --name tm3 tomca
* docker配置复杂了
* 没办法自动扩展集群的计算容量如需添加节点需要在administrator上先创建节点然后再配置心的容器supervisor启动脚本然后再启动容器
另外种方法是将所有的程序都安装在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 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
```
这样在前端使用nginx 来做负载均衡就可以完成配置了