Docker容器操作:从创建到销毁的全流程命令详解
上一章我们搞懂了容器是“镜像的运行实例”,这一章就来手把手教你容器的全套操作——从创建、启动到进入、停止,再到最后的删除,每个环节都搭配具体命令和场景示例。学会这些,你就能真正“掌控”容器,让它按你的需求运行~
一、容器查看:先搞清楚“当前有哪些容器” 🔍
在操作容器前,首先需要知道本地有哪些容器,以及它们的状态(运行中/已停止)。这就像打开任务管理器查看正在运行的程序一样。
核心命令:docker ps
-
查看运行中的容器:
docker ps输出结果包含容器ID、镜像名称、启动命令、创建时间、状态、端口映射、容器名称等信息。
-
查看所有容器(包括已停止的):
加上-a参数(all的缩写):docker ps -a -
只看容器ID和名称(简洁模式):
加上--format参数自定义输出:docker ps -a --format "ID: {{.ID}} | 名称: {{.Names}}"
二、容器创建与启动:从镜像“变出”一个运行的应用 🚀
创建并启动容器是最核心的操作,用docker run命令一键完成(如果本地没有指定镜像,会自动从仓库拉取)。
基础语法:
docker run [参数] 镜像名称:版本 [容器内执行的命令]
必学参数(高频使用):
| 参数 | 作用 | 示例 |
|---|---|---|
-d | 后台运行容器(不占用终端) | docker run -d nginx |
--name | 给容器起一个自定义名称(唯一) | docker run --name my-nginx nginx |
-p | 端口映射(主机端口:容器端口) | docker run -p 8080:80 nginx |
-it | 交互式运行(进入容器终端) | docker run -it ubuntu /bin/bash |
--rm | 容器停止后自动删除(适合临时测试) | docker run --rm -p 8080:80 nginx |
场景示例:
示例1:启动一个后台运行的Nginx容器,并映射端口
docker run -d -p 8080:80 --name my-nginx nginx
- 效果:Nginx在后台运行,访问
localhost:8080可看到Nginx默认页。 - 检查:用
docker ps可看到my-nginx状态为Up(运行中)。
示例2:启动一个Ubuntu容器,直接进入终端操作
docker run -it --name my-ubuntu ubuntu /bin/bash
- 效果:直接进入Ubuntu容器的命令行界面(终端提示符会变成容器内的样式),可以执行
ls、pwd等Linux命令。 - 退出:输入
exit退出容器,此时容器会停止(因为没有-d参数,交互式运行结束后容器停止)。
三、容器状态操作:启动、停止、重启的“开关” 🔄
容器启动后,可能需要暂停、重启或强制停止,对应三个核心命令:
1. 启动已停止的容器
docker start 容器名称/容器ID
示例:启动之前停止的my-nginx容器
docker start my-nginx
2. 停止运行中的容器(优雅停止)
docker stop 容器名称/容器ID
- 原理:向容器发送
SIGTERM信号,允许容器保存数据后再停止(类似“正常关机”)。 - 示例:停止
my-nginx
docker stop my-nginx
3. 强制停止容器(紧急情况)
如果容器卡死,docker stop无效,用docker kill强制终止(类似“拔电源”):
docker kill 容器名称/容器ID
4. 重启容器(先停止再启动)
docker restart 容器名称/容器ID
示例:重启my-nginx
docker restart my-nginx
四、进入容器:“钻进”容器内部操作 🕳️
有时需要进入运行中的容器(比如修改配置、查看日志),两种常用方式:docker exec和docker attach,但推荐用前者。
1. docker exec(推荐):在容器内执行命令,不影响容器运行
-
进入容器终端(交互式):
docker exec -it 容器名称/容器ID /bin/bash-i:保持标准输入打开;-t:分配一个伪终端;/bin/bash:容器内执行的命令(进入bash终端)。
示例:进入
my-nginx容器docker exec -it my-nginx /bin/bash进入后,可执行
ls /usr/share/nginx/html查看Nginx的默认页面文件。 -
执行单条命令(不进入终端):
比如在容器内查看nginx版本:docker exec my-nginx nginx -v
2. docker attach(慎用):直接连接容器的主进程
docker attach 容器名称/容器ID
- 特点:如果从这个终端退出(输入
exit),容器会直接停止(因为终止了主进程),适合临时查看主进程输出,不适合操作。
五、容器删除:清理不再需要的容器 🗑️
容器停止后不会自动删除,需要手动清理(避免占用资源)。
1. 删除单个已停止的容器
docker rm 容器名称/容器ID
示例:删除my-ubuntu容器
docker rm my-ubuntu
2. 强制删除运行中的容器
如果容器正在运行,docker rm会失败,需加-f参数强制删除:
docker rm -f my-nginx
3. 批量删除所有已停止的容器(实用技巧)
用一条命令清理所有停止的容器,释放资源:
docker rm $(docker ps -aq)
- 解释:
docker ps -aq会列出所有容器的ID(-a所有,-q只显示ID),然后通过$()传递给docker rm批量删除。
六、容器日志查看:排查问题的“关键线索” 📜
容器运行中出现问题?查看日志是最快的排查方式,用docker logs命令。
核心用法:
docker logs [参数] 容器名称/容器ID
常用参数:
-f:实时跟踪日志(类似tail -f);-t:显示日志时间戳;--tail 行数:只显示最后N行日志。
示例:
- 查看
my-nginx的所有日志:
docker logs my-nginx
- 实时跟踪
my-nginx的最新日志(按Ctrl+C退出):
docker logs -f my-nginx
- 查看
my-nginx最后10行日志,带时间戳:
docker logs -t --tail 10 my-nginx
七、实战案例:完整操作一个Nginx容器 🏁
我们用一个完整流程演示容器的生命周期:
- 拉取Nginx镜像(如果本地没有):
docker pull nginx
- 创建并启动容器(后台运行,映射8080端口,命名为
test-nginx):
docker run -d -p 8080:80 --name test-nginx nginx
- 查看容器状态:
docker ps # 确认test-nginx处于运行中
- 进入容器,修改默认页面:
docker exec -it test-nginx /bin/bash
# 进入后执行以下命令修改index.html
echo "<h1>Hello Docker!</h1>" > /usr/share/nginx/html/index.html
exit # 退出容器
-
验证效果:打开浏览器访问
localhost:8080,会看到“Hello Docker!”。 -
查看容器日志:
docker logs -f test-nginx # 可看到浏览器访问的日志记录
- 停止容器:
docker stop test-nginx
- 删除容器:
docker rm test-nginx
八、避坑指南:新手常犯的3个错误 ❌→✅
-
启动容器时提示“端口已被占用”
→ 原因:-p参数指定的主机端口(如8080)已被其他程序占用。
→ 解决:换一个未被占用的端口,比如-p 8081:80。 -
执行
docker exec提示“容器未运行”
→ 原因:容器处于停止状态,无法进入。
→ 解决:先启动容器docker start 容器名,再执行exec。 -
删除容器时提示“容器正在运行”
→ 解决:要么先停止docker stop 容器名,要么强制删除docker rm -f 容器名。
九、总结:容器操作核心命令速记 📌
| 操作 | 命令 |
|---|---|
| 查看运行中容器 | docker ps |
| 查看所有容器 | docker ps -a |
| 创建并启动容器 | docker run [参数] 镜像名 |
| 启动容器 | docker start 容器名/ID |
| 停止容器 | docker stop 容器名/ID |
| 进入容器终端 | docker exec -it 容器名/ID /bin/bash |
| 查看日志 | docker logs [参数] 容器名/ID |
| 删除容器 | docker rm 容器名/ID |
下一章,我们将学习镜像的进阶操作:如何自己构建镜像、优化镜像体积,以及推送镜像到仓库,让你的应用可以被其他人复用~
小练习:用学到的命令,启动一个redis容器(镜像名redis),映射端口6379:6379,命名为my-redis,然后进入容器用redis-cli测试能否连接。
更多推荐
所有评论(0)