目录

一、基础命令:Docker 核心操作入门

1. 容器管理(最常用操作)

2. 镜像管理(镜像即应用模板)

3. 数据卷管理(数据持久化核心)

4. 网络管理(容器通信桥梁)

二、Docker Compose:多容器应用编排

1. 核心配置文件(docker-compose.yml)

2. 常用 Compose 命令

三、进阶管理工具:从可视化到集群

1. Portainer:轻量级可视化管理

2. Kubernetes(K8s):大规模容器编排

3. Rancher:Kubernetes 简化工具

四、最佳实践:高效与安全并重

1. 镜像优化

2. 容器安全

3. 数据持久化策略

4. 自动化管理


Docker 作为容器化技术的核心,其高效管理直接影响应用的稳定性与资源利用率。本文系统梳理 Docker 管理的核心维度,涵盖基础命令、多容器编排、可视化工具及最佳实践,从单机到集群场景均适用。

一、基础命令:Docker 核心操作入门

掌握命令行工具是 Docker 管理的基础,以下按「容器 - 镜像 - 数据卷 - 网络」四大核心对象分类整理:

1. 容器管理(最常用操作)

# 查看运行中容器(精简信息)
docker ps

# 查看所有容器(含停止状态,显示完整ID)
docker ps -a --no-trunc

# 启动/停止/重启容器(支持ID前缀或名称)
docker start <容器ID/名称>
docker stop <容器ID/名称>
docker restart <容器ID/名称>

# 强制终止容器(类似kill -9,紧急情况使用)
docker kill <容器ID/名称>

# 删除容器(需先停止,-f强制删除运行中容器)
docker rm <容器ID/名称>
docker rm -f <容器ID/名称>

# 批量清理:删除所有停止的容器(谨慎操作)
docker container prune -f  # -f跳过确认提示

# 日志查看(-f实时跟踪,--tail显示末尾行数)
docker logs -f --tail 100 <容器ID/名称>

# 进入容器终端(/bin/bash失败时尝试/sh)
docker exec -it <容器ID/名称> /bin/bash

2. 镜像管理(镜像即应用模板)

# 查看本地镜像(含大小和创建时间)
docker images --format "table {{.Repository}}\t{{.Tag}}\t{{.Size}}\t{{.CreatedSince}}"

# 拉取镜像(不指定tag默认latest,建议显式指定版本)
docker pull nginx:1.25-alpine  # 优先选择alpine精简版本

# 构建自定义镜像(-t指定名称和版本,.表示当前目录Dockerfile)
docker build -t myapp:v1.0.0 .

# 删除镜像(需先删除依赖它的容器,-f强制删除)
docker rmi <镜像ID/名称:tag>

# 批量清理:删除未被容器引用的镜像(-a包含所有无用镜像)
docker image prune -a -f  # 释放磁盘空间的常用操作

# 推送镜像到仓库(需先登录,仓库地址默认Docker Hub)
docker login -u 用户名
docker push 用户名/镜像名:版本

3. 数据卷管理(数据持久化核心)

# 创建命名数据卷(推荐,便于管理)
docker volume create app_data

# 查看所有数据卷
docker volume ls

# 查看数据卷详情(重点看Mountpoint:宿主机实际存储路径)
docker volume inspect app_data

# 删除未使用的数据卷(无引用的孤立卷)
docker volume prune -f

4. 网络管理(容器通信桥梁)

# 查看所有网络(默认包含bridge/host/none三种模式)
docker network ls

# 创建自定义桥接网络(容器间可通过名称通信)
docker network create --driver bridge my_network

# 将容器连接到网络(实现跨网络通信)
docker network connect my_network <容器ID/名称>

# 断开容器与网络的连接
docker network disconnect my_network <容器ID/名称>

二、Docker Compose:多容器应用编排

当应用依赖多个组件(如前端 + 后端 + 数据库)时,docker-compose 通过 YAML 配置文件实现一站式管理,避免手动执行大量命令。

1. 核心配置文件(docker-compose.yml)

version: '3.8'  # 声明语法版本(推荐3.8及以上)
services:
  # 前端服务(Nginx)
  web:
    image: nginx:1.25-alpine
    ports:
      - "80:80"  # 宿主机80端口映射到容器80端口
    volumes:
      - ./html:/usr/share/nginx/html  # 绑定挂载本地静态文件
      - ./nginx.conf:/etc/nginx/conf.d/default.conf  # 自定义配置
    depends_on:
      - api  # 启动顺序:先启动api服务
    restart: unless-stopped  # 异常退出时自动重启

  # 后端服务(自定义API)
  api:
    build: ./api  # 基于./api目录的Dockerfile构建
    environment:  # 环境变量注入
      - DB_HOST=db
      - DB_PORT=3306
    depends_on:
      - db
    restart: unless-stopped

  # 数据库服务(MySQL)
  db:
    image: mysql:8.0
    volumes:
      - db_data:/var/lib/mysql  # 数据卷持久化数据库文件
    environment:
      - MYSQL_ROOT_PASSWORD=secure_password
      - MYSQL_DATABASE=app_db
    restart: unless-stopped
    healthcheck:  # 健康检查(确保数据库就绪)
      test: ["CMD", "mysqladmin", "ping", "-h", "localhost"]
      interval: 10s
      timeout: 5s
      retries: 5

# 声明数据卷(自动创建,独立于容器生命周期)
volumes:
  db_data:

2. 常用 Compose 命令

# 启动所有服务(-d后台运行,--build强制重建镜像)
docker-compose up -d --build

# 停止并删除容器、网络(保留数据卷)
docker-compose down

# 查看服务状态(包含健康状态)
docker-compose ps

# 查看指定服务日志(-f实时跟踪)
docker-compose logs -f api

# 重启单个服务
docker-compose restart web

# 进入服务容器终端
docker-compose exec db mysql -uroot -p

三、进阶管理工具:从可视化到集群

1. Portainer:轻量级可视化管理

适合单机或小型集群,通过网页界面管理 Docker 资源,零学习成本。

# 容器化部署Portainer(推荐使用ce社区版)
docker run -d -p 9000:9000 \
  --name portainer \
  --restart=always \
  -v /var/run/docker.sock:/var/run/docker.sock \  # 挂载Docker守护进程
  -v portainer_data:/data \  # 持久化Portainer配置
  portainer/portainer-ce:latest

访问 http://localhost:9000 即可使用,支持容器启停、镜像管理、网络配置等全功能操作。

2. Kubernetes(K8s):大规模容器编排

工业级标准,适合生产环境的集群管理,核心能力包括:

  • 自动扩缩容(根据负载动态调整容器数量)

  • 滚动更新(零停机部署新版本)

  • 自愈能力(容器故障自动重启)

  • 服务发现与负载均衡

入门命令:

# 部署应用
kubectl apply -f deployment.yaml

# 查看Pod(容器实例)状态
kubectl get pods

# 查看服务暴露的端口
kubectl get services

3. Rancher:Kubernetes 简化工具

提供图形化界面管理多个 K8s 集群,支持一键部署集群、监控资源使用、配置访问控制,降低 K8s 学习门槛。

四、最佳实践:高效与安全并重

1. 镜像优化

  • 采用多阶段构建(multi-stage build)减少镜像体积:
    # 构建阶段
    FROM maven:3.8 AS builder
    COPY src /app/src
    RUN mvn -f /app/pom.xml package
    
    # 运行阶段(仅保留必要文件)
    FROM openjdk:17-jdk-slim
    COPY --from=builder /app/target/*.jar /app/app.jar
    ENTRYPOINT ["java", "-jar", "/app/app.jar"]
    
  • 优先使用 Alpine 基础镜像(体积仅为常规镜像的 1/10)

  • 清理构建缓存(如 apt cleanyum clean

2. 容器安全

  • 限制资源使用(防止单个容器耗尽服务器资源):
    docker run -d --name app \
      --cpus 0.5  # 限制CPU使用(最多0.5核)
      --memory 512m  # 限制内存使用(最多512MB)
      --user 1000  # 非root用户运行(降低权限)
      myapp:v1
    
  • 避免在容器内存储敏感信息(使用环境变量或 secrets 管理)

  • 定期更新基础镜像(修复安全漏洞)

3. 数据持久化策略

  • 核心数据必须使用命名数据卷(docker volume),而非绑定挂载

  • 数据库等有状态服务,建议配置数据卷备份脚本:

    # 示例:备份MySQL数据卷到tar包
    docker run --rm \
      -v db_data:/source \
      -v $(pwd):/backup \
      alpine tar -czf /backup/db_backup_$(date +%Y%m%d).tar.gz -C /source .
    

4. 自动化管理

  • 结合 CI/CD 工具(如 Jenkins、GitHub Actions)实现镜像自动构建与部署

  • 使用 watchtower 自动更新容器(生产环境谨慎使用):

    docker run -d \
      --name watchtower \
      -v /var/run/docker.sock:/var/run/docker.sock \
      containrrr/watchtower --interval 3600  # 每小时检查更新
    

通过上述方法,可根据应用规模(单机 / 集群)和复杂度(单容器 / 多组件)选择合适的管理方案,实现 Docker 环境的高效运维。

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐