1. Docker命令基础:容器生命周期管理
作为现代应用开发和部署的核心工具,Docker的命令行操作是每位开发者必须掌握的技能。我使用Docker已有五年多时间,从最初的手忙脚乱到现在能够流畅地运用各种命令解决实际问题,这个过程积累了不少经验。下面我将从最基础的容器生命周期管理命令开始,分享那些真正实用的命令组合和使用技巧。
1.1 容器创建与启动
docker run 是使用频率最高的命令之一,但很多人只停留在基础用法。实际上,这个命令有超过50个可选参数,掌握其中的关键组合能极大提升工作效率:
bash复制docker run -d --name myapp -p 8080:80 -v /host/path:/container/path -e ENV_VAR=value --restart unless-stopped nginx:latest
这个命令包含了几个实用参数:
-d:后台运行容器--name:为容器命名(便于后续管理)-p:端口映射(主机端口:容器端口)-v:数据卷挂载(主机路径:容器路径)-e:设置环境变量--restart:设置容器退出时的重启策略
经验分享:生产环境中强烈建议使用
--restart unless-stopped策略,这样即使宿主机重启,容器也会自动恢复。我曾遇到过因忘记设置这个参数而导致服务中断的情况。
1.2 容器状态管理
容器状态管理命令看似简单,但有些细节需要注意:
bash复制# 启动已停止的容器
docker start myapp
# 优雅停止容器(发送SIGTERM信号)
docker stop myapp
# 强制停止容器(发送SIGKILL信号)
docker kill myapp
# 重启容器
docker restart myapp
stop和kill的区别很重要:stop会给容器中的进程发送终止信号,允许它们进行清理工作;而kill会立即终止进程。在生产环境中,除非容器无响应,否则应该优先使用stop。
1.3 容器删除与清理
随着使用时间的增长,系统中可能会积累大量停止的容器。定期清理是个好习惯:
bash复制# 删除单个已停止的容器
docker rm myapp
# 强制删除运行中的容器
docker rm -f myapp
# 删除所有已停止的容器
docker container prune
# 删除特定状态的容器(创建时间大于24小时)
docker ps -a --filter "status=exited" --filter "created>24h" -q | xargs docker rm
避坑提示:使用
docker rm -f要格外小心,这会导致运行中的服务突然终止。我曾经不小心删除了一个正在处理重要任务的容器,导致数据不一致。现在我会先用docker ps确认容器状态再操作。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 容器操作与信息获取
掌握了基础的生命周期管理后,我们需要深入了解如何与运行中的容器交互,以及如何获取容器的各种信息。这些命令在日常问题排查和性能监控中非常有用。
2.1 容器信息查询
docker ps是最常用的查看容器状态的命令,但它的高级用法很多人并不熟悉:
bash复制# 基本用法:查看运行中的容器
docker ps
# 查看所有容器(包括已停止的)
docker ps -a
# 自定义输出格式
docker ps --format "table {{.ID}}\t{{.Names}}\t{{.Status}}\t{{.Ports}}"
# 按条件过滤
docker ps --filter "name=myapp" --filter "status=running"
# 显示容器大小信息
docker ps -s
docker inspect是另一个强大的工具,可以获取容器的详细信息:
bash复制# 获取容器的所有元数据
docker inspect myapp
# 提取特定信息(如IP地址)
docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' myapp
# 查看容器的挂载点信息
docker inspect -f '{{json .Mounts}}' myapp | jq
技巧分享:结合
jq工具可以更优雅地处理docker inspect的输出。例如,要查看所有容器的IP地址:docker inspect -f '{{.Name}} {{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' $(docker ps -aq)
2.2 容器内命令执行
有时我们需要在运行中的容器内执行命令:
bash复制# 在容器内执行单条命令
docker exec myapp ls /app
# 以交互模式进入容器
docker exec -it myapp /bin/bash
# 以特定用户身份执行命令
docker exec -u root myapp whoami
# 在容器内创建后台进程
docker exec -d myapp some-daemo
