2、环境准备:Linux基础操作、Docker安装与配置、Docker Compose入门

说实话,很多初学者一上来就急着写配置、调代码,结果环境没搭好,折腾半天连个日志都收不上来。我见过太多这样的案例了——自己当年也踩过这个坑。

这一章,咱们把地基打牢。你不需要成为Linux专家,但几个核心命令得顺手。Docker和Compose是这套日志系统的「运行底座」,搞懂了它们,后面30章你都会走得很顺。

2.1 你需要的Linux基础操作

我假设你手头有台Linux机器,Ubuntu 20.04或CentOS 7以上都行。如果你用的是Mac,大部分命令也通用。Windows用户建议先装个WSL2,别在Windows原生环境里折腾Docker,坑太多。

2.1.1 文件与目录操作

日志采集系统离不开文件读写。你至少得熟练这几条:

  • ls -lh —— 看文件大小,别用裸ls,啥都看不清
  • cd /var/log —— 切到日志目录,这是我们的主战场
  • tail -f app.log —— 实时跟踪日志,调试时几乎每刻都在用
  • grep ERROR app.log | head -20 —— 从海量日志里捞关键信息
  • vim或nano —— 改配置文件,我个人偏爱vim,但新手用nano更友好
我的习惯: 每次进服务器第一件事就是 cd /var/log && ls -lh,先看看磁盘有没有被日志撑爆。曾经有一次线上告警,就是日志文件把根目录写满了,服务全挂——从那以后我养成了这个条件反射。

2.1.2 进程与服务管理

我们的采集器以后台进程运行,你得会看进程、杀进程:

  • ps aux | grep filebeat —— 找采集进程
  • systemctl status docker —— 看Docker服务状态
  • kill -9 PID —— 实在关不掉时再用,别滥用

2.1.3 网络与端口检查

日志要传输,网络必须通。我调试时最常用的三板斧:

命令 用途 我踩过的坑
curl -v http://localhost:9200 测试ES是否响应 忘了加端口号,一直报连接拒绝
telnet 192.168.1.10 5044 测试端口连通性 防火墙没开,telnet一直卡住
ss -tlnp 看本机监听端口 比netstat快,推荐用这个
注意: 如果你用云服务器,记得在安全组里放开端口。我曾经在阿里云上配了半天,最后发现是安全组没放行5044端口——低级错误,但特别容易犯。

2.2 Docker安装与配置

Docker是我们这套系统的「集装箱」。每个组件——Filebeat、Logstash、Elasticsearch——都跑在独立的容器里,互不干扰。装好Docker,你就拥有了一个可复制的运行环境。

2.2.1 安装Docker Engine

我推荐用官方脚本一键安装,省心:

curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh

装完后,把当前用户加入docker组,免得每次敲sudo:

sudo usermod -aG docker $USER
newgrp docker   # 或者退出重登

验证一下:

docker --version
docker run hello-world

看到「Hello from Docker!」就对了。

为什么不用包管理器安装? 官方脚本会自动配置软件源、处理依赖、设置开机自启。我早期用apt install docker.io装过,版本太老,后面升级时一堆兼容问题。后来就只用官方脚本了。

2.2.2 配置镜像加速器

国内拉取Docker镜像经常超时。你想想看,一个几百MB的镜像下到一半断了,多闹心。配置个加速器吧:

sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://mirror.ccs.tencentyun.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker

阿里云、腾讯云、中科大都有加速器,选一个离你近的。我个人用腾讯云的,速度一直很稳。

2.2.3 验证Docker网络与存储

日志系统涉及大量数据读写,Docker的存储驱动得选对:

docker info | grep -i "storage driver"

看到overlay2就放心了。如果是devicemapper,建议换系统——CentOS 7默认是devicemapper,性能差,还容易出bug。

2.3 Docker Compose入门

单机跑一个容器用docker run还行,但我们的日志系统有4、5个组件要一起启动,还要配置网络、挂载卷、设置环境变量……手敲命令会疯掉的。

Docker Compose就是来解决这个问题的。它用一个YAML文件描述整个服务栈,一条命令全部拉起。

2.3.1 安装Compose

Docker Compose现在已经是Docker官方的一部分了。如果你装的是Docker Desktop(Mac/Windows),Compose自带。Linux下需要单独装:

sudo curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
docker-compose --version
版本提醒: 建议用v2版本(命令是docker compose,不带横杠)。v1已经停止维护了。我目前所有项目都迁移到了v2,兼容性更好。

2.3.2 第一个Compose文件

咱们先写个最简单的,启动一个Nginx容器看看效果:

# docker-compose.yml
version: '3.8'

services:
  web:
    image: nginx:alpine
    ports:
      - "8080:80"
    restart: always

启动:

docker-compose up -d

浏览器打开http://你的IP:8080,看到Nginx欢迎页就成功了。

这个文件虽然简单,但包含了Compose的核心要素:

  • services —— 定义你要跑的服务
  • image —— 指定镜像
  • ports —— 端口映射,宿主机端口:容器端口
  • restart —— 宕机后自动重启,生产环境必备

2.3.3 常用Compose命令

后面30章你会反复用到这些命令,先混个脸熟:

命令 作用 使用频率
docker-compose up -d 后台启动所有服务 ⭐⭐⭐⭐⭐
docker-compose down 停止并删除容器 ⭐⭐⭐⭐
docker-compose logs -f 跟踪所有服务的日志 ⭐⭐⭐⭐⭐
docker-compose ps 查看服务运行状态 ⭐⭐⭐
docker-compose restart 重启某个服务 ⭐⭐⭐
注意: docker-compose down会删除容器,但不会删除数据卷。如果你改了配置想完全重来,用docker-compose down -v。不过小心——-v会把数据卷也删掉,ES里的索引数据就没了。我吃过一次亏,测试环境还好,生产环境千万别乱用。

2.4 本章知识体系总览

下面这张图把本章的核心知识点串起来了。你可以把它当作一张「地图」,后面用到哪个知识点,回来瞄一眼就行。

环境准备知识体系 Linux基础操作 Docker安装与配置 Docker Compose入门 文件操作:ls / tail / grep 进程管理:ps / systemctl 网络检查:curl / telnet / ss 安装Docker Engine 配置镜像加速器 验证存储驱动 overlay2 安装Compose v2 编写docker-compose.yml 常用命令:up / down / logs 核心目标 掌握Linux基础 → 搭建Docker环境 → 用Compose编排多容器服务 依赖 扩展

2.5 快速验证:你的环境准备好了吗?

学完这一章,你可以用下面这个清单自检一下。每项都打勾了,再往后走:

  • ☐ 能在Linux上熟练使用tail -f和grep
  • ☐ docker --version输出正常,且不用加sudo
  • ☐ 配置了镜像加速器,docker pull nginx:alpine能在1分钟内完成
  • ☐ docker-compose --version输出v2版本
  • ☐ 能成功运行本章的Nginx Compose示例
我的建议: 别急着往下翻。花15分钟把上面5项全部跑通。环境问题越早暴露越好——等写到第10章再发现Docker没装好,那才叫崩溃。我当年带团队时,每次新项目都要求成员先过这个清单,不过关不许碰代码。