首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Docker 使用指南及日常命令集锦

Docker 使用指南及日常命令集锦

作者头像
熊猫钓鱼
发布2025-08-01 19:04:08
发布2025-08-01 19:04:08
20700
代码可运行
举报
文章被收录于专栏:人工智能应用人工智能应用
运行总次数:0
代码可运行

导读

本文是一份全面的 Docker 技术指南,涵盖了从基础概念到高级实践的完整知识体系。文档系统性地介绍了 Docker 的核心技术、安装配置、日常操作、网络与存储管理、安全实践以及生产环境部署等关键内容。

主要特点:

  1. 全面性:包含 Docker 全栈技术栈,从入门到进阶
  2. 实践性:提供大量可直接运行的命令示例和配置片段
  3. 专业性:涵盖企业级应用场景和安全最佳实践
  4. 系统性:按照技术逻辑组织内容,便于循序渐进学习

适用读者:

  • 开发人员:快速掌握容器化开发技能
  • 运维工程师:学习容器编排和集群管理
  • 架构师:设计基于容器的分布式系统
  • 安全工程师:实施容器安全防护措施

详细目录

第一部分:基础篇
  1. Docker 简介
    • 核心概念:镜像/容器/仓库
    • 镜像分层结构与传输
    • 私有仓库搭建与管理
  2. 安装 Docker
    • Linux系统安装指南
    • Windows/Mac安装方法
    • 环境验证与配置
第二部分:操作篇
  1. 常用命令
    • 镜像操作:拉取/查看/删除
    • 容器操作:运行/监控/管理
    • 资源限制与性能分析
  2. 实际应用场景
    • 开发环境容器配置
    • 数据库容器部署
    • 调试工具与批处理任务
第三部分:进阶篇
  1. Dockerfile 编写
    • 基础语法与指令
    • 多阶段构建实战
    • 安全加固与优化技巧
  2. 容器网络
    • 网络模式比较
    • 自定义网络配置
    • 跨主机网络方案
  3. 数据管理
    • 数据卷操作
    • 分布式存储方案
    • 备份恢复策略
第四部分:生产实践篇
  1. 最佳实践
    • 安全性建议
    • 性能优化指南
    • 编排工具选择
  2. 安全实践详解
    • 容器安全加固
    • 镜像漏洞扫描
    • 运行时保护方案
  3. 监控与日志
    • 容器监控方案
    • Prometheus集成
    • 企业级日志架构
第五部分:扩展篇
  1. CI/CD集成
    • Jenkins/GitLab集成
    • 自动化构建流程
    • 部署策略
  2. 生产环境部署
    • Kubernetes编排
    • Docker Swarm集群
    • 高可用策略
  3. 性能调优
    • 资源限制配置
    • 存储驱动选择
    • 内核参数优化
  4. 高级技巧
    • 容器调试方法
    • 批量操作命令
    • 导入导出技巧
附录
  1. 常见问题排查
    • 启动失败分析
    • 网络连接问题
    • 性能瓶颈诊断
  2. 进阶主题
    • 多阶段构建详解
    • Docker Compose配置

1. Docker 简介

Docker 是一个开源的应用容器引擎,基于 Go 语言开发。它允许开发者将应用及其依赖打包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器或 Windows 机器上。

核心概念
  • 镜像(Image):Docker 镜像是一个只读模板,包含创建 Docker 容器的说明。镜像采用分层存储结构,每一层代表Dockerfile中的一条指令。例如: 以下命令用于管理Docker镜像的分层结构和传输:
  1. docker history 查看镜像的构建历史和各层信息
  2. docker save 将镜像导出为tar归档文件,便于传输或备份
  3. docker load 从tar文件加载镜像到本地仓库
代码语言:javascript
代码运行次数:0
运行
复制
# 查看镜像分层结构
docker history <image_name>

# 导出镜像为tar文件
docker save -o myimage.tar <image_name>

# 从tar文件加载镜像
docker load -i myimage.tar
  • 容器(Container):容器是镜像的可运行实例。容器与镜像的关系类似于面向对象编程中对象与类的关系。容器具有以下特点:
    • 轻量级:共享主机系统内核
    • 可移植:包含应用及其所有依赖
    • 隔离性:使用命名空间和控制组实现资源隔离
    • 临时性:默认情况下容器停止后数据不会持久化

    实际案例:某电商平台使用容器处理黑色星期五流量高峰,可快速扩展至5000个容器实例。

  • 仓库(Registry):用于存放镜像的地方,如 Docker Hub。企业级应用场景:
    • 私有仓库搭建:使用Docker Registry或Harbor 私有仓库操作命令说明:
  1. docker run 启动一个本地registry容器作为私有仓库
  2. docker tag 为镜像打上私有仓库地址的标签
  3. docker push 将镜像推送到私有仓库

注意:默认情况下私有仓库没有认证,生产环境需要配置HTTPS和认证

代码语言:javascript
代码运行次数:0
运行
复制
# 启动私有仓库
docker run -d -p 5000:5000 --name registry registry:2

# 推送镜像到私有仓库
docker tag myimage localhost:5000/myimage
docker push localhost:5000/myimage
  • 镜像同步策略:定期从公有仓库同步基础镜像
  • 访问控制:基于角色的权限管理

2. 安装 Docker

Linux 系统

Docker在不同Linux发行版上的安装命令:

  1. Ubuntu/Debian系统使用apt-get安装
  2. CentOS/RHEL系统使用yum安装
  3. 安装前需要更新软件包索引
  4. 安装后需要启动docker服务:sudo systemctl start docker
代码语言:javascript
代码运行次数:0
运行
复制
# Ubuntu/Debian
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io

# CentOS/RHEL
sudo yum install -y yum-utils
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
sudo yum install docker-ce docker-ce-cli containerd.io
Windows/Mac

从 Docker 官网下载 Docker Desktop 安装包: https://www.docker.com/products/docker-desktop

3. 常用命令

镜像操作

镜像基本操作命令说明:

  1. docker pull 从仓库下载镜像到本地
  2. docker images 列出本地已下载的镜像
  3. docker rmi 删除本地镜像,释放磁盘空间

注意:删除镜像前需确保没有容器在使用该镜像

代码语言:javascript
代码运行次数:0
运行
复制
# 拉取镜像
docker pull ubuntu:20.04

# 列出本地镜像
docker images

# 删除镜像
docker rmi <image_id>
容器操作

容器操作命令详解:

  1. 容器运行
    • docker run 创建并启动容器
    • --cpus 限制CPU核心数
    • --memory 限制内存使用量
    • -it 以交互模式运行
  2. 容器查看
    • docker ps 查看容器状态
    • --format 自定义输出格式
    • -a 显示所有容器
    • -s 显示容器大小
  3. 容器管理
    • docker stop 优雅停止容器
    • docker rm 删除容器
    • -f 强制操作运行中的容器
  4. 资源监控
    • docker stats 实时查看资源使用
    • docker exec 在容器内执行命令
    • top/free/df 查看进程/内存/磁盘
  5. 文件操作
    • docker cp 容器与主机间文件传输
  6. 日志查看
    • docker logs 查看容器日志
    • -f 跟踪日志输出
    • -t 显示时间戳
  7. 高级功能
    • docker update 动态调整资源限制
    • --restart 配置重启策略
    • docker inspect 检查容器健康状态
代码语言:javascript
代码运行次数:0
运行
复制
# 运行容器(带资源限制)
docker run -it --cpus=2 --memory=1g --name myapp ubuntu:20.04 /bin/bash

# 列出运行中的容器(自定义格式)
docker ps --format "table {{.ID}}\t{{.Names}}\t{{.Status}}\t{{.Ports}}"

# 列出所有容器(包括大小信息)
docker ps -as

# 停止容器(优雅停止)
docker stop -t 30 <container_id> # 30秒超时

# 删除容器(强制删除运行中的容器)
docker rm -f <container_id>

# 容器资源使用统计
docker stats --no-stream

# 容器性能分析
docker exec <container> top
docker exec <container> free -m
docker exec <container> df -h

# 容器与主机文件互传
docker cp <container_id>:/path/to/file /host/path
docker cp /host/path <container_id>:/container/path

# 容器日志查看(带时间戳和跟踪)
docker logs -ft <container_id>

# 容器资源限制更新
docker update --cpus=2 --memory=2g <container_id>

# 容器重启策略配置
docker run --restart unless-stopped -d myapp

# 容器健康检查
docker inspect --format='{{json .State.Health}}' <container_id>
实际应用场景示例
  1. 开发环境: 实际应用场景示例说明:
  2. 开发环境容器
    • -v 挂载主机目录到容器
    • -p 映射主机端口到容器
    • 适合本地开发调试
代码语言:javascript
代码运行次数:0
运行
复制
# 启动开发容器(挂载代码目录)
docker run -it -v $(pwd):/app -p 3000:3000 node:14 bash
  1. 数据库容器
    • -v 使用命名卷持久化数据
    • -e 设置环境变量
    • -d 后台运行
    • 适合数据库服务部署
代码语言:javascript
代码运行次数:0
运行
复制
# 启动MySQL容器(持久化数据)
docker run -d --name mysql -v mysql_data:/var/lib/mysql \
  -e MYSQL_ROOT_PASSWORD=secret -p 3306:3306 mysql:5.7
  1. 临时调试工具
    • --rm 运行后自动删除容器
    • 适合一次性任务
    • 使用官方工具镜像
代码语言:javascript
代码运行次数:0
运行
复制
# 使用curl容器测试API
docker run --rm curlimages/curl https://api.example.com
  1. 批处理任务
    • 直接执行命令不进入交互
    • 适合自动化脚本
    • 资源自动回收
代码语言:javascript
代码运行次数:0
运行
复制
# 运行一次性任务容器
docker run --rm python:3 python -c "print('Hello World')"
  1. 网络诊断
    • --network=host 使用主机网络
    • 专用网络工具镜像
    • 适合网络问题排查
代码语言:javascript
代码运行次数:0
运行
复制
# 使用网络工具容器诊断
docker run --network=host --rm nicolaka/netshoot \
  ping google.com

4. Dockerfile 编写

基础示例
代码语言:javascript
代码运行次数:0
运行
复制
FROM ubuntu:20.04
RUN apt-get update && apt-get install -y python3
COPY . /app
WORKDIR /app
CMD ["python3", "app.py"]
高级技巧与最佳实践
1. 多阶段构建实战
代码语言:javascript
代码运行次数:0
运行
复制
# 第一阶段:构建环境
FROM golang:1.16 AS builder
WORKDIR /src
COPY . .
RUN go build -o /app/myapp .

# 第二阶段:运行环境
FROM alpine:3.13
WORKDIR /app
COPY --from=builder /app/myapp .
COPY --from=builder /src/config.yaml .
RUN chmod +x myapp
USER nobody
CMD ["./myapp"]
2. 构建参数与动态配置
代码语言:javascript
代码运行次数:0
运行
复制
ARG APP_VERSION=1.0.0
ENV APP_VERSION=${APP_VERSION}

# 构建时传递参数
# docker build --build-arg APP_VERSION=2.0.0 -t myapp .
3. 安全加固措施
代码语言:javascript
代码运行次数:0
运行
复制
# 使用非root用户
RUN groupadd -r appuser && useradd -r -g appuser appuser
USER appuser

# 最小化权限
RUN chmod -R 755 /app && \
    chown -R appuser:appuser /app

# 移除不必要的工具
RUN apt-get purge -y curl && \
    apt-get autoremove -y && \
    rm -rf /var/lib/apt/lists/*
4. 构建优化技巧
代码语言:javascript
代码运行次数:0
运行
复制
# 合理利用缓存层
COPY package.json .
RUN npm install
COPY . .

# 合并RUN命令
RUN apt-get update && \
    apt-get install -y \
    python3 \
    python3-pip && \
    pip install --no-cache-dir -r requirements.txt && \
    rm -rf /var/lib/apt/lists/*

# 使用.dockerignore
# 示例内容:
.git
node_modules
*.log
*.md
5. 企业级Dockerfile示例
代码语言:javascript
代码运行次数:0
运行
复制
# 第一阶段:依赖安装
FROM node:14 as dependencies
WORKDIR /app
COPY package*.json ./
RUN npm ci --only=production

# 第二阶段:构建应用
FROM node:14 as builder
WORKDIR /app
COPY . .
COPY --from=dependencies /app/node_modules ./node_modules
RUN npm run build

# 第三阶段:生产镜像
FROM node:14-alpine
WORKDIR /app
ENV NODE_ENV=production
COPY --from=builder /app/dist ./dist
COPY --from=builder /app/node_modules ./node_modules
COPY --from=builder /app/package.json ./
EXPOSE 3000
CMD ["node", "dist/main.js"]
6. 调试技巧
代码语言:javascript
代码运行次数:0
运行
复制
# 查看构建过程
docker history <image>

# 调试构建失败
docker run -it <failed_image_id> sh

# 分析镜像大小
docker image ls --format "table {{.Repository}}\t{{.Tag}}\t{{.Size}}"

5. 容器网络

容器网络管理命令说明:

  1. 网络模式
    • bridge:默认NAT模式,适合单机容器通信
    • host:直接使用主机网络,性能最佳
    • none:无网络连接,安全隔离
    • overlay:多主机网络,适合集群
    • macvlan:MAC直通,直接暴露到物理网络
  2. 网络管理
    • docker network create 创建自定义网络
    • docker network connect 连接容器到网络
    • docker network inspect 查看网络详情
    • docker network prune 清理未使用网络

最佳实践:

  • 生产环境建议使用自定义网络隔离服务
  • 高性能场景考虑host或macvlan模式
  • 集群环境使用overlay网络
网络模式详解
1. 网络驱动比较

网络模式

特点

适用场景

bridge

默认模式,NAT转发

单机容器通信

host

直接使用主机网络栈

高性能需求

none

无网络连接

安全隔离场景

overlay

多主机网络

Swarm/K8s集群

macvlan

MAC地址直通

需要直接暴露到物理网络

2. 自定义网络高级配置
代码语言:javascript
代码运行次数:0
运行
复制
# 创建带子网和网关的网络
docker network create \
  --driver=bridge \
  --subnet=172.28.0.0/16 \
  --gateway=172.28.0.1 \
  --ip-range=172.28.5.0/24 \
  my-network

# 指定静态IP运行容器
docker run --network=my-network --ip=172.28.5.10 -d nginx

# 连接多个网络
docker network connect other-network my-container
3. 跨主机网络解决方案
  1. Overlay网络 (Docker Swarm):
代码语言:javascript
代码运行次数:0
运行
复制
# 初始化Swarm集群
docker swarm init

# 创建Overlay网络
docker network create --driver=overlay my-overlay

# 跨节点服务部署
docker service create --network=my-overlay --name web -p 80:80 nginx
  1. Macvlan网络:
代码语言:javascript
代码运行次数:0
运行
复制
# 创建Macvlan网络
docker network create -d macvlan \
  --subnet=192.168.1.0/24 \
  --gateway=192.168.1.1 \
  -o parent=eth0 \
  my-macvlan
4. 网络性能优化
代码语言:javascript
代码运行次数:0
运行
复制
# 查看网络吞吐量
docker run --rm --net=host nicolaka/netshoot \
  iperf3 -s # 服务端

docker run --rm --net=host nicolaka/netshoot \
  iperf3 -c host-ip # 客户端

# 网络QoS限制
docker run --network=my-network \
  --blkio-weight=300 \
  -d nginx
5. 网络诊断工具
代码语言:javascript
代码运行次数:0
运行
复制
# 检查容器网络配置
docker exec -it my-container ip addr

# 网络连通性测试
docker run --rm --net=container:my-container \
  nicolaka/netshoot ping google.com

# 抓包分析
docker run --rm --net=container:my-container \
  nicolaka/netshoot tcpdump -i eth0 -w capture.pcap
6. 实际案例
  1. 微服务架构:
代码语言:javascript
代码运行次数:0
运行
复制
# 为每个服务创建独立网络
docker network create product-network
docker network create order-network

# 通过网关容器实现网络隔离
docker run -d --name gateway --network=product-network nginx
docker network connect order-network gateway
  1. CI/CD流水线:
代码语言:javascript
代码运行次数:0
运行
复制
# 为每个构建创建临时网络
docker network create build-${BUILD_ID}
docker run --network=build-${BUILD_ID} -d test-db
docker run --network=build-${BUILD_ID} test-runner

6. 数据管理

数据管理命令说明:

  1. 数据卷操作
    • docker volume create 创建持久化数据卷
    • docker volume inspect 查看卷详情
    • docker volume prune 清理未使用的卷
    • docker run -v 挂载数据卷到容器
  2. 备份恢复
    • 使用临时容器执行备份命令
    • 支持多种存储后端(NFS, Ceph等)
    • 可设置定期备份策略

最佳实践:

  • 重要数据必须使用命名卷持久化
  • 定期测试备份恢复流程
  • 生产环境使用分布式存储方案
数据管理高级指南
1. 数据卷高级用法
代码语言:javascript
代码运行次数:0
运行
复制
# 创建带驱动选项的数据卷
docker volume create \
  --driver local \
  --opt type=nfs \
  --opt device=:/nfs/share \
  --opt o=addr=10.0.0.1,rw \
  nfs-volume

# 查看数据卷详情
docker volume inspect my-vol

# 清理未使用的数据卷
docker volume prune

# 数据卷备份
docker run --rm -v my-vol:/data -v $(pwd):/backup \
  ubuntu tar cvf /backup/backup.tar /data
2. 分布式存储方案
  1. NFS共享存储:
代码语言:javascript
代码运行次数:0
运行
复制
docker run -d \
  --mount 'type=volume,src=nfs-vol,dst=/app,volume-driver=local,volume-opt=type=nfs,volume-opt=device=:/nfs/share,"volume-opt=o=addr=10.0.0.1,rw"' \
  nginx
  1. Ceph分布式存储:
代码语言:javascript
代码运行次数:0
运行
复制
docker plugin install --alias ceph \
  --grant-all-permissions \
  ceph/plugin:latest

docker volume create --driver ceph \
  --name my-ceph-volume \
  -o size=10GB
3. 备份与恢复策略
  1. 数据库备份:
代码语言:javascript
代码运行次数:0
运行
复制
# MySQL备份
docker exec mysql sh -c 'exec mysqldump --all-databases -uroot -p"$MYSQL_ROOT_PASSWORD"' > backup.sql

# PostgreSQL备份
docker exec postgres pg_dumpall -U postgres > backup.sql
  1. 容器数据迁移:
代码语言:javascript
代码运行次数:0
运行
复制
# 导出容器文件系统
docker export <container> > container.tar

# 导入为镜像
cat container.tar | docker import - migrated-image
4. 性能优化技巧
代码语言:javascript
代码运行次数:0
运行
复制
# 使用本地SSD存储
docker run -v /mnt/ssd:/data --mount type=tmpfs,destination=/tmp \
  myapp

# 存储驱动选择
# 修改/etc/docker/daemon.json
{
  "storage-driver": "overlay2",
  "storage-opts": [
    "overlay2.override_kernel_check=true"
  ]
}
5. 企业级存储方案
  1. 多主机数据共享:
代码语言:javascript
代码运行次数:0
运行
复制
# GlusterFS配置示例
docker volume create \
  --driver=local \
  --opt type=glusterfs \
  --opt device=10.0.0.1:/gvol \
  --opt o=log-level=DEBUG \
  gluster-vol
  1. 云存储集成:
代码语言:javascript
代码运行次数:0
运行
复制
# AWS EBS卷
docker volume create \
  --driver=rexray/ebs \
  --name=ebs-vol \
  --opt=size=50
6. 数据安全实践
代码语言:javascript
代码运行次数:0
运行
复制
# 加密数据卷
docker volume create \
  --driver=local \
  --opt type=encrypted \
  --opt key=my-secret-key \
  secure-vol

# 只读挂载
docker run -v /data:/app:ro \
  myapp
7. 监控与维护
代码语言:javascript
代码运行次数:0
运行
复制
# 查看存储使用情况
docker system df

# 分析容器存储
docker diff <container>

# 清理无用数据
docker system prune --volumes

7. 最佳实践

  1. 安全性
    • 不要以 root 用户运行容器
    • 定期更新基础镜像
    • 扫描镜像中的漏洞
  2. 性能优化
    • 使用多阶段构建
    • 合理使用缓存
    • 精简镜像大小
  3. 编排工具
    • Docker Compose:单机编排
    • Kubernetes:生产级编排
    • Swarm:Docker 原生集群
  4. 日志管理
    • 使用日志驱动
    • 集中式日志收集
    • 合理的日志轮转策略

8. 进阶主题

多阶段构建
代码语言:javascript
代码运行次数:0
运行
复制
FROM golang:1.16 AS builder
WORKDIR /app
COPY . .
RUN go build -o myapp .

FROM alpine:latest  
WORKDIR /root/
COPY --from=builder /app/myapp .
CMD ["./myapp"]
Docker Compose
代码语言:javascript
代码运行次数:0
运行
复制
version: '3'
services:
  web:
    image: nginx
    ports:
      - "80:80"
  db:
    image: postgres
    environment:
      POSTGRES_PASSWORD: example

9. 常见问题排查

  1. 容器启动失败
    • 检查日志:docker logs <container_id>
    • 交互式调试:docker run -it --entrypoint /bin/sh <image>
    • 检查端口冲突:netstat -tulnp | grep <port>
    • 检查资源限制:docker inspect <container> | grep -i memory
  2. 网络连接问题
    • 检查网络配置:docker network inspect <network_name>
    • 测试连接:docker exec <container> ping <target>
    • 检查DNS配置:docker exec <container> cat /etc/resolv.conf
    • 检查防火墙规则:iptables -L -n
  3. 性能问题
    • 监控资源使用:docker stats
    • 限制资源:--memory, --cpus 参数
    • 分析性能瓶颈:docker exec <container> top
    • 优化存储驱动:docker info | grep "Storage Driver"

10. 安全实践详解

容器安全深度防护指南
1. 容器安全加固
代码语言:javascript
代码运行次数:0
运行
复制
# 使用非root用户运行容器
docker run -u 1000:1000 myapp

# 限制内核能力
docker run --cap-drop ALL --cap-add NET_BIND_SERVICE nginx

# 资源限制
docker run --memory 512m --cpus 1 --pids-limit 100 myapp

# 只读文件系统
docker run --read-only --tmpfs /tmp:rw,size=50m myapp

# 安全配置文件
docker run --security-opt no-new-privileges \
  --security-opt seccomp=unconfined \
  --security-opt apparmor=docker-default \
  myapp
2. 镜像安全扫描
代码语言:javascript
代码运行次数:0
运行
复制
# 使用Snyk扫描镜像
docker scan --file Dockerfile myimage

# 漏洞数据库更新
docker scout cves myimage

# 镜像签名验证
docker trust inspect --pretty myimage

# 构建时扫描
docker build --secret id=mysecret,src=secret.txt \
  --no-cache -t myimage .
3. 运行时安全监控
代码语言:javascript
代码运行次数:0
运行
复制
# 运行时行为监控
docker run --security-opt apparmor=my-profile \
  --security-opt seccomp=my-seccomp.json \
  myapp

# 审计日志
docker events --filter 'event=container' --since 1h

# 运行时检查
docker container checkpoint create \
  --leave-running mycontainer checkpoint1
4. 网络安全防护
代码语言:javascript
代码运行次数:0
运行
复制
# 网络策略限制
docker network create --internal secure-net

# 容器间TLS加密
docker run --network secure-net \
  -e SSL_CERT=/certs/cert.pem \
  -e SSL_KEY=/certs/key.pem \
  myapp

# 防火墙规则
docker run --network host --cap-add NET_ADMIN \
  nicolaka/netshoot iptables -A INPUT -p tcp --dport 80 -j DROP
5. 企业级安全方案
  1. 内容信任:
代码语言:javascript
代码运行次数:0
运行
复制
# 启用Docker内容信任
export DOCKER_CONTENT_TRUST=1
docker push myrepo/myimage
  1. 安全基准检查:
代码语言:javascript
代码运行次数:0
运行
复制
# 使用CIS基准检查
docker run -it --net host --pid host --userns host --cap-add audit_control \
  -v /etc:/etc:ro \
  -v /usr/bin/containerd:/usr/bin/containerd:ro \
  -v /usr/bin/runc:/usr/bin/runc:ro \
  aquasec/kube-bench:latest
  1. 运行时保护:
代码语言:javascript
代码运行次数:0
运行
复制
# Falco实时监控
docker run -d --name falco \
  --privileged \
  -v /var/run/docker.sock:/host/var/run/docker.sock \
  -v /dev:/host/dev \
  -v /proc:/host/proc:ro \
  -v /boot:/host/boot:ro \
  -v /lib/modules:/host/lib/modules:ro \
  -v /usr:/host/usr:ro \
  falcosecurity/falco
6. 安全最佳实践清单
  1. 镜像构建:
    • 使用最小化基础镜像 (Alpine, Distroless)
    • 多阶段构建减少攻击面
    • 定期更新基础镜像
    • 扫描第三方依赖
  2. 运行时:
    • 禁用特权模式
    • 限制资源使用
    • 启用只读根文件系统
    • 使用用户命名空间隔离
  3. 网络:
    • 限制容器网络访问
    • 使用网络策略
    • 加密敏感通信
    • 监控网络流量
  4. 监控:
    • 集中式日志收集
    • 实时异常检测
    • 定期安全审计
    • 漏洞扫描计划

11. 监控与日志

全面监控与日志管理指南
1. 容器监控深度解析
代码语言:javascript
代码运行次数:0
运行
复制
# 实时监控容器资源
docker stats --format "table {{.Name}}\t{{.CPUPerc}}\t{{.MemUsage}}\t{{.NetIO}}"

# 获取容器指标API
curl --unix-socket /var/run/docker.sock \
  http://localhost/containers/<container_id>/stats?stream=false

# 使用cAdvisor收集指标
docker run -d \
  --name=cadvisor \
  --volume=/:/rootfs:ro \
  --volume=/var/run:/var/run:ro \
  --volume=/sys:/sys:ro \
  --volume=/var/lib/docker/:/var/lib/docker:ro \
  --publish=8080:8080 \
  gcr.io/cadvisor/cadvisor:v0.47.0
2. Prometheus监控方案
  1. 配置示例:
代码语言:javascript
代码运行次数:0
运行
复制
# prometheus.yml
scrape_configs:
  - job_name: 'docker'
    static_configs:
      - targets: ['localhost:9323']
  - job_name: 'cadvisor'
    static_configs:
      - targets: ['cadvisor:8080']
  1. 关键监控指标:
  • 容器CPU使用率: container_cpu_usage_seconds_total
  • 容器内存使用: container_memory_usage_bytes
  • 网络流量: container_network_receive_bytes_total
  • 磁盘IO: container_fs_writes_bytes_total
3. 企业级日志架构
  1. Fluentd配置示例:
代码语言:javascript
代码运行次数:0
运行
复制
<source>
  @type forward
  port 24224
</source>

<match docker.**>
  @type elasticsearch
  host elasticsearch
  port 9200
  logstash_format true
</match>
  1. 日志收集命令:
代码语言:javascript
代码运行次数:0
运行
复制
# 使用Fluentd驱动
docker run --log-driver=fluentd \
  --log-opt fluentd-address=fluentd:24224 \
  --log-opt tag="docker.{{.Name}}" \
  nginx
4. 告警与事件响应
  1. 告警规则示例 (Prometheus):
代码语言:javascript
代码运行次数:0
运行
复制
groups:
- name: docker-alerts
  rules:
  - alert: HighMemoryUsage
    expr: container_memory_usage_bytes{name!=""} / container_spec_memory_limit_bytes > 0.8
    for: 5m
    labels:
      severity: warning
    annotations:
      summary: "High memory usage on {{ $labels.name }}"
  1. 事件响应流程:
  • 实时事件监控: docker events --filter 'event=die'
  • 自动重启策略: docker run --restart unless-stopped myapp
  • 事件触发脚本:
代码语言:javascript
代码运行次数:0
运行
复制
docker events --format '{{json .}}' | while read event; do
  echo "Event: $event"
  # 触发自定义处理逻辑
done
5. 性能瓶颈分析
  1. 性能分析工具:
代码语言:javascript
代码运行次数:0
运行
复制
# 使用perf分析容器性能
docker run --privileged --pid=host -it \
  brendangregg/perf stat -a

# 火焰图生成
docker run --privileged --pid=host -it \
  brendangregg/perf record -F 99 -a -g -- sleep 30
  1. 常见瓶颈指标:
  • CPU限制: Throttled CPU Time
  • 内存压力: OOM Kill Count
  • 磁盘IO等待: I/O Wait Percentage
  • 网络丢包: Packet Drop Rate
6. 日志最佳实践
  1. 结构化日志:
代码语言:javascript
代码运行次数:0
运行
复制
{
  "timestamp": "2023-01-01T12:00:00Z",
  "level": "ERROR",
  "message": "Failed to connect",
  "container": "webapp",
  "trace_id": "abc123"
}
  1. 日志轮转策略:
代码语言:javascript
代码运行次数:0
运行
复制
# 配置日志轮转
docker run --log-driver=json-file \
  --log-opt max-size=10m \
  --log-opt max-file=3 \
  nginx
  1. 敏感信息过滤:
代码语言:javascript
代码运行次数:0
运行
复制
# 使用log-driver过滤敏感数据
docker run --log-driver=syslog \
  --log-opt syslog-format=rfc5424 \
  --log-opt tag="{{.ImageName}}/{{.Name}}" \
  --log-opt env=SECRET_KEY \
  myapp

12. CI/CD集成

基本流程
  1. 代码提交触发构建
  2. 运行测试容器
  3. 构建生产镜像
  4. 部署到测试环境
  5. 自动化测试
  6. 部署到生产环境
工具集成
  1. Jenkins
    • 使用Docker Agent
    • 构建管道示例
  2. GitLab CI
    • .gitlab-ci.yml 配置
    • 使用Docker-in-Docker
  3. GitHub Actions
    • 使用container jobs
    • 缓存优化

13. 生产环境部署

编排选择
  1. Kubernetes
    • 架构概述
    • 部署策略(滚动更新、蓝绿部署)
  2. Docker Swarm
    • 集群搭建
    • 服务扩展
  3. ECS
    • AWS托管方案
    • Fargate无服务器容器
高可用策略
  • 多节点部署
  • 健康检查配置
  • 自动恢复机制

14. 性能调优

容器层面
  1. 资源限制
    • CPU份额:--cpu-shares
    • 内存限制:--memory
    • IO限制:--blkio-weight
  2. 配置优化
    • 选择合适的存储驱动
    • 调整ulimit
    • 内核参数调优
镜像层面
  • 使用Alpine基础镜像
  • 多阶段构建
  • 合并RUN指令减少层数

15. 高级技巧

调试技巧

进入运行中容器

代码语言:javascript
代码运行次数:0
运行
复制
docker exec -it <container> /bin/bash

检查容器进程

代码语言:javascript
代码运行次数:0
运行
复制
docker top <container>

分析镜像历史

代码语言:javascript
代码运行次数:0
运行
复制
docker history <image>
实用命令

批量操作

代码语言:javascript
代码运行次数:0
运行
复制
# 停止所有容器
docker stop $(docker ps -aq)

# 删除所有容器
docker rm $(docker ps -aq)

# 删除所有镜像
docker rmi $(docker images -q)

导出/导入

代码语言:javascript
代码运行次数:0
运行
复制
# 导出容器
docker export <container> > container.tar

# 导入为镜像
cat container.tar | docker import - new-image
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2025-07-10,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 导读
  • 详细目录
    • 第一部分:基础篇
    • 第二部分:操作篇
    • 第三部分:进阶篇
    • 第四部分:生产实践篇
    • 第五部分:扩展篇
    • 附录
  • 1. Docker 简介
    • 核心概念
  • 2. 安装 Docker
    • Linux 系统
    • Windows/Mac
  • 3. 常用命令
    • 镜像操作
    • 容器操作
    • 实际应用场景示例
  • 4. Dockerfile 编写
    • 基础示例
    • 高级技巧与最佳实践
      • 1. 多阶段构建实战
      • 2. 构建参数与动态配置
      • 3. 安全加固措施
      • 4. 构建优化技巧
      • 5. 企业级Dockerfile示例
      • 6. 调试技巧
  • 5. 容器网络
    • 网络模式详解
      • 1. 网络驱动比较
      • 2. 自定义网络高级配置
      • 3. 跨主机网络解决方案
      • 4. 网络性能优化
      • 5. 网络诊断工具
      • 6. 实际案例
  • 6. 数据管理
    • 数据管理高级指南
      • 1. 数据卷高级用法
      • 2. 分布式存储方案
      • 3. 备份与恢复策略
      • 4. 性能优化技巧
      • 5. 企业级存储方案
      • 6. 数据安全实践
      • 7. 监控与维护
  • 7. 最佳实践
  • 8. 进阶主题
    • 多阶段构建
    • Docker Compose
  • 9. 常见问题排查
  • 10. 安全实践详解
    • 容器安全深度防护指南
      • 1. 容器安全加固
      • 2. 镜像安全扫描
      • 3. 运行时安全监控
      • 4. 网络安全防护
      • 5. 企业级安全方案
      • 6. 安全最佳实践清单
  • 11. 监控与日志
    • 全面监控与日志管理指南
      • 1. 容器监控深度解析
      • 2. Prometheus监控方案
      • 3. 企业级日志架构
      • 4. 告警与事件响应
      • 5. 性能瓶颈分析
      • 6. 日志最佳实践
  • 12. CI/CD集成
    • 基本流程
    • 工具集成
  • 13. 生产环境部署
    • 编排选择
    • 高可用策略
  • 14. 性能调优
    • 容器层面
    • 镜像层面
  • 15. 高级技巧
    • 调试技巧
    • 实用命令
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档