Docker - 容器生命周期管理:从创建到销毁的完整命令指南

Docker - 容器生命周期管理:从创建到销毁的完整命令指南 1. Docker容器生命周期概述容器就像一个有生命的个体从诞生到消亡会经历完整的生命周期。理解这个生命周期对于高效管理微服务应用至关重要。想象你正在部署一个电商系统订单服务、支付服务、商品服务各自运行在独立容器中这些容器每天可能要被创建、重启甚至销毁上百次。掌握生命周期管理命令就是掌握容器世界的生存法则。容器生命周期大致分为五个阶段创建阶段通过docker create或docker run实例化镜像运行阶段容器处于活跃状态处理实际工作负载暂停阶段临时冻结容器进程使用docker pause停止阶段正常终止容器进程使用docker stop清理阶段删除容器释放资源使用docker rm2. 容器创建从零到一的诞生2.1 docker create预创建容器这个命令就像容器的备胎模式创建但不立即启动。当我们需要预先配置容器参数时特别有用# 拉取CentOS镜像作为示例 docker pull centos:7 # 创建名为mycontainer的容器但不启动 docker create -it --name mycontainer centos:7 /bin/bash关键参数解析-it组合参数表示交互式终端--name给容器起个有意义的名字否则Docker会随机分配如happy_panda这类名字末尾的/bin/bash容器启动后要执行的命令创建后使用docker ps -a可以看到容器状态为Created。这种预先创建的方式在需要批量部署相同配置容器时非常高效。2.2 docker run一键创建并启动这是最常用的全能选手命令相当于createstart的组合拳# 基本用法 docker run -d --name web_server nginx:latest # 带端口映射的示例 docker run -d -p 8080:80 --name my_nginx nginx:latest实用参数锦囊-d后台运行detach模式-p端口映射主机端口:容器端口-v目录挂载主机目录:容器目录--restart设置自动重启策略比如--restartalways新手容易踩的坑直接运行docker run ubuntu会发现容器立即退出因为容器内没有前台进程在运行。解决方法是指定持久化进程如docker run -d ubuntu tail -f /dev/null3. 容器运行管理让服务持续在线3.1 启停控制三剑客# 启动已停止的容器 docker start mycontainer # 停止运行中的容器发送SIGTERM信号 docker stop mycontainer # 强制立即停止发送SIGKILL信号 docker kill mycontainer停止与杀死的区别stop会给容器优雅退出的机会默认10秒等待时间而kill是立即强制终止。生产环境建议优先使用stop避免数据损坏。3.2 重启策略应对意外崩溃通过--restart参数设置不同级别的重启策略no不自动重启默认on-failure非正常退出时重启always总是重启unless-stopped除非手动停止否则总是重启示例docker run -d --restartunless-stopped --name resilient_container nginx4. 容器状态监控掌握实时动态4.1 docker ps容器体检表# 查看运行中的容器 docker ps # 查看所有容器包括已停止的 docker ps -a # 自定义输出格式 docker ps --format table {{.ID}}\t{{.Names}}\t{{.Status}}4.2 docker logs查看容器日记# 查看最新日志 docker logs mycontainer # 实时追踪日志类似tail -f docker logs -f mycontainer # 显示时间戳 docker logs -t mycontainer # 查看最近10条日志 docker logs --tail 10 mycontainer4.3 docker stats资源监控仪实时显示容器资源占用情况docker stats输出示例CONTAINER ID NAME CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O PIDS c3f279d17e0a mycontainer 0.25% 300MiB / 1.944GiB 15.08% 1.12kB / 0B 0B / 0B 55. 容器维护进入容器内部5.1 docker exec临时进入容器# 进入已运行容器的bash shell docker exec -it mycontainer /bin/bash # 在容器内执行单条命令 docker exec mycontainer ls /var/log重要提示exec是在运行的容器中启动新进程退出不会影响容器运行。与之相对的attach命令会连接到主进程退出可能导致容器停止生产环境慎用。5.2 文件传输技巧# 从容器复制文件到主机 docker cp mycontainer:/etc/nginx/nginx.conf ./nginx.conf.bak # 从主机复制文件到容器 docker cp backup.sql mycontainer:/tmp/6. 容器清理优雅地告别6.1 单容器清理# 停止并删除容器 docker stop mycontainer docker rm mycontainer # 强制删除运行中的容器 docker rm -f mycontainer6.2 批量清理大扫除# 删除所有已停止的容器 docker container prune # 一键清理包括未使用的网络、镜像等 docker system prune危险操作预警以下命令会删除所有容器包括运行中的使用前务必确认docker rm -f $(docker ps -aq)7. 实战案例微服务容器管理假设我们有个用户服务需要管理# 首次部署 docker run -d --name user_service \ -p 8000:8000 \ -v /data/user_service:/app/data \ --restartunless-stopped \ user-service:1.2 # 更新版本蓝绿部署思路 docker stop user_service docker rm user_service docker run -d --name user_service \ -p 8000:8000 \ -v /data/user_service:/app/data \ --restartunless-stopped \ user-service:1.3 # 日常维护 docker exec -it user_service bash service --status-all # 查看服务状态 tail -f /var/log/app.log # 查看应用日志 # 故障排查 docker logs -n 100 -f user_service | grep ERROR记住容器的最佳实践每个容器应该只运行一个主进程保持无状态设计重要数据始终使用volume持久化。当容器出现异常时先docker logs查看日志再考虑进入容器诊断最后才是重启容器。