mirror of
https://github.com/yeasy/docker_practice.git
synced 2026-03-24 18:55:31 +00:00
Add blank lines before headers
This commit is contained in:
@@ -48,6 +48,7 @@
|
||||
**基本使用:**
|
||||
|
||||
```bash
|
||||
|
||||
# 实时监控所有运行中的容器
|
||||
docker stats
|
||||
|
||||
@@ -89,6 +90,7 @@ done
|
||||
**性能指标解读:**
|
||||
|
||||
```bash
|
||||
|
||||
# CPU % 超过 80%:需要增加 CPU 限制或优化应用
|
||||
# MEM % 接近 100%:容器即将 OOM,需要增加内存或排查内存泄漏
|
||||
# 如果 NET I/O 中 dropped 为非零:网络拥塞或丢包
|
||||
@@ -132,6 +134,7 @@ networks:
|
||||
**从 cAdvisor 提取指标:**
|
||||
|
||||
```bash
|
||||
|
||||
# 获取所有容器的 JSON 格式性能数据
|
||||
curl http://localhost:8080/api/v1.3/machine | jq .
|
||||
|
||||
@@ -145,6 +148,7 @@ curl http://localhost:8080/api/v1.3/docker/abc123/ | jq '.stats[-1]'
|
||||
**与 Prometheus 集成:**
|
||||
|
||||
```yaml
|
||||
|
||||
# prometheus.yml 配置
|
||||
global:
|
||||
scrape_interval: 15s
|
||||
@@ -259,6 +263,7 @@ scrape_configs:
|
||||
**常用的 Prometheus 查询(PromQL):**
|
||||
|
||||
```text
|
||||
|
||||
# 容器 CPU 使用百分比
|
||||
rate(container_cpu_usage_seconds_total[5m]) * 100
|
||||
|
||||
@@ -289,6 +294,7 @@ count(container_memory_usage_bytes) by (image)
|
||||
#### OOM 问题诊断
|
||||
|
||||
```bash
|
||||
|
||||
# 检查容器是否因 OOM 被杀死
|
||||
docker inspect <container_id> | grep OOMKilled
|
||||
|
||||
@@ -310,6 +316,7 @@ journalctl -u docker -n 100 | grep -i "oom"
|
||||
**Python 应用内存泄漏检测:**
|
||||
|
||||
```python
|
||||
|
||||
# Dockerfile
|
||||
FROM python:3.11-slim
|
||||
WORKDIR /app
|
||||
@@ -321,6 +328,7 @@ CMD ["python", "-m", "memory_profiler", "app.py"]
|
||||
```
|
||||
|
||||
```python
|
||||
|
||||
# app.py - 内存泄漏示例
|
||||
from memory_profiler import profile
|
||||
import tracemalloc
|
||||
@@ -347,6 +355,7 @@ print(f"Peak: {peak / 1024 / 1024:.2f} MB")
|
||||
**Java 应用内存分析:**
|
||||
|
||||
```bash
|
||||
|
||||
# 在容器中启用 JVM 远程调试
|
||||
docker run -e JAVA_OPTS="-Xmx512m -Xms256m -XX:+UseG1GC" \
|
||||
-p 5005:5005 \
|
||||
@@ -363,6 +372,7 @@ jstat -gc <pid> 1000 # 每秒采样一次
|
||||
#### 内存限制最佳实践
|
||||
|
||||
```bash
|
||||
|
||||
# 为容器设置内存限制
|
||||
docker run -m 512m --memory-swap 1g myapp:latest
|
||||
|
||||
@@ -386,6 +396,7 @@ services:
|
||||
**内存超额提交(Memory Overcommit):**
|
||||
|
||||
```bash
|
||||
|
||||
# 在 Docker Compose 中区分限制和预留
|
||||
# limits:绝不能超过的最大值
|
||||
# reservations:Compose 排期时的参考值
|
||||
@@ -407,6 +418,7 @@ services:
|
||||
**使用 dive 分析镜像层:**
|
||||
|
||||
```bash
|
||||
|
||||
# 安装 dive
|
||||
wget https://github.com/wagoodman/dive/releases/download/v0.11.0/dive_0.11.0_linux_amd64.deb
|
||||
sudo apt install ./dive_0.11.0_linux_amd64.deb
|
||||
@@ -420,6 +432,7 @@ dive myapp:latest
|
||||
**使用 Dockerfile 分析工具:**
|
||||
|
||||
```bash
|
||||
|
||||
# 安装 hadolint
|
||||
curl https://github.com/hadolint/hadolint/releases/download/v2.12.0/hadolint-Linux-x86_64 -L -o hadolint
|
||||
chmod +x hadolint
|
||||
@@ -433,6 +446,7 @@ chmod +x hadolint
|
||||
**Go 应用的最小化镜像构建:**
|
||||
|
||||
```dockerfile
|
||||
|
||||
# Stage 1: 构建阶段
|
||||
FROM golang:1.20-alpine AS builder
|
||||
|
||||
@@ -469,6 +483,7 @@ ENTRYPOINT ["/app"]
|
||||
**Node.js 应用的多阶段构建:**
|
||||
|
||||
```dockerfile
|
||||
|
||||
# Stage 1: 依赖安装
|
||||
FROM node:18-alpine AS dependencies
|
||||
|
||||
@@ -494,6 +509,7 @@ WORKDIR /app
|
||||
|
||||
# 从依赖阶段复制 node_modules
|
||||
COPY --from=dependencies /app/node_modules ./node_modules
|
||||
|
||||
# 从构建阶段复制构建产物
|
||||
COPY --from=builder /app/dist ./dist
|
||||
COPY --from=builder /app/package*.json ./
|
||||
@@ -514,6 +530,7 @@ CMD ["node", "dist/index.js"]
|
||||
**Python 应用的多阶段构建:**
|
||||
|
||||
```dockerfile
|
||||
|
||||
# Stage 1: 构建阶段
|
||||
FROM python:3.11-slim AS builder
|
||||
|
||||
@@ -550,6 +567,7 @@ CMD ["python", "app.py"]
|
||||
#### 镜像体积优化检查清单
|
||||
|
||||
```bash
|
||||
|
||||
# 检查清单
|
||||
□ 使用精简基础镜像(Alpine、Distroless)
|
||||
□ 清理包管理器缓存(apt-get clean、rm -rf /var/cache/*)
|
||||
@@ -585,6 +603,7 @@ RUN apt-get update && \
|
||||
症状:容器进程被无故杀死,exit code 137
|
||||
解决方案:
|
||||
```bash
|
||||
|
||||
# 增加内存限制
|
||||
docker update -m 1g <container_id>
|
||||
|
||||
@@ -603,6 +622,7 @@ docker run -m 512m --memory-swap 1g myapp:latest
|
||||
症状:应用性能突然下降,但 CPU 使用率不高
|
||||
诊断:
|
||||
```bash
|
||||
|
||||
# 查看 CPU 限流统计
|
||||
docker exec <container_id> cat /sys/fs/cgroup/cpu/cpu.stat
|
||||
|
||||
@@ -615,6 +635,7 @@ docker update --cpus 2 <container_id>
|
||||
|
||||
诊断:
|
||||
```bash
|
||||
|
||||
# 进入容器检查网络状态
|
||||
docker exec <container_id> ip -s link show
|
||||
|
||||
|
||||
Reference in New Issue
Block a user