Ubuntu 搭建ELK

摘要:
采集的方式有2中,分别是logstash和filebeat。镜像选择本文所使用的镜像是ubuntu,注意:使用dockerpush镜像时,一定要加版本号!因为默认的是ubuntu是18.04,安装logstash的deb包时,会报错一个ruby错误!修改ubuntu更新源2台服务器,修改ubuntu的更新源为阿里云。cp/etc/apt/sources.list/opt/elasticsearch/cp/etc/apt/sources.list/opt/kibana/登录到129服务器,创建目录,并下载软件包。mkdir/opt/logstashcd/opt/logstashwgethttps://artifacts.elastic.co/downloads/logstash/logstash-6.4.3.debmkdir/opt/filebeatcd/opt/filebeatwgethttps://artifacts.elastic.co/downloads/beats/filebeat/filebeat-6.4.3-amd64.deb复制sources.list,待会dockerfile会用到!vm.max_map_count=2621440使用以下命令刷新sysctl-p请确
一、简介

官网地址:https://www.elastic.co/cn/

官网权威指南:https://www.elastic.co/guide/cn/elasticsearch/guide/current/index.html

安装指南:https://www.elastic.co/guide/en/elasticsearch/reference/5.x/rpm.html

ELK是Elasticsearch、Logstash、Kibana的简称,这三者是核心套件,但并非全部。

Elasticsearch是实时全文搜索和分析引擎,提供搜集、分析、存储数据三大功能;是一套开放REST和JAVA API等结构提供高效搜索功能,可扩展的分布式系统。它构建于Apache Lucene搜索引擎库之上。

Logstash是一个用来搜集、分析、过滤日志的工具。它支持几乎任何类型的日志,包括系统日志、错误日志和自定义应用程序日志。它可以从许多来源接收日志,这些来源包括 syslog、消息传递(例如 RabbitMQ)和JMX,它能够以多种方式输出数据,包括电子邮件、websockets和Elasticsearch。

Kibana是一个基于Web的图形界面,用于搜索、分析和可视化存储在 Elasticsearch指标中的日志数据。它利用Elasticsearch的REST接口来检索数据,不仅允许用户创建他们自己的数据的定制仪表板视图,还允许他们以特殊的方式查询和过滤数据

Ubuntu 搭建ELK第1张

二、准备工作

环境介绍

操作系统主机名IP地址相关软件
ubuntu-16.04.5-server-amd64jqb-node128192.168.91.128elasticsearch,kibana
ubuntu-16.04.5-server-amd64jqb-node128192.168.91.128logstash,filebeat,nginx

架构图

Ubuntu 搭建ELK第2张

说明:

文本主要是采集Nginx的access日志。采集的方式有2中,分别是logstash和filebeat。

logstash依赖于java环境,比较重。而filebeat是一个轻量级的logstash,它不需要java环境。而且安装包比较小!

所以本文会分别介绍2中采集工具的使用方法!

镜像选择

本文所使用的镜像是ubuntu,注意:使用docker push镜像时,一定要加版本号!使用16.04

为什么呢?因为默认的是ubuntu是18.04,安装logstash的deb包时,会报错一个ruby错误!无法解决!

使用16.04就不会出现这个问题了!

elk版本选择

打开官网https://www.elastic.co/cn/,目前最新版是6.4.3。那么就直接怼最新版,不要怂!

各个组件版本,统一为6.4.3

安装docker

本文所使用的几个组件,都是基于docker安装的。这样方便部署!

修改ubuntu更新源

2台服务器,修改ubuntu的更新源为阿里云。默认的更新源太慢了!

vim /etc/apt/sources.list

内容如下:

Ubuntu 搭建ELK第3张Ubuntu 搭建ELK第4张
deb http://mirrors.aliyun.com/ubuntu/ xenial main restricted
deb http://mirrors.aliyun.com/ubuntu/ xenial-updates main restricted
deb http://mirrors.aliyun.com/ubuntu/ xenial universe
deb http://mirrors.aliyun.com/ubuntu/ xenial-updates universe
deb http://mirrors.aliyun.com/ubuntu/ xenial multiverse
deb http://mirrors.aliyun.com/ubuntu/ xenial-updates multiverse
deb http://mirrors.aliyun.com/ubuntu/ xenial-backports main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu xenial-security main restricted
deb http://mirrors.aliyun.com/ubuntu xenial-security universe
deb http://mirrors.aliyun.com/ubuntu xenial-security multiverse
View Code

更新资源

apt-get update

2台服务器都安装docker

apt-get install -y docker.io

修改镜像为阿里云

默认的更新源太慢了,所以这里直接使用阿里云的更新源

在2台服务器上面修改

vim /etc/docker/daemon.json 

内容如下:

{
   "registry-mirrors": [
      "https://kv3qfp85.mirror.aliyuncs.com"
    ]
}

2台服务器都 重启docker服务

systemctl restart docker

下载软件包

登录到128服务器,创建目录,并下载软件包。待会dockerfile会用到!

mkdir /opt/elasticsearch
cd /opt/elasticsearch
wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.4.3.deb
mkdir /opt/kibana
cd /opt/kibana
wget https://artifacts.elastic.co/downloads/kibana/kibana-6.4.3-amd64.deb

如果下载速度比较慢,可以开迅雷下载,再上传到服务器!

复制sources.list,待会dockerfile会用到!

cp /etc/apt/sources.list /opt/elasticsearch/
cp /etc/apt/sources.list /opt/kibana/

登录到129服务器,创建目录,并下载软件包。待会dockerfile会用到!

mkdir /opt/logstash
cd /opt/logstash
wget https://artifacts.elastic.co/downloads/logstash/logstash-6.4.3.deb
mkdir /opt/filebeat
cd /opt/filebeat
wget https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-6.4.3-amd64.deb

复制sources.list,待会dockerfile会用到!

cp /etc/apt/sources.list /opt/logstash/
cp /etc/apt/sources.list /opt/filebeat/
三、安装elasticsearch

登录到128服务器,修改系统参数

vim /etc/sysctl.conf

修改参数vm.max_map_count,此参数必须修改,否则启动失败!

vm.max_map_count = 2621440

使用以下命令刷新

sysctl -p

请确保服务器有2G的可用内存!否则会导致elasticsearch启动失败!

创建dockerfile

vim /opt/elasticsearch/dockerfile

内容如下:

FROM ubuntu:16.04
# 修改更新源为阿里云
ADD sources.list /etc/apt/sources.list
ADD elasticsearch-6.4.3.deb ./
# 安装jdk和elasticsearch
RUN apt-get update && apt-get install -y openjdk-8-jdk --allow-unauthenticated && apt-get clean all && dpkg -i elasticsearch-6.4.3.deb && rm -rf elasticsearch-6.4.3.deb
EXPOSE 9200
# 添加启动脚本
ADD run.sh.
RUN chmod 755 run.sh
ENTRYPOINT [ "/run.sh"]

准备run.sh

vim /opt/elasticsearch/run.sh

内容如下

Ubuntu 搭建ELK第3张Ubuntu 搭建ELK第6张
#!/bin/bash
set -e
# 添加时区
TZ=Asia/Shanghai
ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
# 设置权限
chown -R elasticsearch:elasticsearch /etc/elasticsearch
# 判断目录是否存在,否则创建
if [ ! -d /var/lib/elasticsearch/data ];then
  mkdir -p /var/lib/elasticsearch/data
  chown -R elasticsearch:elasticsearch /var/lib/elasticsearch/data
fi
if [ ! -d /var/log/elasticsearch/logs ];then
  mkdir -p /var/log/elasticsearch/logs
  chown -R elasticsearch:elasticsearch /var/log/elasticsearch/logs
fi
# 修改数据和日志目录
sed -i '33s@/var/lib/elasticsearch@/var/lib/elasticsearch/data@g' /etc/elasticsearch/elasticsearch.yml
sed -i '37s@/var/log/elasticsearch@/var/log/elasticsearch/logs@g' /etc/elasticsearch/elasticsearch.yml
# 修改绑定ip和端口
sed -i '55s@#network.host: 192.168.0.1@network.host: 0.0.0.0@g' /etc/elasticsearch/elasticsearch.yml 
sed -i '59s@#http.port: 9200@http.port: 9200@g' /etc/elasticsearch/elasticsearch.yml
# 修改启动文件,去掉-d参数,避免后台运行
sed -i 72's@-d -p $PID_FILE@-p $PID_FILE@g' /etc/init.d/elasticsearch
# 启动elasticsearch,要hold住,否则容器启动就退出了!
/etc/init.d/elasticsearch start
View Code

此时,/opt/elasticsearch目录结构如下:

./
├── dockerfile
├── elasticsearch-6.4.3.deb
├── run.sh
└── sources.list

生成镜像

docker build -t elasticsearch-6.4.3 /opt/elasticsearch

启动容器

docker run -d -it --restart=always -p 9200:9200 elasticsearch-6.4.3

等待几秒钟,查看端口是否起来了

root@jqb-node128:/opt/elasticsearch# netstat -anpt
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      1303/sshd       
tcp6       0      0 :::9200                 :::*                    LISTEN      13342/docker-proxy
tcp6       0      0 :::22                   :::*                    LISTEN      1303/sshd       

访问页面

http://192.168.91.128:9200/

效果如下:

Ubuntu 搭建ELK第7张

按照网络大部分的文章来讲,这个时候,应该要安装elasticsearch-head插件。但是不好意思,目录的elasticsearch-head插件不支持elasticsearch6.x版本。

最高支持到elasticsearch5.x版本!

四、安装logstash

登录到129服务器,在安装logstash之前,先来安装Nginx

安装nginx

apt-get install -y nginx

安装好之后,默认就启动了。访问首页:

Ubuntu 搭建ELK第8张

默认的access日志为

/var/log/nginx/access.log

安装logstash

创建dockerfile,内容如下:

FROM ubuntu:16.04
# 修改更新源为阿里云
ADD sources.list /etc/apt/sources.list
ADD logstash-6.4.3.deb ./
# 安装jdk和elasticsearch
RUN apt-get update && apt-get install -y openjdk-8-jdk --allow-unauthenticated && apt-get clean all && dpkg -i logstash-6.4.3.deb && rm -rf logstash-6.4.3.deb
EXPOSE 9600
# 添加启动脚本
ADD run.sh.
RUN chmod 755 run.sh
ENTRYPOINT [ "/run.sh"]

准备run.sh,内容如下:

Ubuntu 搭建ELK第3张Ubuntu 搭建ELK第10张
#!/bin/bash
# 添加时区
TZ=Asia/Shanghai
ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
# 修改配置文件
sed -i '41s@# pipeline.workers: 2@# pipeline.workers: 1@g' /etc/logstash/logstash.yml
sed -i '45s@# pipeline.batch.size: 125@pipeline.batch.size: 125@g' /etc/logstash/logstash.yml
sed -i '50s@# pipeline.batch.delay: 50@pipeline.batch.delay: 5@g' /etc/logstash/logstash.yml
sed -i '64s@# path.config:@path.config: /etc/logstash/conf.d@g' /etc/logstash/logstash.yml
sed -i '190s@# http.host: "127.0.0.1"@http.host: "0.0.0.0"@g' /etc/logstash/logstash.yml
sed -i '195s@# http.port: 9600-9700@# http.port: 9600@g' /etc/logstash/logstash.yml
cp -r /etc/logstash /usr/share/logstash/config
# 启动
/usr/share/logstash/bin/logstash -f /etc/logstash/conf.d/logstash.conf
View Code

准备logstash.conf,内容如下:

input {
        file{
                path => "/var/log/nginx/access.log"
                type => "system"
                start_position => "beginning"
        }
}
output {    
        elasticsearch {
                hosts => ["192.168.91.128:9200"]
                index => "system-%{+YYYY.MM.dd}"
                }
        stdout { codec =>rubydebug }
}

参数解释:

Ubuntu 搭建ELK第3张Ubuntu 搭建ELK第12张
input : 表示输入的内容
  file: 表示类型为文件
    path: 文件路径
    type: 类型
    start_position: 监听文件的起始位置,默认是end。beginning表示开始
output : 表示输出的内容
  elasticsearch : 表示输出到elasticsearch 
    hosts: ip地址,这里的ELASTICSEARCH,待会会被run.sh替换为真正的地址,比如192.168.91.128:9200
    index: 索引值,index常用的%{+YYYY.MM.dd}这种写法必须读取@timestamp数据。这样写容易做分片,方便es删除历史数据!
            stdout { codec => rubydebug } 开启debug日志输出
View Code

注意:调试阶段要先开启日志输出,否则无法知道有没有发送数据!

如果还想收集nginx错误日志,path还可以这么写

/var/log/nginx/*.log

因为error日志也在/var/log/nginx/目录下。

如果想收集/var/log里面的所有文件,可以这么写

/var/log/*/*

此时,/opt/logstash目录结构如下:

./
├── dockerfile
├── logstash-6.4.3.deb
├── logstash.conf
├── run.sh
└── sources.list

生成镜像

docker build -t logstash-6.4.3 /opt/logstash

启动容器

docker run -it --restart=always -p 9600:9600 -v "/opt/logstash:/etc/logstash/conf.d" -v /var/log:/var/log logstash-6.4.3

注意:这里使用2个-v选项,用来挂载文件

logstash.conf 是配置文件,需要配置文件路径以及elasticsearch地址,注意要带端口号

/var/log 是日志文件,因为要监控nginx的日志,所以要把日志目录挂载到容器中

run.sh 启动时,会加载配置文件/etc/logstash/conf.d/logstash.conf

等待几秒钟,查看端口是否起来了

root@jqb-node129:/opt/logstash# netstat -anpt
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      32174/nginx -g daem
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      8798/sshd       
tcp        0      0 192.168.91.129:22       192.168.91.1:54112      ESTABLISHED 33699/sshd: root@no
tcp        0     36 192.168.91.129:22       192.168.91.1:52999      ESTABLISHED 31702/0
tcp6       0      0 :::80                   :::*                    LISTEN      32174/nginx -g daem
tcp6       0      0 :::22                   :::*                    LISTEN      8798/sshd       
tcp6       0      0 :::9600                 :::*                    LISTEN      41726/docker-proxy

访问页面

http://192.168.91.129:9600/

效果如下:

Ubuntu 搭建ELK第13张

查看elasticsearch的数据

http://192.168.91.128:9200/_search?pretty

效果如下:

Ubuntu 搭建ELK第14张

没有发现index值,数据是空的!

访问一下nginx页面,查看access日志是否有了

root@b304d87c93c4:/etc/logstash/conf.d# tail -f /var/log/nginx/access.log 
192.168.91.1 - - [15/Nov/2018:18:08:23 +0800] "GET / HTTP/1.1" 200 396 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.67 Safari/537.36"
192.168.91.1 - - [15/Nov/2018:18:08:23 +0800] "GET /favicon.ico HTTP/1.1" 404 209 "http://192.168.91.129/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.67 Safari/537.36"

查看docker进程

root@jqb-node129:/opt/logstash# docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS                    NAMES
b304d87c93c4        logstash-6.4.3      "/run.sh"           7 minutes ago       Up 6 minutes        0.0.0.0:9600->9600/tcp   inspiring_fermat

查看日志输出:

docker logs -t b304d87c93c4

输出如下信息:

{
          "type" => "system",
          "path" => "/var/log/nginx/access.log",
    "@timestamp" => 2018-11-15T10:08:24.189Z,
       "message" => "192.168.91.1 - - [15/Nov/2018:18:08:23 +0800] "GET / HTTP/1.1" 200 396 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.67 Safari/537.36"",
      "@version" => "1",
          "host" => "b304d87c93c4"
}
{
          "type" => "system",
          "path" => "/var/log/nginx/access.log",
    "@timestamp" => 2018-11-15T10:08:24.276Z,
       "message" => "192.168.91.1 - - [15/Nov/2018:18:08:23 +0800] "GET /favicon.ico HTTP/1.1" 404 209 "http://192.168.91.129/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.67 Safari/537.36"",
      "@version" => "1",
          "host" => "b304d87c93c4"
}

再次查看elasticsearch页面,发现数据已经有了!index值为system-2018.11.15

Ubuntu 搭建ELK第15张

既然有了数据,就可以使用kin展示了!

查看索引

http://192.168.91.128:9200/_cat/indices?v

这个索引,就是接下来kabana要填的索引值。

更多api,请参考链接:

https://blog.csdn.net/hanyuyang19940104/article/details/81743459

五、安装kibana

登录到128服务器,创建dockerfile

内容如下:

FROM ubuntu:16.04
ADD kibana-6.4.3-amd64.deb ./
#安装jdk和elasticsearch
RUN dpkg -i kibana-6.4.3-amd64.deb && rm -rf kibana-6.4.3-amd64.deb
EXPOSE 5601
#添加启动脚本
ADD run.sh .
RUN chmod 755run.sh
ENTRYPOINT [ "/run.sh"]

注意:kibana不需要安装jdk,直接安装deb包即可!

准备run.sh,内容如下:

Ubuntu 搭建ELK第3张Ubuntu 搭建ELK第17张
#!/bin/bash
# 添加时区
TZ=Asia/Shanghai
ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
elasticsearch="192.168.91.128"
# 修改配置文件
# 修改监听地址
sed -i '7s@#server.host: "localhost"@server.host: "0.0.0.0"@g' /etc/kibana/kibana.yml
# 去除注释
sed -i '28s@#elasticsearch.url: "http://localhost:9200"@elasticsearch.url: "http://localhost:9200"@g' /etc/kibana/kibana.yml
# 修改ip
sed -i "28s?localhost?$elasticsearch?g" /etc/kibana/kibana.yml
# 启动
/usr/share/kibana/bin/kibana "-c /etc/kibana/kibana.yml"
View Code

此时, /opt/kibana目录结构如下:

./
├── dockerfile
├── kibana-6.4.3-amd64.deb
└── run.sh

生成镜像

docker build -t kibana-6.4.3 /opt/kibana

启动容器

docker run -d -it --restart=always -p 5601:5601 kibana-6.4.3

等待几秒钟,查看端口是否起来了

root@jqb-node128:/opt/elasticsearch# netstat -anpt
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      1303/sshd       
tcp6       0      0 :::9200                 :::*                    LISTEN      13342/docker-proxy
tcp6       0      0 :::5601                 :::*                    LISTEN      2488/docker-proxy
tcp6       0      0 :::22                   :::*                    LISTEN      1303/sshd       

访问页面

http://192.168.91.128:5601

选择不参加体验计划

Ubuntu 搭建ELK第18张

点击左边的Discover,下面已经提示了index值

Ubuntu 搭建ELK第19张

将index值复制过来,选择下一步

Ubuntu 搭建ELK第20张

时间选择@timestamp,点击创建

Ubuntu 搭建ELK第21张

效果如下:

Ubuntu 搭建ELK第22张

多刷新几次Nginx页面,刷10次。

效果如下:

Ubuntu 搭建ELK第23张

如果数据较少,是不会出现这个页面的!

六、安装filebeat

下面演示如下使用filebeat

查看进程

root@jqb-node129:/opt/logstash# docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS                    NAMES
b304d87c93c4        logstash-6.4.3      "/run.sh"           49 minutes ago      Up 50 seconds       0.0.0.0:9600->9600/tcp   inspiring_fermat

杀掉logsth的进程

docker rm b304d87c93c4 -f

由于时间关系,这里不演示使用docker了。直接服务器安装filebeat

dpkg -i filebeat-6.4.3-amd64.deb

关于filebeat,主要是配置文件

/etc/filebeat/filebeat.yml

要修改的部分如下:

-type: log
  # Change to trueto enable this input configuration.
enabled: false
  # Paths that should be crawled and fetched. Glob based paths.
  paths:
    - /var/log/*.log
    #- c:programdataelasticsearchlogs*
...
output.elasticsearch:
  # Array of hosts to connect to.
hosts: ["localhost:9200"]

修改后的的文件如下:

-type: log
  # Change to trueto enable this input configuration.
enabled: true
  # Paths that should be crawled and fetched. Glob based paths.
  paths:
    - /var/log/nginx/access.log
    #- c:programdataelasticsearchlogs*
...
output.elasticsearch:
  # Array of hosts to connect to.
  hosts: ["192.168.91.128:9200"]

注意:enabled一定要配置为true,否则不会生效,不会发送日志

启动filebeat

systemctl start filebeat.service

查看elasticsearch数据,发现有filebeat的数据了

Ubuntu 搭建ELK第24张

免责声明:文章转载自《Ubuntu 搭建ELK》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇浏览器和服务器 对http请求(post get) url长度限制【转】Android各大发布市场下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

jquery滚动条加载数据

//滚动条 $(window).scroll(function () { var scrollTop = $(this).scrollTop(); var scrollHeight = $(document).height(); var windowHeight = $(this).height(); var data = $("#n").text();...

进入正在运行的 docker 容器(docker container)

在使用 docker 容器的时候,我们总会想看看容器内部长什么样子:我们使用 docker exec 命令可以满足我们的期望: ➜ compose docker exec --help Usage: docker exec [OPTIONS] CONTAINER COMMAND [ARG...] Run a command in a r...

Java 9 揭秘(19. 平台和JVM日志)

Tips做一个终身学习的人。 在这章中,主要介绍以下内容: 新的平台日志(logging)API JVM日志的命令行选项 JDK 9已经对平台类(JDK类)和JVM组件的日志系统进行了大整。 有一个新的API可以指定所选择的日志框架作为从平台类记录消息的日志后端。 还有一个新的命令行选项,可以从所有JVM组件访问消息。 在本章中,详细介绍两个记录工具...

Windows下用FFmpeg+nginx+rtmp搭建直播环境 实现推流、拉流(超简单教程)

Windows下用FFmpeg+nginx+rtmp搭建直播环境 实现推流、拉流(超简单教程) 原文链接:https://www.jianshu.com/p/eacfc0a9f2fd 话不多先森Y关注 12018.07.20 10:55:22字数 622阅读 18,545 成功运行!!​ 1.环境 开发环境:windows 开发工具:FFmp...

在可编辑div中插入文字或图片的问题解决思路

最近在网上碰到一个人问了我一个问题,在可编辑div中插入文字或者图片。因为web在线编辑器我从来只是用,基本不会去研究源代码。后来正好一个在线聊天web项目中也要用到这个功能,我就特地看看了代码。 基本上编辑器或者在线聊天web页面,是不太可能用textarea在做输入框的,因为我们可能要插入图片或者超级链接,因此选择在iframe或者div作为输入框是必...

再谈容器与虚拟机的那点事

容器技术起源于虚拟化技术的发展,欣欣向荣的 Docker 着实是容器技术潮流中的一朵十分耀眼的浪花。在 Docker 诞生之初,它常常被放在虚拟机技术的对立面,甚至还有过 Docker 将替代虚拟机的夸大宣传,在许多集群以及虚拟化方案设计的讨论中,也总会将两者拿来比较一番利弊。 现如今 Docker 已经比较普及,这些曾经的传言不攻而破。容器以及 Dock...