从ELK认识docker-compose

系列文章目录

CentOS Docker 安装并用阿里云加速

docker安装Elasticsearch以及分词器

部署Elasticsearch下篇:安装Kibana

Elastic Stack之日志收集


请添加图片描述


前言

docker compose 的使用场景

当某个容器有多个依赖容器的时候适合使用docker-compose.
比如:微服务架构下的service A依赖 service B和service C;当你需要启动service A的时候就要先启动B和C,一共要启动三次,当你用docker-compose编排了这三个service之后,你只需要一个命令就可以按照你设置的顺序和参数启动,关闭也是一样。

又比如一个应用的前端容器和后端容器,它们两个适合组织到一个docker-compose里面。

什么场景不适合使用docker compose

docker-compose只是一个为了解决特定问题的工具,并不是所有出现docker的地方都适合用docker-compose。
如下场景:
公司开发的多个应用分别使用了mysql,pgsql,redis,MQ四个基础的组件。这个时候需要维护mysql,就要把使用它的service停掉,但是不代表要把所有的service都停掉,也更不应该将pgsql,redis,MQ三个基础的组件同时停掉,因为这个时候它们之间并没有依赖关系,在逻辑和物理上它们是相互独立的存在,在这种场景下就不适合将基础组件之间或者将基础组件和service之间关联起来,如果硬要将它们编排到一起的话就很麻烦也不灵活。

总结:不可独立提供服务,需要依赖另外的容器才组成完整服务的容器可以用docker-compose将它们编排组织到一起。


提示:以下是本篇文章正文内容,下面案例可供参考

一、docker compose是什么?

Docker Compose version v2.2.3

Docker Compose 是一个在 Docker 上运行多容器应用程序的工具,使用Compose 文件格式定义。Compose文件用于定义组成应用程序的一个或多个容器的配置方式。拥有 Compose 文件后,您可以使用单个命令创建和启动应用程序:docker compose up.

关于更新和向后兼容性
Docker Compose V2 是 Docker Compose 的主要版本升级版本。它已经用 Golang 从头开始​​完全重写(V1 是用 Python 编写的)。Compose V2 的安装说明与 V1 不同。V2 不再是独立的二进制文件,必须调整安装脚本。有些命令是不同的。 为了从旧版 docker-compose 1.xx顺利过渡,请考虑安装compose-switch以将docker-compose …命令转换为 Compose V2 的docker
compose … . 还要检查 V2 的–compatibility标志。

来自 https://github.com/docker/compose

二、使用步骤

compose和docker版本对照表

此表显示了哪些 Compose 文件版本支持特定的 Docker 版本。

在这里插入图片描述

我的环境

组件版本
docker18.09.6, build 481bc77156
docker composev2.2.3
elastic stock7.6.2

1.下载docker-compose

下载页面
https://github.com/docker/compose/releases/tag/v2.2.3

2.设置docker-compose可执行文件

授权可执行权限

chmod +x docker-compose-linux-x86_64 

查看版本

$> docker-compose-linux-x86_64 -v
Docker Compose version v2.2.3

放到系统执行目录

mv ./docker-compose-linux-x86_64 /usr/bin/.

根据自身需要去改名,比如改为docker-compose

代码如下(示例):

3.docker-compose配置文件

docker-compose.yml

version: '3.6'
# 根据上面的compose与docker版本对照表,我们可以选择 3.6,3.7这里我们使用3.6
services:
  elasticsearch2:
    image: "docker.elastic.co/elasticsearch/elasticsearch:7.6.2"
    container_name: es_server_test
    ports:
      - 9200:9200
      - 9300:9300
    hostname: elasticsearchhhh
    environment:
      - discovery.type=single-node
    build:
      args:
        args1: 'nothing'
    mem_limit: 1524m
    # 这个参数设置了容器可以使用的内存,等同于 docker run 的 -m 参数
    volumes:
      - /root/elkcompose/elasticsearch/plugins:/usr/share/elasticsearch/plugins
      - /root/elkcompose/elasticsearch/data:/usr/share/elasticsearch/data
    deploy:
      labels: 
        description: "This Test container"
      resources:
        limits:
          cpus: '2'
          memory: 1524M
        reservations:
          cpus: '1'
          memory: 800M
  logstash_server_test:
    image: "elastic/logstash:7.6.2"
    container_name: logstash_server_test
    ports:
      - 5044:5044
      - 9600:9600
    depends_on:
       - elasticsearch266
    mem_limit: 400m
  kibana_server_test:
    image: "elastic/kibana:7.6.2"
    container_name: kibana_server_test
    ports:
      - 5601:5601
    depends_on:
       - elasticsearch2
 # depends_on 设置依赖关系:以依赖性顺序启动服务,被依赖项先于当前容器启动
    links:
       - elasticsearch2:es
 # 将容器链接到本容器网络内可访问,并定义个hostname,可通过hostname来访问被链接的容器
    mem_limit: 1024m  
    environment:
      #设置访问elasticsearch的地址
      - "ELASTICSEARCH_HOSTS=http://es:9200"

4.运行与检测

需要到docker-compose.yml文件同目录运行docker-compose up或者docker-compose up -d来启动,关闭命令是docker-compose down,同样也需要到docker-compose.yml同目录下执行。

查看日志的命令是docker-compose logs
查看运行的容器docker-compose ps

在这个配置下logstash是跑不起来的,为了做一个错误的实例,但是不影响es和kibana的运行。

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述


可能出现的问题

exited with code 137

资源不足,大多数是因为内存不够

kibana连不上elasticsearch

我看一些网上的博客在kibana段是这么配置的,这是不对的,kibana里面没有这样的环境变量匹配。。

    environment:
      #设置访问elasticsearch的地址
      - elasticsearch.hosts=http://es:9200

正确的

    links:
       - elasticsearch2:es
    environment:
      #设置访问elasticsearch的地址
      - "ELASTICSEARCH_HOSTS=http://es:9200"

先用links给es配个hostname,或者你直接使用es配置段的services key也可以。

访问目录权限的问题

es_server_test        | ElasticsearchException[failed to bind service]; nested: AccessDeniedException[/usr/share/elasticsearch/data/nodes];
es_server_test        | Likely root cause: java.nio.file.AccessDeniedException: /usr/share/elasticsearch/data/nodes
es_server_test        |         at java.base/sun.nio.fs.UnixException.translateToIOException(UnixException.java:90)
es_server_test        |         at java.base/sun.nio.fs.UnixException.rethrowAsIOException(UnixException.java:111)
es_server_test        |         at java.base/sun.nio.fs.UnixException.rethrowAsIOException(UnixException.java:116)
$> pwd
/root/elkcompose/elasticsearch
$> chmod -R 777 elasticsearch

总结

以上就是要讲的内容,本文通过ELK介绍了docker-compose的使用,建议在有docker基础的情况下学习compose。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值