Docker管理全攻略:从入门到精通
目录
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 clean
、yum 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 环境的高效运维。
更多推荐
所有评论(0)