摘要

本次实验讲解 Docker 容器的基本操作,包括创建、启动、停止、重命名和删除容器。

上节回顾

在上一节实验中,我们学习了 Docker 镜像的基础操作,主要掌握了以下命令:

复习
复习

准备工作

在开始本次实验前,请完成以下准备工作:

  1. 先删除所有镜像(可以-f参数强制删除)
  2. 下载镜像:ubuntu:latest
  3. 下载镜像:httpd
  4. 下载镜像:busybox
删除镜像

使用 docker rmi 镜像名或者ID 命令对镜像进行删除

查看镜像列表进行验证:

镜像列表
镜像列表

实验任务

任务一:创建并启动容器

Docker 容器是镜像的运行实例。使用 docker run 命令可以创建并启动一个容器。这个命令非常灵活,有多种使用方式。

1.创建交互式容器

如果需要进入容器进行交互(例如在容器内执行命令),可以使用 -it 参数:

docker run -it ubuntu 

在交互模式下,你可以像使用普通 Linux 系统一样在容器内执行命令。要退出容器,只需输入 exit命令:

信息

使用 exit 退出交互式容器会导致容器停止。

2. 创建后台运行的容器

docker run -d -p 80:80 --name testweb httpd

参数说明:

  • -d:在后台运行容器(detached 模式)
  • -p 80:80:将宿主机的 80 端口映射到容器内的 80 端口
  • --name testweb:为容器指定一个名称,便于后续操作

验证容器是否正在运行:

docker ps

如果不指定容器名称,Docker 会自动生成一个随机名称:

docker run -d -p 81:80  httpd

警告

注意端口映射时,同一个宿主机端口不能被多个容器使用。这就是为什么第二个命令使用了 81 端口而不是 80 端口。

验证效果:

docker ps

如上图所示,我们没有指定名字,Docker 就会随机分配一个。

参数总结
  • 在容器内执行特定命令:将命令放在 docker run <镜像名> 后面
  • -it:交互式运行,允许你进入容器内部并与之交互
  • -d:后台运行容器,适用于服务类应用
  • --name:为容器指定一个易记的名称,方便管理
  • -p <宿主端口>:<容器端口>:端口映射,使容器内服务可从外部访问

任务二:创建容器但不启动(了解)

有时我们需要创建容器但暂时不启动它,这可以通过 docker create 命令实现。

Busybox

BusyBox 是一个集成了数百个最常用 Linux 命令和工具的软件,它将这些工具压缩成一个单一的可执行文件,因此被称为“嵌入式 Linux 的瑞士军刀”。

1.使用 busybox 镜像创建一个容器但不运行

docker create -it busybox

验证,查看当前的容器:

docker ps

注意,使用 docker ps 看不到刚创建的容器,因为它默认只显示正在运行的容器。要查看所有容器(包括未运行的),需要添加 -a 参数:

docker ps -a

从输出可以看到,新创建的容器状态为 "Created",而不是 "Up"(运行中)。

技巧

docker create 命令接受与 docker run 相同的大多数参数,区别仅在于它不会启动容器。这对于准备容器配置但延迟启动的场景很有用。

任务三:启动和停止容器

对于已创建的容器,我们可以使用 docker start 和 docker stop 命令来控制其运行状态。

启动和停止容器的命令
启动和停止容器的命令

1.启动容器

使用容器 ID 或名称启动一个已创建的容器:

docker start <容器ID或名称>

验证容器是否已启动:

docker ps

现在容器状态已从 "Created" 变为 "Up",表示容器正在运行。

2.停止容器

docker stop <容器ID或名称>

验证容器是否已停止:

docker ps -a

容器状态现在显示为 "Exited",表示容器已停止运行但仍然存在。

信息

docker stop 命令会发送 SIGTERM 信号给容器内的主进程,给它一个优雅关闭的机会。如果进程在一定时间内(默认10秒)没有退出,Docker 会发送 SIGKILL 信号强制终止。

如果需要立即强制停止容器,可以使用 docker kill 命令,它直接发送 SIGKILL 信号。

任务四:重命名容器

如果需要更改容器的名称,可以使用 docker rename 命令。

重命名容器的命令
重命名容器的命令

1.查看当前容器列表

docker ps

2.重命名容器

docker rename testweb testweb-1

这个命令将名为 "testweb" 的容器重命名为 "testweb-1"。

验证重命名是否成功:

docker ps

成功

容器重命名不会影响容器的运行状态或配置,只是更改了它的标识符。这对于规范化命名或修正错误的命名非常有用。

任务五:删除容器

当不再需要某个容器时,可以使用 docker rm 命令将其删除。

删除容器的命令
删除容器的命令

其中 -f 参数是 “强制删除”

1.尝试删除运行中的容器

docker rm testweb-1

默认情况下,Docker 不允许删除正在运行的容器,会返回错误信息。

解决这个问题有两种方法:

  1. 先停止容器,再删除:docker stop testweb-1 然后 docker rm testweb-1
  2. 使用 -f 参数强制删除:docker rm -f testweb-1

2.强制删除

docker rm -f testweb-1

使用 -f 参数后,Docker 会先停止容器,然后删除它,即使容器正在运行。

警告

强制删除容器可能会导致容器内的应用无法正常关闭,可能造成数据丢失。在生产环境中,建议先优雅地停止容器,然后再删除它。

练习

  1. 创建开发环境容器

    • 基于ubuntu镜像创建名为dev-env的交互式容器
  2. 部署个人网站

    • 基于httpd镜像创建名为my-website的Web服务器容器
    • 将宿主机8080端口映射到容器80端口
    • 在后台运行
  3. 准备工具容器

    • 基于busybox镜像创建名为toolkit的工具容器
    • 暂时只创建不启动,备用

知识总结

本次实验主要聚焦于 Docker 容器的基本操作,包括创建、启动、停止、删除和重命名容器。需要牢记以下核心命令:

知识准备
知识准备

Docker端口映射
Docker端口映射