mirror of
https://github.com/yeasy/docker_practice.git
synced 2026-03-11 04:14:38 +00:00
chore: remove unused historic image files
This commit is contained in:
@@ -5,6 +5,7 @@
|
||||
### 启动方式概述
|
||||
|
||||
启动容器有两种方式:
|
||||
|
||||
- **新建并启动**:基于镜像创建新容器
|
||||
- **重新启动**:将已终止的容器重新运行
|
||||
|
||||
@@ -46,8 +47,8 @@ root@af8bae53bdd3:/#
|
||||
|
||||
| 参数 | 作用 |
|
||||
|------|------|
|
||||
| `-i` | 保持标准输入(stdin)打开,允许输入 |
|
||||
| `-t` | 分配伪终端(pseudo-TTY),提供终端界面 |
|
||||
| `-i` | 保持标准输入 (stdin) 打开,允许输入 |
|
||||
| `-t` | 分配伪终端 (pseudo-TTY),提供终端界面 |
|
||||
| `-it` | 两者组合使用,获得交互式终端 |
|
||||
|
||||
在交互模式下可以执行命令:
|
||||
@@ -87,9 +88,11 @@ flowchart TD
|
||||
|
||||
#### 基础选项
|
||||
|
||||
相关信息如下表:
|
||||
|
||||
| 选项 | 说明 | 示例 |
|
||||
|------|------|------|
|
||||
| `-d` | 后台运行(detach) | `docker run -d nginx` |
|
||||
| `-d` | 后台运行 (detach)| `docker run -d nginx` |
|
||||
| `-it` | 交互式终端 | `docker run -it ubuntu bash` |
|
||||
| `--name` | 指定容器名称 | `docker run --name myapp nginx` |
|
||||
| `--rm` | 退出后自动删除容器 | `docker run --rm ubuntu echo hi` |
|
||||
|
||||
@@ -28,6 +28,7 @@ hello world
|
||||
```
|
||||
|
||||
容器会把输出的结果 (STDOUT) 打印到宿主机上面。此时:
|
||||
|
||||
- 终端被占用,无法执行其他命令
|
||||
- 按 `Ctrl+C` 会终止容器
|
||||
- 关闭终端窗口,容器也会停止
|
||||
@@ -42,6 +43,7 @@ $ docker run -d ubuntu:24.04 /bin/sh -c "while true; do echo hello world; sleep
|
||||
```
|
||||
|
||||
使用 `-d` 参数后:
|
||||
|
||||
- 容器在后台运行
|
||||
- 返回容器的完整 ID
|
||||
- 终端立即释放,可以继续执行其他命令
|
||||
@@ -73,6 +75,7 @@ flowchart TD
|
||||
```
|
||||
|
||||
当你运行 `docker run -d ubuntu:24.04` 时:
|
||||
|
||||
1. 容器启动
|
||||
2. 没有指定命令,默认执行 `/bin/bash`
|
||||
3. 但没有交互式终端 (没有 `-it` 参数),bash 发现没有输入源
|
||||
@@ -80,11 +83,14 @@ flowchart TD
|
||||
5. 主进程退出,容器停止
|
||||
|
||||
**关键理解**:
|
||||
|
||||
- ❌ `-d` 参数**不是**让容器 “一直运行”
|
||||
- ✅ `-d` 参数是让容器 “在后台运行”,能运行多久取决于主进程
|
||||
|
||||
#### 常见的 “立即退出” 场景
|
||||
|
||||
相关信息如下表:
|
||||
|
||||
| 场景 | 原因 | 解决方案 |
|
||||
|------|------|---------|
|
||||
| `docker run -d ubuntu` | 默认 bash 无输入立即退出 | 指定长期运行的命令 |
|
||||
|
||||
@@ -81,6 +81,8 @@ $ docker kill 容器名或ID
|
||||
|
||||
#### 与 stop 的区别
|
||||
|
||||
相关信息如下表:
|
||||
|
||||
| 命令 | 信号 | 使用场景 |
|
||||
|------|------|---------|
|
||||
| `docker stop` | SIGTERM → SIGKILL | 正常停止,让应用优雅退出 |
|
||||
@@ -135,10 +137,10 @@ c5d3a5e8f7b2 nginx "nginx" Up 5 minutes mynginx
|
||||
| 状态 | 说明 |
|
||||
|------|------|
|
||||
| `Up X minutes` | 运行中 |
|
||||
| `Exited (0)` | 正常退出(退出码 0) |
|
||||
| `Exited (1)` | 异常退出(非零退出码) |
|
||||
| `Exited (137)` | 被 SIGKILL 终止(128 + 9) |
|
||||
| `Exited (143)` | 被 SIGTERM 终止(128 + 15) |
|
||||
| `Exited (0)` | 正常退出 (退出码 0)|
|
||||
| `Exited (1)` | 异常退出 (非零退出码)|
|
||||
| `Exited (137)` | 被 SIGKILL 终止 (128 + 9)|
|
||||
| `Exited (143)` | 被 SIGTERM 终止 (128 + 15)|
|
||||
|
||||
---
|
||||
|
||||
@@ -235,6 +237,7 @@ $ docker stop $(docker ps -q) && docker container prune -f
|
||||
原因:应用没有正确处理 SIGTERM 信号,需要等待超时后强制终止。
|
||||
|
||||
解决方案:
|
||||
|
||||
1. 在应用中正确处理 SIGTERM
|
||||
2. 使用 `docker stop -t 0` 立即终止
|
||||
3. 检查 Dockerfile 中的 `STOPSIGNAL` 配置
|
||||
|
||||
@@ -44,12 +44,14 @@ $ docker exec -it 容器名 /bin/sh
|
||||
|
||||
#### 参数说明
|
||||
|
||||
相关信息如下表:
|
||||
|
||||
| 参数 | 作用 |
|
||||
|------|------|
|
||||
| `-i` | 保持标准输入打开(interactive) |
|
||||
| `-t` | 分配伪终端(TTY) |
|
||||
| `-i` | 保持标准输入打开 (interactive)|
|
||||
| `-t` | 分配伪终端 (TTY)|
|
||||
| `-it` | 两者组合,获得完整交互体验 |
|
||||
| `-u` | 指定用户(如 `-u root`) |
|
||||
| `-u` | 指定用户 (如 `-u root`)|
|
||||
| `-w` | 指定工作目录 |
|
||||
| `-e` | 设置环境变量 |
|
||||
|
||||
@@ -197,6 +199,8 @@ CONTAINER ID IMAGE STATUS NAMES
|
||||
|
||||
### exec vs attach 对比
|
||||
|
||||
相关信息如下表:
|
||||
|
||||
| 特性 | docker exec | docker attach |
|
||||
|------|-------------|---------------|
|
||||
| **工作方式** | 在容器内启动新进程 | 附加到主进程 |
|
||||
@@ -257,6 +261,7 @@ $ docker exec myapp python manage.py migrate
|
||||
#### 2。生产环境避免进入容器
|
||||
|
||||
笔者建议:生产环境应尽量避免进入容器直接操作,而是通过:
|
||||
|
||||
- 日志系统查看日志 (如 `docker logs` 或集中式日志)
|
||||
- 监控系统查看状态
|
||||
- 重新部署而非手动修改
|
||||
|
||||
@@ -16,6 +16,8 @@ $ docker rm 容器名或ID
|
||||
|
||||
### 删除选项
|
||||
|
||||
相关信息如下表:
|
||||
|
||||
| 选项 | 说明 | 示例 |
|
||||
|------|------|------|
|
||||
| 无参数 | 删除已停止的容器 | `docker rm mycontainer` |
|
||||
@@ -258,6 +260,7 @@ $ docker rm -f mycontainer
|
||||
#### Q:删除后磁盘空间没释放
|
||||
|
||||
可能原因:
|
||||
|
||||
1. 容器的数据卷未删除 (使用 `-v` 参数)
|
||||
2. 镜像未删除
|
||||
3. 构建缓存未清理
|
||||
|
||||
@@ -1,5 +1,7 @@
|
||||
## 本章小结
|
||||
|
||||
相关信息如下表:
|
||||
|
||||
| 操作 | 命令 | 说明 |
|
||||
|------|------|------|
|
||||
| 新建并运行 | `docker run` | 最常用的启动方式 |
|
||||
@@ -32,7 +34,7 @@
|
||||
|------|---------|
|
||||
| 进入容器调试 | `docker exec -it 容器名 bash` |
|
||||
| 执行单条命令 | `docker exec 容器名 命令` |
|
||||
| 查看主进程输出 | `docker attach 容器名`(慎用) |
|
||||
| 查看主进程输出 | `docker attach 容器名` (慎用)|
|
||||
|
||||
### 延伸阅读
|
||||
|
||||
|
||||
Reference in New Issue
Block a user