容器
字数: 0 字 时长: 0 分钟
1. 容器概述

Docker 容器(Container)是镜像运行后形成的实例。Docker 会对容器中的进程、文件系统、网络等资源进行隔离,使不同容器之间可以相对独立地运行。
简单来说:
镜像是模板,容器是运行起来的实例。
例如,使用同一个 nginx 镜像,可以创建多个相互独立的 Nginx 容器:
nginx 镜像
│
├── nginx-01 容器
├── nginx-02 容器
└── nginx-03 容器每个容器都是一个独立的运行实例,可以拥有自己的进程、网络配置和运行状态。
容器运行后主要存在以下几种状态:
- 运行(Running):容器中的进程正在正常运行
- 暂停(Paused):容器中的进程被暂停,暂时不继续执行
- 停止(Stopped):容器中的进程已经终止,但容器本身仍然存在
可以简单理解为:
创建并运行
↓
Running
│
├── pause ──→ Paused
│ │
│ unpause
│ ↓
│ Running
│
└── stop ───→ Stopped
│
start
↓
Running需要注意的是:
停止容器并不等于删除容器,删除容器也不等于删除镜像。
镜像仍然可以继续创建新的容器,而同一个镜像也可以同时运行多个容器实例。
2. 容器操作
2.1 容器相关命令
Docker 容器可以在创建、运行、暂停、停止和删除等状态之间进行转换。

常用的容器操作命令如下:
| 命令 | 作用 | 人话理解 | 示例 |
|---|---|---|---|
docker run | 创建并运行容器 | 根据镜像启动一个新容器 | docker run nginx |
docker ps | 查看正在运行的容器 | 看当前哪些容器正在运行 | docker ps |
docker ps -a | 查看所有容器 | 包括已经停止的容器 | docker ps -a |
docker pause | 暂停容器 | 临时暂停容器中的进程 | docker pause nginx01 |
docker unpause | 恢复暂停的容器 | 让暂停的容器继续运行 | docker unpause nginx01 |
docker stop | 停止容器 | 停止容器中的主进程 | docker stop nginx01 |
docker start | 启动已停止的容器 | 把停止的容器重新启动 | docker start nginx01 |
docker restart | 重启容器 | 停止后重新启动容器 | docker restart nginx01 |
docker rm | 删除容器 | 删除不再需要的容器 | docker rm nginx01 |
2.2 创建并运行容器
下面以 Nginx 为例,创建并运行一个容器:
docker run --name mn -p 80:80 -d nginx参数说明:
| 参数 | 作用 | 人话理解 | 示例 |
|---|---|---|---|
docker run | 创建并运行容器 | 根据镜像启动一个新容器 | docker run nginx |
--name | 指定容器名称 | 给容器起一个方便操作的名字 | --name mn |
-p | 设置端口映射 | 将宿主机端口映射到容器端口 | -p 80:80 |
-d | 后台运行容器 | 不占用当前终端 | -d |
nginx | 指定镜像 | 使用哪个镜像创建容器 | nginx |
其中:
-p 80:80
│ │
│ └── 容器端口
└───── 宿主机端口也就是说:
访问宿主机的
80端口,请求会被转发到 Nginx 容器的80端口。
执行命令:

在服务器中启动容器:

查看运行状态:

可以看到 Nginx 容器已经正常运行。
2.3 查看容器状态和日志
查看当前正在运行的容器:
docker ps查看所有容器,包括已经停止的容器:
docker ps -a查看指定容器的日志:
docker logs mn持续跟踪容器日志:
docker logs -f mn其中:
docker logs:查看容器日志-f:持续跟踪日志输出,效果类似 Linux 中的tail -fmn:容器名称

常见的状态和日志命令:
| 命令 | 作用 | 人话理解 | 示例 |
|---|---|---|---|
docker ps | 查看运行中的容器 | 看哪些容器正在运行 | docker ps |
docker ps -a | 查看所有容器 | 连停止的容器一起看 | docker ps -a |
docker logs | 查看容器日志 | 看容器运行时输出了什么 | docker logs mn |
docker logs -f | 持续查看容器日志 | 实时跟踪日志输出 | docker logs -f mn |
2.4 进入容器
通过 docker exec 可以在一个正在运行的容器中执行命令。
例如,进入刚刚创建的 Nginx 容器:
docker exec -it mn bash参数说明:
docker exec:在正在运行的容器中执行命令-i:保持标准输入打开-t:分配一个终端mn:容器名称bash:在容器中启动 Bash Shell
部分精简镜像中可能没有安装 Bash,此时可以尝试使用
/bin/sh:
docker exec -it mn /bin/sh进入容器后,可以看到容器拥有自己相对独立的文件系统视图,看起来类似一个独立的 Linux 运行环境。

Nginx 的默认 HTML 文件目录为:
/usr/share/nginx/html进入该目录:
cd /usr/share/nginx/html查看目录中的文件:
ls
2.5 修改容器中的文件
下面通过修改 Nginx 默认页面,观察容器内部文件的变化。
由于当前容器中没有 vi 等编辑器,可以使用 sed 命令直接修改 index.html:
sed -i \
-e 's#Welcome to nginx#哈哈哈哈哈哈哈哈#g' \
-e 's#<head>#<head><meta charset="utf-8">#g' \
index.html执行结果:

修改之前:

修改之后:

可以看到,页面中的:
Welcome to nginx已经被修改。
这里直接修改容器文件只是为了理解容器文件系统。实际项目中的配置文件、数据和需要长期保存的内容,通常不会直接保存在容器内部,后续会在数据卷章节中单独说明。
2.6 退出容器
在容器终端中执行:
exit即可退出当前容器:

退出容器只会退出当前 Shell,并不会停止容器。
可以通过:
docker ps确认容器仍然处于运行状态。
2.7 停止和删除容器
正常情况下,可以先停止容器:
docker stop mn然后删除容器:
docker rm mn如果需要直接强制删除一个正在运行的容器,可以使用:
docker rm -f mn其中:
docker stop:停止容器中的进程,但保留容器docker rm:删除已经停止的容器docker rm -f:强制删除正在运行的容器
执行结果:

需要再次强调:
停止容器只是停止运行,容器仍然存在;执行
docker rm后,容器才会被删除。
3. 小结
Docker 容器是镜像运行后的实例,一个镜像可以创建多个相互独立的容器。
常用的容器操作主要包括:
docker run 创建并运行容器
docker ps 查看运行中的容器
docker ps -a 查看所有容器
docker start 启动容器
docker stop 停止容器
docker restart 重启容器
docker pause 暂停容器
docker unpause 恢复暂停的容器
docker logs 查看容器日志
docker exec 在容器中执行命令
docker rm 删除容器docker run 常见参数:
--name 指定容器名称
-p 设置端口映射
-d 后台运行容器可以简单记住容器的基本生命周期:
镜像
↓
docker run
↓
运行中的容器
├── pause → 暂停
├── stop → 停止
├── restart → 重启
├── exec → 进入 / 执行命令
├── logs → 查看日志
└── rm → 删除镜像负责“创建”,容器负责“运行”;停止容器不会删除容器,删除容器也不会删除镜像。