三、在容器中运行软件
在上一节中,已经弄懂了docker的相关概念,那么它到底如何用在工作中呢?下面我们就用一个例子来说明docker的基本用法:建立一个网站的监控器,这个需求在我们的工作中是常见的,如下图:
image.png
总共需要建立3个容器:nginx服务器(当然我们不会在服务器上部署一个真正的应用,只是监视这个web服务器是否正常)、邮件服务器和监控器。实现的功能是:监控器监控nginx服务器,一旦有异常就通过邮件服务器发邮件。
搭建环境
1.镜像准备
镜像地址:https://hub.docker.com/u/dockerinaction?page=1
通过以下docker pull命令拉取镜像到本地:
监控器镜像:
docker pull dockerinaction/ch2_agent
nginx镜像:
docker pull nginx:latest
邮件服务器镜像:
docker pull dockerinaction/ch2_mailer
2.创建并启动容器
有两种启动容器的方法:后台运行和交互式运行。
首先我们要在后台运行nginx和邮件服务器这两个容器,命令如下:
docker run -d --name web nginx:latest
docker run -d --name mailer dockerinaction/ch2_mailer
命令解释:
- docker run :创建并启动一个容器
- -d参数:后台运行程序
- --name web:给niginx容器命名为web,给邮件服务器命名为mailer。
最后一个参数是要使用的镜像(nginx:latest和dockerinaction/ch2_mailer)
上面两个容器都是通过后台运行的方式启动的,不能和容器进行交互,接下来将使用交互式启动监控服务器。交互式容器需要一个标准输入流和一个虚拟终端。命令如下:
docker run -it --name agent --link web:insideweb --link mailer:insidemailer dockerinaction/ch2_agent
命令解释:
- -it参数:是--interactive(或-i)和--tty(或-t)的缩写,--interactive选项告诉Docker保持标准输入流(一般就是键盘啦~)对容器开放,即使容器没有终端连接。其次,--tty 选项告诉 Docker 为容器分配一个虚拟终端,这将允许你发信号给容器。
- --link参数:链接一个容器,并通过指定被链接容器的name或者id,给被链接容器起一个别名,格式为--link <name or id>:alias。该参数可以用来链接2个容器,使得源容器(被链接的容器)和接收容器(主动去链接的容器)之间可以互相通信,并且接收容器可以获取源容器的一些数据,如源容器的环境变量。
第三个容器运行之后,该容器将每秒测试Web容器,并打印消息:System up。想要退出交互式容器时,可以按住ctrl+p+q即可。
测试环境
软件环境搭建好了之后,我们来测试一下整个系统。测试的过程中会用到docker ps、docker restart、docker stop、docker logs等命令。回想一下我们搭建这个系统的目的,想要容器agent监控web服务器,当web服务器异常时发邮件报告。此时我们可以通过查看三个容器的日志来判断系统的正确性。
1.查看当前运行的容器:
docker ps
结果如下图:
image.png
可以看到现在只有web和mailer两个容器是运行态,因为刚刚我们运行监控器agent容器时采用的是交互式,一旦退出交互就会停止交互式容器。接下来就要重启agent
2.重启监控器agent容器:
docker restart agent
结果如下图:
image.png
现在可以看到web、mailer和agent三个容器都是运行态
3.观察mailer容器的日志,查看是否有异常
docker logs mailer
结果如下图:
image.png
现在mailer没有任何日志,说明web容器运行正常
4.停止web容器,再次查看mailer日志
docker stop web
docker logs mailer
结果如下图:
image.png
这里可以看到mailer的有一条日志:Sending email: To: admin@work Message: The service is down!
说明当web容器异常时,监控器agent容器检测到了,并且成功发送了邮件。
至此,本例结束。如果你有一台linux机器,并且安装了docker,你就可以试一下上面的例子哦~