Docker 相关命令

一、安装 Docker

1. CentOS 7 安装 docker

1.1 卸载(可选)

如果之前安装过旧版本的Docker,可以使用下面命令卸载:

yum remove docker \
                  docker-client \
                  docker-client-latest \
                  docker-common \
                  docker-latest \
                  docker-latest-logrotate \
                  docker-logrotate \
                  docker-selinux \
                  docker-engine-selinux \
                  docker-engine \
                  docker-ce

1.2 安装 docker

1.2.1 如果没有 yum,先安装 yum 工具

yum install -y yum-utils \
           device-mapper-persistent-data \
           lvm2 --skip-broken

1.2.2 更新本地镜像源

设置docker镜像源

yum-config-manager \
    --add-repo \
    https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
    
sed -i 's/download.docker.com/mirrors.aliyun.com\/docker-ce/g' /etc/yum.repos.d/docker-ce.repo

yum makecache fast

然后输入命令:

yum install -y docker-ce

** 1.3 启动 docker **

docker应用需要用到各种端口,逐一去修改防火墙设置。非常麻烦,因此建议大家直接关闭防火墙!

# 关闭
systemctl stop firewalld


# 禁止开机启动防火墙
systemctl disable firewalld


#查看是否关闭防火墙
systemctl status firewalld

启动

#通过命令启动docker
systemctl start docker


#查看docker版本
docker -v

** 1.4 配置镜像加速 **

docker官方镜像仓库网速较差,我们需要设置国内镜像服务:

参考阿里云的镜像加速文档:https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors

##创建文件夹
sudo mkdir -p /etc/docker


 ##在文件夹内新建一个daemon.json文件
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://m3e0b9zc.mirror.aliyuncs.com"]
}
EOF


##重新加载文件
sudo systemctl daemon-reload


##重启docker
sudo systemctl restart docker


##配置docker开机自启
systemctl enable docker

2. docker 相关命令

启动docker(systemctl 命令是系统服务管理器指令)
systemctl start docker

重启docker
systemctl restart docker

然后查看docker状态
systemctl status docker

查看容器id
docker ps -a

启动容器
docker start 容器id

移除容器
docker rm 容器id

强制删除容器
docker rm -f 容器id

查看镜像
docker images

删除 docker 仓库中的镜像
docker rmi 镜像id

删除 docker 仓库中的镜像
docker rmi 镜像名称

设置 redis 跟随 docker 启动命令
docker update redis --restart=always

重新加载服务配置文件
systemctl daemon-reload

查看本机 docker 安装路径
sudo docker info | grep "Docker Root Dir"

二、安装 Mysql

1. 安装命令

docker run  -itd  -p 3366:3306 --name mysql -e character-set-server=utf8mb4 --privileged=true  --restart unless-stopped  -v /data/mysql/conf.d:/etc/mysql/conf.d  -v /data/mysql/logs:/logs  -v /data/mysql/data:/var/lib/mysql -v /etc/localtime:/etc/localtime  -e MYSQL_ROOT_PASSWORD123456  -d mysql:8.0.32 --lower_case_table_names=1

2. 修改 mysql 密码

docker exec -it mysql /bin/bash
ALTER user 'root'@'%' IDENTIFIED BY '123456';

三、安装 Redis

1. 安装命令

执行命令,下载 redis 镜像(版本看自己选择)

docker pull redis:4.0.1

执行命令,创建并启动 redis 容器

docker run --rm -d --name redis6379 -p 6379:6379 redis:4.0.1 --requirepass "123456"

测试方式一:使用 RedisDesktopManager 进行连接测试,可以正常的进行连接。

测试方式二:进入容器测试,执行以下命令,我们可以发现 redis 可以正常执行

# 进入容器
docker exec -it redis6379 bash
 
# 打开 redis 的客户端
redis-cli
 
# 输入 redis 的密码
auth 123456
 
# 封装一个 key 值
set age 35
 
# 获取刚才封装的 key 值
get age

2. 修改 redis 密码

docker exec -it redis sh
redis-cli -h 127.0.0.1 -p 6379 -a your_password
config set requirepass 123456
redis-cli -h localhost -p 6379

四、安装 docker-compose

#1.切换目录
cd /usr/local/bin/


#2.下载
wget https://github.com/docker/compose/releases/download/1.14.0-rc2/docker-compose-Linux-x86_64


#3.修改文件名
mv docker-compose-Linux-x86_64 docker-compose


#4.添加权限
chmod 777 /usr/local/bin/docker-compose

五、安装 Nginx

1、安装命令

Nginx 挂载到服务器的目录:

/work/nginx/conf.d 用于存放配置文件
/work/nginx/html 用于存放网页文件
/work/nginx/logs 用于存放日志
/work/nginx/cert 用于存放 HTTPS 证书

① 创建 /work/nginx 目录,并在该目录下新建 nginx.conf 文件,避免稍后安装 Nginx 报错。内容如下:

user  nginx;
worker_processes  1;

events {
    worker_connections  1024;
}

error_log  /var/log/nginx/error.log warn;
pid        /var/run/nginx.pid;

http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;

    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';
#    access_log  /var/log/nginx/access.log  main;

    gzip on;
    gzip_min_length 1k;     # 设置允许压缩的页面最小字节数
    gzip_buffers 4 16k;     # 用来存储 gzip 的压缩结果
    gzip_http_version 1.1;  # 识别 HTTP 协议版本
    gzip_comp_level 2;      # 设置 gzip 的压缩比 1-91 压缩比最小但最快,而 9 相反
    gzip_types text/plain application/x-javascript text/css application/xml application/javascript; # 指定压缩类型
    gzip_proxied any;       # 无论后端服务器的 headers 头返回什么信息,都无条件启用压缩

    include /etc/nginx/conf.d/*.conf; ## 加载该目录下的其它 Nginx 配置文件
}

② 执行如下命令,使用 Docker 启动 Nginx 容器。

docker run -d \
--name nginx --restart always \
-p 80:80 -p 443:443 \
-e "TZ=Asia/Shanghai" \
-v /work/nginx/nginx.conf:/etc/nginx/nginx.conf \
-v /work/nginx/conf.d:/etc/nginx/conf.d \
-v /work/nginx/logs:/var/log/nginx \
-v /work/nginx/cert:/etc/nginx/cert \
-v /work/nginx/html:/usr/share/nginx/html \
nginx:alpine

③ 执行 docker ps 命令,查看到 Nginx 容器的状态是 UP 的。

④ 启动 docker 容器报错

问题描述:
Linux 系统在启动 docker 容器时,出现报错 docker: Error response from daemon: driver failed programming external connectivity on endpoint lucid_banach(端口映射或启动容器时报错): (iptables failed: iptables --wait -t nat -A DOCKER -p tcp -d 0/0 --dport 8080 -j DNAT --to-destination 172.17.0.2:8080 ! -i docker0: iptables: No chain/target/match by that name).
(exit status 1)).

原因分析:
启动 docker 后,再对防火墙firewalld进行操作,就会发生上述报错,当 firewalld 启动或者重启时,将会从 iptables 中移除 docker 的规则,影响 docker 的正常工作。

解决方案:
重启 docker 服务即可重新生成自定义链 docker。
root 用户输入指令 :systemctl restart docker

2、nginx 配置(结合芋道SpringBoo反向代理)

2.1 方式一:服务器 IP 访问

① 在 /work/nginx/conf.d 目录下,创建 ruoyi-vue-pro.conf,内容如下:

server {
    listen       80;
    server_name  139.9.196.247; ## 重要!!!修改成你的外网 IP/域名

    location / { ## 前端项目
        root   /usr/share/nginx/html/yudao-admin-ui;
        index  index.html index.htm;
        try_files $uri $uri/ /index.html;
    }

    location /admin-api/ { ## 后端项目 - 管理后台
        proxy_pass http://192.168.0.213:48080/admin-api/; ## 重要!!!proxy_pass 需要设置为后端项目所在服务器的 IP
        proxy_set_header Host $http_host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header REMOTE-HOST $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }

    location /app-api/ { ## 后端项目 - 用户 App
        proxy_pass http://192.168.0.213:48080/app-api/; ## 重要!!!proxy_pass 需要设置为后端项目所在服务器的 IP
        proxy_set_header Host $http_host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header REMOTE-HOST $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}

友情提示:

[root] 指令在本地文件时,要使用 Nginx Docker 容器内的路径,即 /usr/share/nginx/html/yudao-admin-ui,否则会报 404 的错误。

② 执行 docker exec nginx nginx -s reload 命令,重新加载 Nginx 配置。

友情提示:

如果你担心 Nginx 配置不正确,可以执行 docker exec nginx nginx -t 命令。

2.2 方式二:独立域名访问

暂无

六、Kafka 的安装与整合 SpringBoot 使用

1、部署 kafka

① 部署 kafka 需要用到 zookeeper,所以先下载 zookeeper 和 kafka

docker pull wurstmeister/zookeeper
docker pull wurstmeister/kafka

② 启动 zookeeper 和 kafka

# 启动 zookeeper
docker run -d --name zookeeper -p 2181:2181  wurstmeister/zookeeper

# 启动 kafka
docker run -d --name kafka -p 9092:9092 -e KAFKA_BROKER_ID=0 -e KAFKA_ZOOKEEPER_CONNECT=xxx.xxx.xxx.xxx(服务器IP):2181 --link zookeeper -e KAFKA_ADVERTISED_LISTENERS=PLAINTEXT://xxx.xxx.xxx.xxx(服务器IP):9092 -e KAFKA_LISTENERS=PLAINTEXT://0.0.0.0:9092 -t wurstmeister/kafka

③ 进入到 kafka/bin 目录下启动

# 进入 kafka 
cd opt/kafka_2.13-2.8.1/bin

# 启动 topic
./kafka-console-producer.sh --broker-list localhost:9092 --topic vipsoft_kafka

④ 启动另一个 SSH,并进入 kafka 交互

# 进入 kafka 
cd opt/kafka_2.13-2.8.1/bin

# 启动 topic
 ./kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic vipsoft_kafka --from-beginning

# 测试发送消息–任意,在第一个窗口输入:
{“datas”:[{“channel”:"",“metric”:“temperature”,“producer”:“ijinus”,“sn”:IJA0101-00002245,“time”:1543207156000,“value”:80}],“ver”:1.0}

2、SpringBoot 整合 kafka

① pom.xml 中引入Kafka依赖

<!-- https://mvnrepository.com/artifact/org.springframework.kafka/spring-kafka -->
<dependency>
    <groupId>org.springframework.kafka</groupId>
    <artifactId>spring-kafka</artifactId>
    <version>2.3.7.RELEASE</version>
</dependency>

② 配置 kafka 的 yaml 文件

kafka:
    bootstrap-servers: xxx.xxx.xxx.xxx:9092  # kafka 服务器地址 :端口
    producer:
      # 发生错误后,消息重发的次数。
      retries: 0
      #当有多个消息需要被发送到同一个分区时,生产者会把它们放在同一个批次里。该参数指定了一个批次可以使用的内存大小,按照字节数计算。
      batch-size: 16384
      # 设置生产者内存缓冲区的大小。
      buffer-memory: 33554432
      # 键的序列化方式
      key-serializer: org.apache.kafka.common.serialization.StringSerializer
      # 值的序列化方式
      value-serializer: org.apache.kafka.common.serialization.StringSerializer
      # acks=0 : 生产者在成功写入消息之前不会等待任何来自服务器的响应。
      # acks=1 : 只要集群的首领节点收到消息,生产者就会收到一个来自服务器成功响应。
      # acks=all :只有当所有参与复制的节点全部收到消息时,生产者才会收到一个来自服务器的成功响应。
      acks: 1
    consumer:
#      group-id:
      # 自动提交的时间间隔 在spring boot 2.X 版本中这里采用的是值的类型为Duration 需要符合特定的格式,如1S,1M,2H,5D
      auto-commit-interval: 1S
      # 该属性指定了消费者在读取一个没有偏移量的分区或者偏移量无效的情况下该作何处理:
      # latest(默认值)在偏移量无效的情况下,消费者将从最新的记录开始读取数据(在消费者启动之后生成的记录)
      # earliest :在偏移量无效的情况下,消费者将从起始位置读取分区的记录
      auto-offset-reset: earliest
      # 是否自动提交偏移量,默认值是true,为了避免出现重复数据和数据丢失,可以把它设置为false,然后手动提交偏移量
      enable-auto-commit: false
      # 键的反序列化方式
      key-deserializer: org.apache.kafka.common.serialization.StringDeserializer
      # 值的反序列化方式
      value-deserializer: org.apache.kafka.common.serialization.StringDeserializer
    listener:
      # 在侦听器容器中运行的线程数。
      concurrency: 5
      #listner负责ack,每调用一次,就立即commit
      ack-mode: manual_immediate
      missing-topics-fatal: false

③ 测试使用

消费者

package com.xiaofan.kafka;

import org.apache.kafka.clients.consumer.ConsumerRecord;
import org.springframework.kafka.annotation.KafkaListener;
import org.springframework.kafka.support.Acknowledgment;
import org.springframework.kafka.support.KafkaHeaders;
import org.springframework.messaging.handler.annotation.Header;
import org.springframework.stereotype.Component;

import java.util.Optional;


@Component
public class KafkaConsumer {

    /**
     * 消费者订阅的主题为test 就是通过 @KafkaListener(topics = {"test"}) 注解实现的
     *
     * @param record 接收的消息被封装成 ConsumerRecord 对象
     */
    @KafkaListener(topics = "test", groupId = "3")
    public void topicTest(ConsumerRecord<?, ?> record, Acknowledgment ack, @Header(KafkaHeaders.RECEIVED_TOPIC) String topic){
        Optional message = Optional.ofNullable(record.value());
        if(message.isPresent()){
            Object msg = message.get();
            System.err.println("topic_test 消费了: Topic: " + topic + ",Message:" + msg);
            ack.acknowledge();
        }
    }
}

生产者

package com.xiaofan.kafka;

import lombok.SneakyThrows;
import org.apache.kafka.clients.producer.RecordMetadata;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.kafka.core.KafkaTemplate;
import org.springframework.kafka.support.SendResult;
import org.springframework.stereotype.Component;
import org.springframework.util.concurrent.ListenableFuture;

import java.util.concurrent.TimeUnit;


@Component
public class KafkaProducer {

  @Autowired private KafkaTemplate<String, Object> kafkaTemplate;

  /**
   * 发送消息
   *
   * @param topic 消息主题
   * @param content 消息内容
   */
  @SneakyThrows
  public void sendMessage(String topic, String content) {
    ListenableFuture<SendResult<String, Object>> future = kafkaTemplate.send(topic, content);
    RecordMetadata recordMetadata = future.get().getRecordMetadata();
    if (recordMetadata == null) {
      System.out.println("消息发送失败!");
    }
    SendResult<String, Object> result = future.get(3, TimeUnit.SECONDS);
    System.out.println("发送的消息:" + result.getProducerRecord().value());
    System.out.println("发送成功!");
  }
}

Test测试

	@Test
    public void testKafka() {
        // 生产者发送消息
        kafkaProducer.sendMessage("test", "哈哈哈哈!");
        kafkaProducer.sendMessage("test", "hhhhhh?");

        // 在这里进行一下线程阻塞,模仿消费者消费消息的过程
        try {
            // 10s
            Thread.sleep(1000 * 3);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }

七、安装 ELFK

1、部署 elasticsearch

// 安装 es
docker pull elasticsearch:7.7.1

// 查看已安装的 docker 镜像
docker images

// 创建挂载目录
mkdir -p /data/elk/es/{config,data,logs}

// 授权,docker 中 elasticsearch 的用户 UID 是1000
chown -R 1000:1000 /data/elk/es

// 创建挂载配置文件
cd /data/elk/es/config
touch elasticsearch.yml
vi elasticsearch.yml

// 修改 elasticsearch.yml 配置文件
#[elasticsearch.yml]
cluster.name: "my-es"
network.host: 0.0.0.0
http.port: 9200

// 运行 elasticsearch,通过镜像,启动一个容器,并将 9200 和 9300 端口映射到本机(elasticsearch 的默认端口是 9200,我们把宿主环境 920 0端口映射到 docker 容器中的 9200 端口)
docker run -it  -d -p 9200:9200 -p 9300:9300 --name es -e ES_JAVA_OPTS="-Xms1g -Xmx1g" -e "discovery.type=single-node" --restart=always -v /data/elk/es/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml -v /data/elk/es/data:/usr/share/elasticsearch/data -v /data/elk/es/logs:/usr/share/elasticsearch/logs elasticsearch:7.7.1

注意:记得保存 es 第一次启动信息,后面会用到
✅ Elasticsearch security features have been automatically configured!Authentication is enabled and cluster connections are encrypted.

ℹ️  Password for the elastic user (reset with `bin/elasticsearch-reset-password -u elastic`):
  6BRAzQEimwstg8RAnj5Q

ℹ️  HTTP CA certificate SHA-256 fingerprint:
  1b288912fc04c6edfeba6d79866db4d83f3ad05b03d882fd1a1fd5961c669aeb

ℹ️  Configure Kibana to use this cluster:Run Kibana and click the configuration link in the terminal when Kibana starts.Copy the following enrollment token and paste it into Kibana in your browser (valid for the next 30 minutes):
  eyJ2ZXIiOiI4LjQuMyIsImFkciI6WyIxNzIuMTguMC4yOjkyMDAiXSwiZmdyIjoiMWIyODg5MTJmYzA0YzZlZGZlYmE2ZDc5ODY2ZGI0ZDgzZjNhZDA1YjAzZDg4MmZkMWExZmQ1OTYxYzY2OWFlYiIsImtleSI6Im13a1FIb3dCVFRBN2VZX3J2WmF2Ol9CeEpmeGNmVEUyZTItc0thLXh2ZHcifQ==

ℹ️ Configure other nodes to join this cluster:Copy the following enrollment token and start new Elasticsearch nodes with `bin/elasticsearch --enrollment-token <token>` (valid for the next 30 minutes):
  eyJ2ZXIiOiI4LjQuMyIsImFkciI6WyIxNzIuMTguMC4yOjkyMDAiXSwiZmdyIjoiMWIyODg5MTJmYzA0YzZlZGZlYmE2ZDc5ODY2ZGI0ZDgzZjNhZDA1YjAzZDg4MmZkMWExZmQ1OTYxYzY2OWFlYiIsImtleSI6Im1Ra1FIb3dCVFRBN2VZX3J2WmF1Oi1YcjExVDNXUTdhRmh4T2dfODBISUEifQ==

  If you're running in Docker, copy the enrollment token and run:
  `docker run -e "ENROLLMENT_TOKEN=<token>" docker.elastic.co/elasticsearch/elasticsearch:8.4.3`
  
// 验证安装是否成功
curl http://localhost:9200

访问http://localhost:9200
用户名:elastic
输入es 第一次启动生成的密码:6BRAzQEimwstg8RAnj5Q

如果密码忘记,重置密码。

2、部署 kibana

// 安装 kibana
docker pull kibana:7.7.1

// 查看是否完成
docker images

// 获取 elasticsearch 容器 esip,esip 为es容器的通讯ip地址
docker inspect --format '{{ .NetworkSettings.IPAddress }}' es
// 查看IP
docker inspect elasticsearch  |grep IPAddress
// 查看 es 状态和详细 esip
docker inspect es

// 修改配置文件,创建文件夹、生成yml文件并且赋予读写权限
sudo mkdir -p /data/elk/kibana
sudo touch /data/elk/kibana/kibana.yml
sudo chmod +w /data/elk/kibana/kibana.yml

// 编辑配置文件
vi /data/elk/kibana/kibana.yml

// 修改 kibana.yml 配置文件,elasticsearch.hosts 即为 http://esip:9200
#[kibana.yml]
#Default Kibana configuration for docker target
server.name: kibana
server.host: "0"
elasticsearch.hosts: ["http://esip:9200"]
xpack.monitoring.ui.container.elasticsearch.enabled: true

// 运行 kibana
docker run -d --restart=always --log-driver json-file --log-opt max-size=100m --log-opt max-file=2 --name kibana -p 5601:5601 -v /data/elk/kibana/kibana.yml:/usr/share/kibana/config/kibana.yml kibana:7.7.1

// 查看状态
docker ps | grep kibana
docker ps

// 查看 kibana 日志
docker logs kibana

// 访问界面
浏览器上输入:http://ip:5601

注意:每次重启服务器,所分配的 esip 可能都不一样(后面会讲固定容器ip)

// 中文设置
// Kibana 的配置文件 kibana.yml 文件应该在 /data/elk/kibana/kibana.yml 路径下
// 要将 i18n.locale 配置为 zh-CN,打开 /data/elk/kibana/kibana.yml 文件,找到末尾并添加以下行
i18n.locale: "zh-CN"

// 重启 kibana 容器以使更改生效
docker restart kibana

3、部署 logstash

// 安装 logstash
docker pull logstash:7.7.1

// 编辑 logstash.yml 配置文件,所使用目录需对应新增
mkdir /data/elk/logstash/
touch /data/elk/logstash/logstash.yml
vi /data/elk/logstash/logstash.yml

// 修改 logstash.yml 配置文件
#[logstash.yml]
http.host: "0.0.0.0"
xpack.monitoring.elasticsearch.hosts: [ "http://esip:9200" ]
xpack.monitoring.elasticsearch.username: elastic
xpack.monitoring.elasticsearch.password: changeme
path.config: /data/docker/logstash/conf.d/*.conf
path.logs: /var/log/logstash

// 编辑 logstash.conf 文件,此处先配置 logstash 直接采集本地数据发送至 es
mkdir /data/elk/logstash/conf.d/
touch /data/elk/logstash/conf.d/syslog.conf
vi /data/elk/logstash/conf.d/syslog.conf
cat /data/elk/logstash/conf.d/syslog.conf

// 修改 syslog.conf 配置文件
#[syslog.conf]
input {
  syslog {
    type => "system-syslog"
    port => 5044
  }
}
output {
  elasticsearch {
    hosts => ["ip:9200"] 
    index => "system-syslog-%{+YYYY.MM}" 
  }
}
 
// 编辑本地 rsyslog 配置增加
vi /etc/rsyslog.conf 
*.* @@xxx.xxx.xxx.xxx(服务器ip):5044

// 配置修改后重启服务
systemctl restart rsyslog

// 运行 logstash
docker run -d --restart=always --log-driver json-file --log-opt max-size=100m --log-opt max-file=2 -p 5044:5044 --name logstash -v /data/elk/logstash/logstash.yml:/usr/share/logstash/config/logstash.yml -v /data/elk/logstash/conf.d/:/data/docker/logstash/conf.d/ logstash:7.7.1

// 测试 es 接收 logstash 数据
curl http://localhost:9200/_cat/indices?v

4、部署 filebeat

// 在需要监测的机器 yum 安装 filebeat
wget https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-7.7.1-x86_64.rpm
yum install filebeat-7.7.1-x86_64.rpm

// filebeat 配置,此处先配置 filebeat 直接发送数据到 es
vim /etc/filebeat/filebeat.yml

#[filebeat.yml]
output.logstash:
  # The Logstash hosts
  hosts: ["ip:5044"]

// 启动服务
systemctl restart filebeat.service

// es接收数据查询
curl http://localhost:9200/_cat/indices?v

5、filebeat 采集数据,logstash 过滤,在 kibana 中显示

// 删除之前的 logstash 生成的测试数据
curl -XDELETE http://localhost:9200/system-syslog-2023.12

// 修改 filebeat.yml,后重启服务
vim /etc/filebeat/filebeat.yml
cat /etc/filebeat/filebeat.yml

#[filebeat.yml]
output.logstash:
  # The Logstash hosts
  hosts: ["ip:5044"]

// 重启服务
systemctl restart filebeat.service

// 修改 lostash.conf 配置
touch /data/elk/logstash/conf.d/logstash.conf
vi /data/elk/logstash/conf.d/logstash.conf
cat /data/elk/logstash/conf.d/logstash.conf

#[lostash.conf]
input {
  beats {
    port => 5044
  }
}
output {
  elasticsearch {
    hosts => ["172.17.0.2:9200"]
    index => "filebeat_g-%{+YYYY.MM.dd}"
  }
}

// 查看 es 是否获取数据
curl http://localhost:9200/_cat/indices?v

6、kibana 增加索引

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

7、固定容器的 ip

1. 启动顺序

启动顺序 es、kibana、logstash、filebeat
cd /var/lib/docker
docker restart es
docker restart kibana
docker restart logstash
systemctl restart filebeat.service

2. 固定容器的 ip

// 查看网络列表
docker network ls

// 查看 es 状态和详细 esip
docker inspect es

// 查看网络连接情况
docker network inspect bridge

// 查看es容器的ip:
docker inspect es  |grep IPAddress
172.16.0.2
docker inspect kibana  |grep IPAddress
172.16.0.3
docker inspect logstash  |grep IPAddress
172.16.0.4

// 创建新的bridge网络供容器使用
docker network create --driver bridge --subnet 172.16.0.0/16  --gateway 172.16.0.1 elfk

注意:网段尽量不要跟主机重复。
166.166.0.0/16 其中末尾的16表示最多支持65535个ip地址,范围是166.166.0.2166.166.255.255。可以改为24,最多支持254个ip,范围是166.166.0.2166.166.0.255。
elfk 是创建的网络名称,可以自己改变。

//解除容器原先的网络:
docker network disconnect  bridge es
docker network disconnect  bridge kibana
docker network disconnect  bridge logstash

//重新绑定网络和指定ip:
docker network connect es --ip 172.16.0.2 es
docker network connect es --ip 172.16.0.2 kibana
docker network connect es --ip 172.16.0.2 logstash

// 再新建容器,记得绑定网络、ip,--network es --ip 172.16.0.2
// es
docker run -it  -d -p 9200:9200 -p 9300:9300 --name es  \
--network es --ip 172.16.0.2 \
-e ES_JAVA_OPTS="-Xms1g -Xmx1g"  \
-e "discovery.type=single-node"  \
--restart=always  \
-v /data/elk/es/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml  \
-v /data/elk/es/data:/usr/share/elasticsearch/data  \
-v /data/elk/es/logs:/usr/share/elasticsearch/logs elasticsearch:7.7.1

// kibana
docker run -d --restart=always \
--log-driver json-file --log-opt max-size=100m --log-opt max-file=2 \
--name kibana -p 5601:5601 \
--network es --ip 172.16.0.3 \
-v /data/elk/kibana/kibana.yml:/usr/share/kibana/config/kibana.yml kibana:7.7.1

// logstash
docker run -d --restart=always \
--log-driver json-file --log-opt max-size=100m --log-opt max-file=2 \
-p 5044:5044 --name logstash \
--network es --ip 172.16.0.4 \
-v /data/elk/logstash/logstash.yml:/usr/share/logstash/config/logstash.yml \
-v /data/elk/logstash/conf.d/:/data/docker/logstash/conf.d/ logstash:7.7.1
  • 42
    点赞
  • 37
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

-.- !

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值