feat:更新Docker博客
This commit is contained in:
@@ -1,3 +1,7 @@
|
||||
---
|
||||
isGreat: true
|
||||
---
|
||||
|
||||
# 一、Docker简介
|
||||
## 1.1 基础概念
|
||||
### 1.1.1 Docker概念
|
||||
@@ -31,10 +35,6 @@
|
||||
  最常使用的 Registry 公开服务是官方的 [Docker Hub](https://hub.docker.com/),这也是默认的 Registry。
|
||||
|
||||
# 二、Docker安装
|
||||
## 2.1 环境
|
||||
  Ubuntu20.04
|
||||
|
||||
## 2.2 安装
|
||||
1. 安装依赖
|
||||
|
||||
```bash
|
||||
@@ -71,6 +71,11 @@ sudo add-apt-repository "deb [arch=amd64] http://mirrors.aliyun.com/docker-ce/li
|
||||
sudo apt-get install docker-ce
|
||||
```
|
||||
|
||||
::: tip
|
||||
也可以通过sudo apt install docker.io安装Ubuntu指定版本的docker
|
||||
docker-ce是官方仓库,docker.io是Ubuntu仓库
|
||||
:::
|
||||
|
||||
5. 配置Docker镜像服务
|
||||
|
||||
  1️⃣登录阿里云账号,在**容器镜像服务->镜像工具->镜像加速器**中找到**加速器地址**。
|
||||
@@ -82,6 +87,10 @@ sudo apt-get install docker-ce
|
||||
}
|
||||
```
|
||||
|
||||
::: tip
|
||||
或者使用1ms.docker作为Docker镜像源: "https://docker.1ms.run"
|
||||
:::
|
||||
|
||||
  3️⃣执行命令:
|
||||
|
||||
```bash
|
||||
@@ -135,10 +144,229 @@ sudo systemctl restart docker
|
||||
| | 查看容器详情 | `docker inspect mynginx` |
|
||||
|
||||
# 五、Docker Compose
|
||||
## 5.1 安装
|
||||
1. 从Github官网下载[Docker Compose](https://github.com/docker/compose)相应版本
|
||||
2. 将文件保存至/usr/local/bin/docker-compose可执行目录
|
||||
3. 赋予执行权限:
|
||||
```bash
|
||||
sudo chmod +x /usr/local/bin/docker-compose
|
||||
```
|
||||
|
||||
# 六、Docker实战
|
||||
  [Docker-完整项目的部署(保姆级教学)_docker部署-CSDN博客](https://blog.csdn.net/qq_71654538/article/details/136520075)
|
||||
4. 验证安装:
|
||||
```bash
|
||||
docker compose version
|
||||
```
|
||||
|
||||
# 七、参考资料
|
||||
::: tip
|
||||
也可以通过sudo apt-get install docker-compose-plugin安装Ubuntu指定版本
|
||||
:::
|
||||
|
||||
## 5.2 YAML文件
|
||||
```yaml
|
||||
version: '3.8'
|
||||
|
||||
services:
|
||||
# Spring Boot 后端服务
|
||||
backend:
|
||||
container_name: springboot-backend
|
||||
image: springboot-app:latest
|
||||
restart: unless-stopped
|
||||
|
||||
# 添加 host.docker.internal 映射
|
||||
extra_hosts:
|
||||
- "host.docker.internal:host-gateway"
|
||||
|
||||
# 环境变量配置
|
||||
environment:
|
||||
- SERVER_PORT=8080
|
||||
|
||||
# 端口映射(前面为宿主机端口,后面为容器端口)
|
||||
ports:
|
||||
- "8080:8080"
|
||||
|
||||
# 数据卷挂载(前面为宿主机目录,后面为容器目录)
|
||||
volumes:
|
||||
- ./backend/logs:/app/logs
|
||||
|
||||
# 健康检查
|
||||
healthcheck:
|
||||
test: ["CMD", "curl", "-f", "http://localhost:8080/actuator/health"]
|
||||
interval: 30s
|
||||
timeout: 5s
|
||||
retries: 3
|
||||
start_period: 20s
|
||||
|
||||
# 网络配置
|
||||
networks:
|
||||
- app-network
|
||||
|
||||
# 资源限制
|
||||
deploy:
|
||||
resources:
|
||||
limits:
|
||||
memory: 1G
|
||||
cpus: '1.0'
|
||||
reservations:
|
||||
memory: 512M
|
||||
cpus: '0.5'
|
||||
|
||||
# Vue3 Vite 前端服务
|
||||
frontend:
|
||||
container_name: vue-frontend
|
||||
image: vue-app:latest
|
||||
restart: unless-stopped
|
||||
|
||||
# 添加 host.docker.internal 映射
|
||||
extra_hosts:
|
||||
- "host.docker.internal:host-gateway"
|
||||
|
||||
# 端口映射
|
||||
ports:
|
||||
- "80:80"
|
||||
|
||||
# 依赖后端
|
||||
depends_on:
|
||||
backend:
|
||||
condition: service_healthy
|
||||
|
||||
# 网络
|
||||
networks:
|
||||
- app-network
|
||||
|
||||
# 资源限制
|
||||
deploy:
|
||||
resources:
|
||||
limits:
|
||||
memory: 512M
|
||||
cpus: '0.5'
|
||||
reservations:
|
||||
memory: 256M
|
||||
cpus: '0.25'
|
||||
|
||||
# 网络定义
|
||||
networks:
|
||||
app-network:
|
||||
driver: bridge
|
||||
```
|
||||
|
||||
## 5.3 命令
|
||||
```bash
|
||||
# 1. 启动服务
|
||||
docker compose up -d
|
||||
|
||||
# 2. 查看服务状态
|
||||
docker compose ps
|
||||
|
||||
# 3. 查看日志
|
||||
docker compose logs -f
|
||||
|
||||
# 4. 进入容器
|
||||
docker compose exec backend bash
|
||||
|
||||
# 5. 停止服务
|
||||
docker compose down
|
||||
|
||||
# 6. 重启服务
|
||||
docker compose restart
|
||||
|
||||
# 7. 查看配置
|
||||
docker compose config
|
||||
|
||||
# 8. 构建镜像
|
||||
docker compose build
|
||||
|
||||
# 9. 执行命令
|
||||
docker compose exec backend ls -la
|
||||
|
||||
# 10. 清理资源
|
||||
docker compose down -v
|
||||
docker system prune -f
|
||||
```
|
||||
|
||||
# 六、Dockerfile
|
||||
  Dockerfile 是用来构建 Docker 镜像的文本文件,包含了一系列构建指令,可以自动化地创建包含应用及其运行环境的镜像。
|
||||
  基本结构:
|
||||
```
|
||||
# 基础镜像
|
||||
FROM 镜像名:标签
|
||||
|
||||
# 维护者信息
|
||||
LABEL maintainer="name@email.com"
|
||||
|
||||
# 设置工作目录
|
||||
WORKDIR /app
|
||||
|
||||
# 复制文件
|
||||
COPY 源路径 目标路径
|
||||
|
||||
# 执行命令
|
||||
RUN 命令
|
||||
|
||||
# 暴露端口
|
||||
EXPOSE 端口
|
||||
|
||||
# 容器启动命令
|
||||
CMD ["可执行文件", "参数1", "参数2"]
|
||||
```
|
||||
|
||||
  典型示例
|
||||
::: code-group
|
||||
```dockerfile [nginx]
|
||||
FROM nginx:1.27.0
|
||||
COPY dist/ /usr/share/nginx/html/
|
||||
COPY nginx.conf /etc/nginx/conf.d/default.conf
|
||||
RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
|
||||
RUN echo 'Asia/Shanghai' > /etc/timezone
|
||||
```
|
||||
|
||||
```dockerfile [SpringBoot]
|
||||
FROM openjdk:11-jdk
|
||||
ARG JAR_FILE=target/*.jar
|
||||
COPY $JAR_FILE app.jar
|
||||
RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
|
||||
RUN echo 'Asia/Shanghai' > /etc/timezone
|
||||
ENTRYPOINT java $JAVA_TOOL_OPTIONS -jar /app.jar $0 $@
|
||||
```
|
||||
|
||||
```dockerfile [FastApi]
|
||||
FROM python:3.12-slim
|
||||
WORKDIR /app
|
||||
RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
|
||||
RUN echo 'Asia/Shanghai' > /etc/timezone
|
||||
COPY ./packages /app/packages
|
||||
COPY requirements.txt /app/
|
||||
RUN pip install --no-cache-dir --no-index --find-links=/app/packages -r requirements.txt
|
||||
COPY . /app/
|
||||
EXPOSE 8082
|
||||
CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "8082"]
|
||||
```
|
||||
|
||||
```dockerfile [dotnet]
|
||||
FROM mcr.microsoft.com/dotnet/runtime-deps:8.0-alpine
|
||||
|
||||
WORKDIR /app
|
||||
|
||||
COPY publish/ .
|
||||
|
||||
RUN chmod +x EMMessageHubServer
|
||||
|
||||
EXPOSE 5000
|
||||
EXPOSE 14040
|
||||
|
||||
ENTRYPOINT ["./EMMessageHubServer"]
|
||||
```
|
||||
:::
|
||||
|
||||
# 七、Docker开发流程
|
||||
1. 编写业务代码
|
||||
2. 编译打包项目工程
|
||||
3. 编写Dockerfile文件
|
||||
4. 根据Dockerfile文件和项目打包代码创建Docker镜像(标注镜像名称和版本)
|
||||
5. 编写Docker Compose文件
|
||||
6. 执行Docker Compose启动命令
|
||||
7. 查看Docker Container状态
|
||||
|
||||
# 八、参考资料
|
||||
1. [Docker — 从入门到实践](https://github.com/yeasy/docker_practice?tab=readme-ov-file)
|
||||
2. [Docker完整项目的部署](https://blog.csdn.net/qq_71654538/article/details/136520075)
|
||||
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
## 一、基础概念
|
||||
# 一、基础概念
|
||||
  Elasticsearch(简称 ES)是一款开源的分布式全文搜索引擎,基于 Lucene 核心构建,提供了 RESTful API 接口、高可用、高扩展的分布式数据存储与检索能力,广泛应用于日志分析、全文检索、监控告警、数据可视化等场景。
|
||||
|
||||
## 二、Docker部署
|
||||
# 二、Docker部署
|
||||
```yml
|
||||
services:
|
||||
elasticsearch:
|
||||
@@ -54,28 +55,27 @@ volumes:
|
||||
  ELASTIC_PASSWORD和KIBANA_PASSWORD可以通过.env配置文件设置。
|
||||
  启动时,elasticsearch可能会提示elasticsearch-data文件夹权限问题,目前解决方案为将其权限设置为777。
|
||||
|
||||
## 三、简单使用
|
||||
### 3.1 安装插件
|
||||
# 三、简单使用
|
||||
## 3.1 安装插件
|
||||
  启动成功后,需要安装elasticsearch的分词插件analysis-ik。
|
||||
  进入Docker容器,输入指令:
|
||||
```cmd
|
||||
```bash
|
||||
bin/elasticsearch-plugin install https://get.infini.cloud/elasticsearch/analysis-ik/8.12.0
|
||||
```
|
||||
|
||||
  注意版本要匹配。https://github.com/infinilabs/analysis-ik/releases/tag/Latest
|
||||
  安装完成后,重启容器。
|
||||
|
||||
|
||||
### 3.2 更改密码
|
||||
## 3.2 更改密码
|
||||
  启动成功后,需要更改elasticsearch的账号密码(不知道为啥docker-compose文件设置的密码不行,可能是容器初始化后又重置了)。
|
||||
  进入Docker容器,输入指令:
|
||||
```cmd
|
||||
```bash
|
||||
bin/elasticsearch-setup-passwords interactive
|
||||
```
|
||||
|
||||
  根据提示输入相应的账号密码。
|
||||
|
||||
### 3.3 新建索引
|
||||
## 3.3 新建索引
|
||||
1. 打开Elastic控制台,选择Management->Dev Tools,输入语句新建索引。
|
||||
2. 选择Management->Stack Management->Data Views,选择Create data view新建数据视图。
|
||||
3. 输入name、index pattern(刚才新建的索引)和Timestamp信息,保存数据视图。
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
## 一、基础概念
|
||||
### 1.1 Fluent Bit
|
||||
# 一、基础概念
|
||||
## 1.1 Fluent Bit
|
||||
  [Fluent Bit](https://fluentbit.io/) 是一个开源的、轻量级、高性能的日志处理器和转发器。Fluent Bit 的核心任务是:**从各种来源收集日志、指标和追踪数据,进行处理和过滤,然后将其发送到一个或多个目的地。**
|
||||
|
||||
#### 1.1.1 特点
|
||||
### 1.1.1 特点
|
||||
1. 极致的轻量级
|
||||
Fluent Bit 是用 C 语言编写的,运行时内存占用极低(通常只有几百 KB),CPU 使用率也非常低。这使得它成为在资源受限环境(如边缘计算、IoT 设备、容器侧车)中运行的理想选择。
|
||||
2. 高性能
|
||||
@@ -10,7 +10,7 @@ Fluent Bit 是用 C 语言编写的,运行时内存占用极低(通常只有
|
||||
3. 可插拔架构
|
||||
Fluent Bit 的功能通过“插件”来扩展。
|
||||
|
||||
#### 1.1.2 插件类型
|
||||
### 1.1.2 插件类型
|
||||
1. Input(输入)
|
||||
定义数据来源,例如从文件、标准输入、TCP/UDP、系统指标(CPU/内存)、Docker 容器、Windows 事件日志等收集数据。
|
||||
2. Filter(过滤器)
|
||||
@@ -18,7 +18,7 @@ Fluent Bit 的功能通过“插件”来扩展。
|
||||
3. Output(输出)
|
||||
定义数据目的地,例如 Elasticsearch、Splunk、Kafka、Datadog、Loki、S3、另一个 Fluentd/Fluent Bit 实例等。
|
||||
|
||||
#### 1.1.3 核心架构与数据流
|
||||
### 1.1.3 核心架构与数据流
|
||||
1. Input(输入)
|
||||
一个或多个输入插件持续地从数据源收集数据。每条数据被读入后,会带上时间戳和标签等信息,被包装成一个内部的事件记录。
|
||||
2. Parser(解析器)
|
||||
@@ -32,11 +32,11 @@ Fluent Bit 的功能通过“插件”来扩展。
|
||||
6. Output(输出)
|
||||
最终,输出插件将处理好的数据发送到配置的目的地。
|
||||
|
||||
### 1.2 OpenObserve
|
||||
## 1.2 OpenObserve
|
||||
  [OpenObserve](https://openobserve.ai/) 是一个开源的、云原生的可观测性数据平台,旨在处理日志、指标、追踪和性能数据。它的目标是成为 Elasticsearch/Logstash/Kibana (ELK)、Grafana Loki 和 Datadog 等流行解决方案的更简单、更经济高效、更高性能的替代品。
|
||||
  OpenObserve 是一个“一体化”的平台,你可以将所有的可观测性数据(日志、指标、追踪)都发送到它这里,然后通过统一的界面进行搜索、分析和可视化。
|
||||
|
||||
## 二、Docker部署
|
||||
# 二、Docker部署
|
||||
```yml
|
||||
services:
|
||||
fluent-bit:
|
||||
@@ -106,14 +106,14 @@ volumes:
|
||||
  INPUT为日志输入源,监听24422端口。
|
||||
  OUTPUT为日志输出源,将日志发送到openobserve中(这里使用的是容器名称),URI表示openobserve接收数据的api路径,default/default表示组织名称/流名称,可以更改为其他的名称。_json表示以json的格式。
|
||||
|
||||
## 三、简单使用
|
||||
### 3.1 配置数据流
|
||||
# 三、简单使用
|
||||
## 3.1 配置数据流
|
||||
  打开控制台,选择数据流->添加数据流,输入fluent bit配置文件中的流名称,选择数据流类型为Logs。
|
||||
  在新添加的数据流中,点击查看,跳转到日志页面即可看到上次的日志信息。
|
||||
  如果没有日志请检查FluentBit容器日志是否有错误,正确的应该会有上传成功的提示。
|
||||

|
||||
|
||||
### 3.2 配置邮件告警
|
||||
## 3.2 配置邮件告警
|
||||
  首先需要配置模板和邮箱地址。
|
||||
  修改docker-compose.yml文件,添加邮件服务器:
|
||||
```yml
|
||||
@@ -177,7 +177,7 @@ openobserve:
|
||||
  通知后静默:触发告警并发送通知后,系统暂时停止重复通知的时间。
|
||||
  也可以设置为实时告警,即当告警发生时就立即触发,不会有周期和频率参数设置。
|
||||
|
||||
### 3.3 配置WebHook
|
||||
## 3.3 配置WebHook
|
||||
  首先配置模板和WebHook地址。
|
||||
  打开控制台,选择右上角的设置按钮,选择模板->添加模板->Web Hook,填写Body:
|
||||
```json
|
||||
@@ -194,7 +194,7 @@ openobserve:
|
||||
  这里可以使用企业微信的群消息推送功能,添加成功后,会提供一个WebHook地址。也可以自定义一个WebHook接收地址。
|
||||
  配置完模板和地址后,选择告警->添加告警,选择通知到刚才的WebHook地址即可。
|
||||
|
||||
### 3.4 通过API获取日志信息
|
||||
## 3.4 通过API获取日志信息
|
||||
  通过http://ip:5080/swagger/index.html#/ 即可访问OpenobserveAPI接口。
|
||||
  例如要获取日志,可以使用/api/{origin_id}/_search的接口:
|
||||
```cmd
|
||||
@@ -216,7 +216,7 @@ curl -X 'POST' \
|
||||
  注意这里要加上Basic auth认证,并提供username和password。
|
||||

|
||||
|
||||
## 四、自定义日志告警服务
|
||||
# 四、自定义日志告警服务
|
||||

|
||||
  基本原理为通过提供一个HTTP的API接口,当Openobserver触发告警时,调用该接口,并传入当前的alert_name和timestamp,然后根据timestamp和Openobserver提供的API接口去查询最近一段时间内的所有日志信息,并存储到SqLite数据库中。同时也可以选择是否同步推送到企业微信和邮箱。
|
||||
  最后也需要提供一个查询历史日志告警信息的接口,并可视化显示,方便运维和开发查看。
|
||||
|
||||
Reference in New Issue
Block a user