04 | 容器的操作

本文介绍了Docker容器的概念,包括容器的生命周期和不同状态。详细讲述了如何创建并启动、终止、进入、删除容器,以及如何导出和导入容器,帮助理解容器作为应用载体的本质。还提及了在Linux中使用ps命令查看进程,以及与容器操作相关的快捷键和技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

04 | 容器的操作

容器(Container)是什么?

容器是基于镜像创建的可运行实例,并且单独存在。一个镜像可以创建出多个容器。运行容器化的环境时,实际是在容器内部创建该文件系统的读写副本。这将添加一个容器层,该层允许修改镜像的整个副本。

在这里插入图片描述

容器的生命周期

  1. created;初建状态
  2. running:运行状态
  3. stopped:停止状态
  4. paused:暂停状态
  5. deleted:删除状态
    在这里插入图片描述

处于初建状态、运行状态、停止状态、暂停状态的容器都可以直接删除。

容器的操作

(1)创建并启动容器

docker create命令来创建容器

$ docker create -it --name=busybox busybox

容器启动有两种方式:

  • 使用docker start命令基于已经创建好的容器直接启动 。

  • 使用docker run命令直接基于镜像新建一个容器并启动,相当于先执行docker create命令从镜像创建容器,然后再执行docker start命令启动容器。

$ docker run -it --name=busybox busybox

当使用docker run创建并启动容器时,Docker 后台执行的流程为:

  • Docker 会检查本地是否存在 busybox 镜像,如果镜像不存在则从 Docker Hub 拉取 busybox 镜像;

  • 使用 busybox 镜像创建并启动一个容器;

  • 分配文件系统,并且在镜像只读层外创建一个读写层;

  • 从 Docker IP 池中分配一个 IP 给容器;

  • 执行用户的启动命令运行镜像。

上述命令中, -t 参数的作用是分配一个伪终端,-i 参数则可以终端的 STDIN 打开,同时使用 -it 参数可以让我们进入交互模式。 在交互模式下,用户可以通过所创建的终端来输入命令。

对于容器来说,杀死容器中的主进程,则容器也会被杀死。

(2)终止容器

容器停止用docker stop 命令。格式为:
docker stop [-t]|–time[=10].
该命令首先会向运行中的容器发送SIGTERM信号,如果容器内1号进程能够接受并能处理SIGTERM,则等待1号进程处理完毕后退出,如果等待一段时间后,容器仍然没有退出,则会发送SIGKILL强制终止容器。

$ docker stop busybox

如果你想查看停止状态的容器信息,你可以使用 docker ps -a 命令。
处于终止转台的容器也可以通过docker start命令来重新启动。

(3)进入容器

处于运行状态的容器可以通过docker attach、docker exec、nsenter等多种方式进入容器。

  • 使用docker attach命令进入容器
$ docker attach busybox

注意:当我们同时使用docker attach命令同时在多个终端运行时,所有的终端窗口将同步显示相同内容,当某个命令行窗口的命令阻塞时,其他命令行窗口同样也无法操作。
由于docker attach命令不够灵活,因此我们一般不会使用docker attach进入容器。下面我介绍一个更加灵活的进入容器的方式docker exec

  • 使用docker exec 命令进入容器
$ docker exec it busybox sh
/ # ps aux
PID   USER     TIME  COMMAND
    1 root      0:00 sh
    7 root      0:00 sh
   12 root      0:00 ps aux

我们进入容器后,可以看到容器内有两个sh进程,这是因为以exec的方式进入容器,会单独启动一个 sh 进程,每个窗口都是独立且互不干扰的,也是使用最多的一种方式。

(4)删除容器

删除容器命令的使用方式如下:

docker rm [OPTIONS] CONTAINER [CONTAINER…]。
删除一个停止的容器 docker rm命令

docker rm busybox

删除正在运行中的容器,必须添加-f(或 --force)参数,Docker会发送SIGKILL信号强制终止正在运行的容器。

docker rm -f busybox
(5)导出导入容器
  • 导出容器

我们可以使用docker export CONTAINER命令导出一个容器到文件,不管此时容器是否处于运行中的状态。导出容器前先进入容器,创建一个文件,过程如下:

首先进入容器创建文件

docker exec -it busybox sh
cd /tmp && touch test

然后执行导出命令

docker export busybox > busybox.tar

执行以上命令后会在当前文件夹下生成busybox.tar文件,我们可以将其拷贝到其他机器上,通过导入命令实现容器的迁移。

  • 导入容器

通过docker export命令导出的文件,可以使用docker import命令导入,执行完docker import后会变为本地镜像,最后再使用docker run命令启动该镜像,这样我们就实现了容器的迁移。

docker import busybox.tar busybox:test

此时,busybox.tar被导入成为新的镜像,镜像名称为busybox:test

使用docker run命令启动并进入容器,查看上一步创建的临时文件。

docker run it busybox:test sh
/ # ls /tmp/
test

可以看到我们之前在 /tmp 目录下创建的 test 文件也被迁移过来了。这样我们就通过docker export和docker import命令配合实现了容器的迁移

总结

  1. 镜像与容器的区别:

镜像包含了容器运行所需要的文件系统结构和内容,是静态的只读文件,而容器则是在镜像的只读层上创建了可写层,并且容器中的进程属于运行状态,容器是真正的应用载体。

  1. 容器生命周期
  • created;初建状态
  • running:运行状态
  • stopped:停止状态
  • paused:暂停状态
  • deleted:删除状态
命令作用命令备注
创建容器docker create -it --name=busybox busybox该命令创建的容器处于停止状态
启动容器docker start
创建并且启动容器docker run先执行docker create从镜像创建容器,再执行docker start启动容器。
终止容器docker stop busybox
进入容器docker exec -it busybox sh每个窗口都是独立且互不干扰的,使用最多的一种方式。
删除容器docker rm busybox删除正在运行中的容器,必须添加 -f
导出容器docker export busybox > busybox.tar
导入容器docker import busybox.tar busybox:test

遇到的问题

  • Linux中的ps命令是Process Status的缩写。ps命令用来列出系统中当前运行的那些进程。ps命令列出的是当前那些进程的快照,如果想要动态的显示进程信息,就可以使用top命令
    ps |aux 这个命令作用
参数作用
-a显示所有进程(包括其他用户的进程)
-u用户以及其他详细信息
-x显示没有控制终端的进程
  • win10繁体字改简体字快捷键 Ctrl+Shift+F
  • 容器本质是进程,启动需要一个不能退出的命令作为主进程。
  • Ctrl+D 可以退出当前容器交互窗口。
  • docker load 和 save 是搭配使用的,主要用来直接操作镜像,而 import 是和 export 搭配使用的,主要是用来操作容器的。
### 创建Ubuntu 22.04 Docker容器 为了创建一个基于Ubuntu 22.04操作系统环境作为Docker容器,可以遵循一系列特定命令来实现这一目标。首先,确保已经安装好Docker引擎,并且其服务正在运行。 #### 安装准备 如果尚未安装Docker,在Ubuntu上可以通过官方文档指导完成安装过程[^1]。一旦确认Docker已成功部署,则可继续下面的步骤。 #### 获取镜像 通过`docker search ubuntu`指令查询可用的Ubuntu镜像列表,从中挑选合适的版本标签。对于指定版本如Ubuntu 22.04, 使用如下命令下载对应的官方镜像: ```bash docker pull ubuntu:22.04 ``` 此操作会从Docker Hub获取最新的Ubuntu 22.04 LTS版本并保存至本地缓存中以便后续使用[^2]。 #### 启动容器 有了所需的镜像之后,下一步就是利用该镜像实例化一个新的容器。这里展示了一个典型场景下的启动参数配置方式: ```bash docker run --name my_ubuntu2204 -it -p 2060:22 -v /home/user:/home/inside_user ubuntu:22.04 bash ``` 上述命令解释: - `--name my_ubuntu2204`: 给新创建的容器命名为my_ubuntu2204; - `-it`: 表示交互模式加TTY终端支持; - `-p 2060:22`: 将主机端口2060映射到容器内的SSH服务默认监听端口(即22号),允许外部访问; - `-v /home/user:/home/inside_user`: 实现宿主机目录与容器内部路径之间的挂载共享功能;此处假设将宿主机上的/home/user文件夹映射到了容器中的/home/inside_user位置; - `ubuntu:22.04`: 明确指定了要使用的具体镜像及其版本; - `bash`: 进入容器后执行的第一个程序为Bash Shell。 以上设置使得能够方便地管理容器内资源的同时也便于远程连接和维护工作[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值