本文共 5244 字,大约阅读时间需要 17 分钟。
其实我很感谢我现在的工作,作为现阶段的我,能够与这样一群人一起工作,算是很幸运了吧,他们都很厉害,从他们身上我能学到很多东西,就比如说最近在研究的Docker。
Docker的方便之处,在于快捷的交付与启动,他告别了传统虚拟机的资源消耗和内存占用,同时在于强大的社区支持,不同的人把自己的需求融合到docker中,放到官方给定的Docker hub中,以便于更多的人使用。 当我们使用Docker的时候应该追求的是当我们启动docker的时候我们的所封装的应用也随着启动,而不是说进入容器再启动相应的应用,那样我们所使用的docker就变质了。
使用现有的docker镜像配置ELK+rsyslog日志分析系统。
我们可以自己启动一个docker容器,然后把自己的应用封装在容器中,但是用老罗的一句话,人生苦短,能走2步的不走9步,所以选择了开源
eg:我需要在docker中部署elk的开发环境,那么我就要去docker 的官方hub中搜索elk
这里我是用的是es241_l240_k461,在启动docker服务的机器上下载镜像
sudo docker pull sebp/elk:es241_l240_k461
为什么要这么做,是为了更加方便的查看数据和保护数据,因为一旦docker died了,且不可restart,那么里边运行的服务所产生的数据对我们来说是不可恢复的,这里便需要创建文件目录做映射
这里我的环境是虚拟机:redhatip:192.168.1.195用户名:redhat
在redhat的目录下创建以下文件夹:
/home/redhat/docker-log-file/elasticsearch :同步elasticsearch目录/home/redhat/docker-log-file/logstash :同步logstash目录/home/redhat/docker-log-file/kibana :同步kibana目录/home/redhat/docker-log-file/logstash-conf :同步logstash的configure文件
sebp/elk:es241_l240_k461:
Elasticsearch的安装目录: /usr/share/elasticsearch/Elasticsearch的配置文件目录:/etc/elasticsearch/Kibana和logstash的目录为: /opt/kibana/ /opt/logstash/ELK的日志目录: /var/log/elasticsearch/ /var/log/logstash/ /var/log/kibana/默认加载配置的文件路径: /etc/logstash/conf.d/
特别说明:
在sebp/elk容器中的内置配置文件目录是/etc/logstash/conf.d,该目录下有五个配置文件,在容器启动的时候,该目录下的配置文件会自动被加载启动,当我们在实际开发中,需要将我们的配置文件覆盖掉该目录下的文件
在容器启动的时候,要指定目录挂载和端口映射
启动命令:sudo docker run \
-v /home/redhat/docker-log-file/elasticsearch/:/var/log/elasticsearch\ -v /home/redhat/docker-log-file/logstash/:/var/log/logstash \ -v /home/redhat/docker-log-file/kibana/:/var/log/kibana\ -v /home/redhat/docker-log-file/logstash-conf/:/etc/logstash/conf.d/ \ -p 9200:9200 \ -p 9300:9300 \ -p 5044:5044 \ -p 5601:5601 \ -p 5000:5000 -it –name elk sebp/elk:es241_l240_k461
-v 为目录的映射 -p 端口的映射
sudo vim /etc/rsyslog.conf
在最后加入
*.* @@192.168.1.195:5000*.* @192.168.1.195:5000
(我在192.168.1.195这台机器上进行测试和部署的 @@表示 tcp传输 @表示udp传输)
启动容器的时候,容器内的服务会有一定的时间延迟,请耐心等待,否则不能观看到效果,容器造成error的错觉
执行ssh localhost
分别可以输入错误的密码和正确的密码进行测试,这个时候观看我们的web界面,便可以在kibana界面中看到相应的message了
细心的朋友会发现,我们在介绍sebp/elk时,跳过了dockerfile,在这里我们结合sebp/elk的dockerfile来看一下
sebp/elk-Dockerfile:
接下来我们看几个 命令:
from image_name 指定基础image为该image的最后修改的版本
from image_name:tag 指定一个tag版本
FROM ubuntu
MAINTAINER thinkgamer csdn blog http://blog.csdn.net/gamer_gyt
ADD /home/redhat/test /home/test
ENV JAVA_HOME /opt/java
RUN apt-get install -y vim wget curl
EXPOSE 80 81
在容器启动时应该进行指定:
sudo docker run -p 80:80 -p 81:81 -it --name othername image_name
COPY /home/path1 /home/path2
CMD [ "/usr/local/bin/start.sh" ]
其他的一些语法如:
用户在使用docker的过程中,往往需要能查看docker容器内应用产生的数据,或者需要把容器内的数据进行备份,甚至多个容器之间进行数据的共享,这里就涉及到了容器的数据管理操作,容器中的数据管理有两种方式
数据卷是一种特殊的存在于一个或者多个docker内部的不同于Union File System的目录,数据卷提供多种有用的特性用来持久化和共享数据
数据卷被设计用来持久化存储数据,独立于容器的生命周期,当你删除容器时,docker并不会自动删除数据卷,不使用的数据卷,也不会替你“垃圾回收”
使用-v 在docker容器中创建一个数据卷,如果要创建多个数据卷可以使用多个-v
Eg:启动容器并在容器的根目录下创建数据卷 myApp和myTestsudo docker run -v /myApp -v /myTest -it image_name
可以使用 inspect命令查看数据卷
sudo docker inspect image_name
将宿主机目录挂载为数据卷,同样使用 -v
eg:启动容器将宿主机的home目录下的myApp和myTest挂载为容器的数据卷sudo docker run -v /home/myApp:/myApp -v /home/myTest:/myTest -it image_name
如果你有一些持久化的数据,并且想在不同的container之间共享这些数据,或者想在一些没有持久化的container中使用,最好的方法就是使用数据卷容器,再把数据mount到你的container
eg:启动一个容器sudo docker run -it -d -v /volumedata ubuntu:latest
启动另一个容器(970为启动的第一个容器id的前3位,这里不需要写完整整个id,只要能唯一标示即可)
sudo docker run -it -d –volumes-from 970 ubuntu/docker:elk_rails
在第二个启动的容器中就可以看到volumedata这个文件夹,并编辑一个test文件,写入
hello volume container
进入第一个容器执行cat test,即可看到我们刚才编辑的数据