动手实践学Docker(一)
本文最后更新于 599 天前,内容如有失效请评论区留言。

[toc]

本教程转载自 蓝桥云课之动手实践学Docker

实验1 Docker 基本用法

实验介绍

Docker 实战课程适用于有一定 Linux 系统基础,想快速上手 Docker 的同学。学习方法是多实践,多提问。启动实验后按照实验步骤逐步操作,同时理解每一步的详细内容。

课程为纯动手实验教程,为了能说清楚实验中的一些操作会加入理论内容。理论内容不会涉及太多,因为已经有太多好文章了,会精选最值得读的文章推荐给你,在动手实践的同时扎实理论基础。如果实验开始部分有推荐阅读的材料,请务必先阅读后再继续实验,理论知识是实践必要的基础。

知识点

本实验中我们初步接触 Docker 的概念和基本用法。需要依次完成下面几项任务:

  • Docker 基本概念
  • 安装 Docker
  • Docker 运行 Hello World

推荐阅读

本节实验推荐先阅读下述内容:

这篇文章介绍了 Docker 产生的技术发展历程,Docker 中的核心技术以及相关的子项目,非常好的入门资料。

这篇 Docker 官方的文章详细介绍了 Docker 的运行机制和必要的组件。不涉及到很底层的技术,可以做为对 Docker 的一个初步了解。

Docker 概念

Linux 容器技术很早就有了,比较有名的是被集成到主流 Linux 内核中的 LXC 项目。容器通过对操作系统的资源访问进行限制,构建成独立的资源池,让应用运行在一个相对隔离的空间里,同时容器间也可以进行通信。

容器技术对比虚拟机技术,容器更轻量级,对资源的消耗小很多。容器操作也更快捷,启动和停止都要比虚拟机快。但容器需要与主机共享操作系统内核,不能像虚拟机那样运行独立的内核。

Docker 是一个基于 LXC 技术构建的容器引擎,基于 Go 语言开发,遵循 Apache2.0 协议开源。Docker 的发展得益于为使用者提供了更好的容器操作接口。包括一系列的容器,镜像,网络等管理工具,可以让用户简单的创建和使用容器。

Docker 支持将应用打包进一个可以移植的容器中,重新定义了应用开发,测试,部署上线的过程,核心理念就是「Build once, Run anywhere」。它带来了快速高效的开发生命周期,构建了「Build, Ship and Run」流程,统一了整个开发、测试和部署的环境和流程。

Docker 容器技术的典型应用场景是开发运维上提供持续集成和持续部署的服务。

下面我们开始介绍 Docker 中的几个基本概念。

镜像

Docker 的镜像概念类似于虚拟机里的镜像,是一个只读的模板,一个独立的文件系统,包括运行容器所需的数据,可以用来创建新的容器。

镜像可以基于 DockerFile 构建,DockerFile 是一个描述文件,里面包含若干条命令,每条命令都会对基础文件系统创建新的层次结构。

用户可以通过编写 DockerFile 创建新的镜像,也可以直接从 Docker 的官方仓库 Docker Hub 上下载镜像使用。

容器

Docker 容器是由 Docker 镜像创建的运行实例。Docker 容器类似虚拟机,可以支持的操作包括启动,停止,删除等。每个容器间是相互隔离的,但隔离的效果比不上虚拟机。容器中会运行特定的应用,包含特定应用的代码及所需的依赖文件。

在 Docker 容器中,每个容器之间的隔离使用 Linux 的 CGroups(Control Groups)和 Namespace 技术实现的。CGroups(控制组)提供了资源控制: CPU、内存、磁盘等资源的访问限制。Namespaces (命名空间)提供了系统资源的隔离:进程、网络、文件系统等。

仓库

如果你使用过 Git 和 GitHub 就很容易理解 Docker 的仓库概念。Docker 仓库相当于一个 GitHub 上的代码库。

Docker 仓库是用来包含镜像的位置,Docker 提供一个注册服务器(Registry)来保存多个仓库,每个仓库又可以包含多个具备不同 tag 的镜像。Docker 运行中使用的默认仓库是 Docker Hub 公共仓库。

仓库支持的操作类似 Git,创建了新的镜像后,我们可以 Push 提交到仓库,也可以从指定仓库 Pull 拉取镜像到本地。

Docker 安装

Docker 有两个版本,Community Edition(CE) 和 Enterprise Edition(EE)。即社区版和企业版本。我们将介绍 Ubuntu 中社区版的安装过程。

线上实验环境中,已经预安装了 docker-ce。如需在本地安装 Docker,请参考 Docker 官方文档

设置存储库

首先更新 apt 软件包数据库,以确保软件包列表是最新的。所有的命令均在终端 Terminal 中执行:

sudo apt-get update

执行 sudo 时可能会出现 “sudo: 无法解析主机:xxxxxx” 这样的提示,这是因为云主机的 hostname 不是 localhost,而在 /etc/hosts 中定义了 127.0.0.1 localhost

该提示可以忽略。如果不想要终端出现这样的提示,可以执行以下命令 sudo hostname localhost

安装一些软件包,以允许 apt 通过 HTTPS 使用存储库:

sudo apt-get -y install apt-transport-https ca-certificates curl software-properties-common

首先,我们添加阿里云提供的镜像源以便于加快国内安装速度,先添加相应的密钥:

curl -fsSL http://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add -

再添加相应源的信息:

sudo add-apt-repository "deb [arch=amd64] http://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable"

安装 docker-engine

我们环境中已经有 Docker 了,你可以在本地使用以下命令安装【可跳过步骤】:

# 更新 apt 索引库
sudo apt-get update
# 安装 docker-ce
sudo apt-get install docker-ce

在安装成功后,Docker 的守护进程自动启动,不需要手动启动服务。此时,我们可以查看其版本信息,使用如下命令:

docker version

线上环境中的 Docker 版本信息如下图所示:

此处输入图片的描述

如果你是 自己搭建的 Docker 环境,可能会提示我们没有相应的权限连接到 Docker 守护进行绑定的 Unix 套接字。这是因为,默认情况下,该套接字归属于 root 用户,对于其它用户只能通过 sudo 来进行访问。

如果要让 shiyanlou 用户可以直接执行 Docker 命令而不必在每次执行时都输入 sudo 来获得权限,我们可以将要执行 Docker 命令的用户添加到用户组 Docker 中。该用户组会在安装后自动创建,我们只需执行添加用户到 Docker 用户组的操作【可跳过步骤】:

sudo gpasswd -a shiyanlou docker

添加用户到一个用户组中的方式有很多,例如我们还可以使用如下命令【可跳过步骤】:

sudo usermod -aG docker shiyanlou

在添加成功后,我们还需要重新打开一个 shell 修改才能生效。这时可以尝试打开一个新的终端或者使用如下命令【可跳过步骤】:

sudo su shiyanlou

启动 Docker 服务

使用阿里云镜像源

国内拉取 Docker Hub 的速度非常慢,好在阿里云提供了镜像加速器。

首先,我们需要编辑 /etc/docker/daemon.json 文件【可跳过步骤】:

sudo vim /etc/docker/daemon.json

然后加入如下内容【可跳过步骤】:

{
  "registry-mirrors": ["https://n6syp70m.mirror.aliyuncs.com"]
}

修改之后,需要重启 Docker 服务,让修改生效。使用如下命令【可跳过步骤】:

sudo service docker restart

Hello world

在安装之后,我们可以通过运行一个 hello-world 的镜像来验证 Docker CE 是否被正确的安装,使用如下命令:

docker run hello-world

该命令会下载一个名为 hello-world 的镜像并运行于一个容器中。当这个容器运行时,会输出一些信息并退出:

此处输入图片的描述

如上图中标注出的提示信息所示,提示我们安装正确。

实验总结

  • Docker 基本概念
  • 安装 Docker
  • Docker 运行 Hello World

本节实验主要讲解了 Docker 的相关概念以及如何安装 Docker。

实验2 Docker容器管理

实验介绍

容器是 Docker 的一个基本概念,每个容器中都运行一个应用并为该应用提供完整的运行环境。本实验将详细学习 Docker 容器的创建,运行管理操作。

知识点

  • 容器命令基础
  • 创建容器
  • 容器的启动与停止
  • 容器中进程的暂停与恢复
  • 查看容器列表
  • 连接容器
  • 查看元数据
  • 显示进程信息
  • 查看文件修改
  • 容器中执行命令
  • 删除容器

Docker 命令

除了之前学习过的查看 Docker 版本信息之外,在 Docker 的命令组中还有一个较为常用的命令,查看系统的一些相关信息:

docker system info

# 或者使用命令
docker info

运行截图如下所示:

图片描述

Docker 帮助

我们可以直接通过 help 或者使用 man 手册的方式查看相关命令的详细说明,例如我们直接使用如下命令:

docker --help

我们可以看到运行结果如下图所示。如果之前有学习过 Docker 相关知识的同学,可能会发现一些不一样的地方。即下图中标出的 Management Commands 和 Commands。在 1.13 版本之前,Docker 并没有 Mangement Commands。

图片描述

Management Commands

在 Docker 1.12 之前,大约有四十个左右的顶级命令,这些命令没有经过任何组织,显得十分混乱,对于新手来说,学习它们并不轻松。Docker 1.13 之后,将命令进行分组,就得到如上图中所示的 Management Commands。例如经常使用的容器的一些相关命令:

# 使用 Commands 分组中的命令创建一个新的容器
docker create
# 使用 Management Commands 分组中的命令创建一个新的容器
docker container create

# 显示容器列表
docker ps
docker container ls

# 在一个新的容器中运行一个命令
docker run
docker container run

如上所示,对于新的命令而言相比于旧命令明显更具有可读性。并且在实验环境中的 Docker 版本以及最新版本中两者都是有效的命令,所以在这里我们将一些常用的命令,及其对应的 Management Commands 命令都列举出来,方便大家在后续的学习过程中可以进行参考。

此处输入图片的描述

命令选项

命令的选项有以下几种:长选项、短选项、复合选项、无选项。

我们以 docker container ls,即 docker ps,它的作用是查看容器。

可以先输入以下命令,获得提示信息:

docker container ls --help

命令执行后的结果如下:

图片描述

可以看到图中的 -a--all 选项,他们的作用都是显示所有容器(包括未运行的容器)。短选项是以一个 - 开头,其后紧跟上一个字母或数字,比如 -a。长选项是以两个 - 开头,其后跟一串单词,比如 --all

# 使用短选项
docker container ls -a
# 使用长选项
docker container ls --all

那什么是复合选项呢?

当我们要使用多个短选项时,比如使用 -a-q。从图中可以看到,这个选项只会显示容器的 ID,原本命令应该是 docker container ls -a -q,这时我们可以简写为 docker container ls -aq,这里的选项 -aq 就是复合选项,它是 -a-q 的复合。

对于 docker container ls 这个命令,我们还可以不使用选项。没有选项时,输出正在运行的容器。关于 docker container ls 在本实验后面的内容中还会详细介绍,我们只需要记住它的简单功能就可以了。

容器生命周期管理

首先,我们回顾在上一节使用到的 docker container run hello-world 命令,该命令的格式为:

# Management Commands
docker container run [OPTIONS] IMAGE [COMMAND [ARGS...]]

# 旧命令格式如下:
docker run [OPTIONS] IMAGE [COMMAND [ARGS...]]

上述两个命令的作用相同,docker container run 命令会在指定的镜像 IMAGE 上创建一个可写的容器,因为镜像是只读的。然后,开始运行指定的命令 [COMMAND [ARGS...]]

一些常用的配置项为:

  • -i--interactive, 交互模式。
  • -t--tty, 分配一个 pseudo-TTY,即伪终端。
  • -d--detach,在后台运行容器并输出容器的 ID 到终端。
  • --rm 在容器退出后自动移除。
  • -p 将容器的端口映射到主机。
  • -v--volume, 指定数据卷。

这些配置项对于上述的两个命令(Management Commands 和旧命令)都是有效的,在后面的内容不会再特殊说明。关于该命令的详细参数较多,并且大多数参数在很多命令中的意义是相同的,将在后面的内容中使用到时进行相应的介绍。

我们指定 busybox 镜像,然后运行命令 echo "hello shiyanlou" 命令,如下所示:

docker container run \
    busybox echo "hello shiyanlou"

图片描述

在上图中,我们可以看到该命令执行的过程:

  • 对于指定镜像而言,首先会从本地查找,找不到时将会从镜像仓库中下载该镜像
  • 镜像下载完成后,通过镜像启动容器,并运行 echo "hello shiyanlou" 命令,输出运行结果之后退出。

在执行命令之后,容器就会退出,如果我们需要一个保持运行的容器,最简单的方法就是给这个容器一个可以保持运行的命令或者应用,比如 bash,例如我们在 ubuntu 容器中运行 /bin/bash 命令:

docker container run \
    -i -t \
    ubuntu /bin/bash

对于交互式的进程而言(例如这里的 bash),必须将 -i-t 参数一起使用,才能为容器进程分配一个伪终端,通常我们会直接使用 -it

图片描述

如上所示,我们已经进入到分配的终端中了,这时如果我们需要退出 bash,可以使用以下两种方式,它们的效果完全不同:

  • 直接使用 exit 命令,这时候 bash 程序终止,容器进入到停止状态。
  • 使用组合键退出,容器仍然保持运行的状态,可以再次连接到这个 bash 中,组合键是 ctrl + pctrl + q。即先同时按下 ctrlp 键,再同时按 ctrlq 键,就可以让容器在后台运行。

对于刚刚创建创建的容器,我们输入 exit 退出容器,再使用 docker container ls -a 查看容器的状态,结果如下图所示:

图片描述

然后我们新建一个容器,使用第二种方式退出,创建的方式和刚刚相同。使用 docker container ls -a 命令查看容器的状态,可以看到该容器仍然处于运行中:

图片描述

实际使用中,我们不必创建容器之后使用组合键 ctrl + pctrl + q 来让容器进入后台运行,通常以 -d 参数指定容器以后台模式运行:

# 以后台模式创建并运行一个容器
docker container run \
    -i -t -d \
    ubuntu /bin/bash

使用 docker container ls -a 命令查看容器的状态,可以看到这个容器已经在后台运行。

图片描述

创建容器

严格意义上来讲,docker run 命令的作用并不是创建一个容器,而是在一个新的容器中运行一个命令。而用于创建一个新容器的命令为

# Management Commands
docker container create [OPTIONS] IMAGE [COMMAND] [ARG...]

# 旧的命令格式如下:
docker create [OPTIONS] IMAGE [COMMAND] [ARG...]

该命令会在指定的镜像 IMAGE 上创建一个可写容器层,并 准备 运行指定的命令。需要着重强调的是,这里是准备运行,并不是立即运行。即该命令只创建容器,并不会运行容器。

一些常见的配置项如下所示:

  • --name 指定一个容器名称,未指定时,会随机产生一个名字
  • --hostname 设置容器的主机名
  • --mac-address 设置 MAC 地址
  • --ulimit 设置 ulimit 选项

关于上述提到的 ulimit,我们可以通过其对容器运行时的一些资源进行限制。ulimit 是一种 Linux 系统的内建功能,一些简单的描述,可以参考 通过 ulimit 改善系统性能 ,而对于在下面我们将要设置的部分值的含义,可以参考 How to set ulimit values

除此之外,关于创建容器,我们还可以设置有关存储和网络的详细内容,将会在下一节的内容中进行介绍。

下面来看一个实例,我们指定容器的名字为 shiyanlou01,主机名为 shiyanlou01,设置相应的 MAC 地址,并通过 ulimit 设置最大进程数(1024:2048 分别代表软硬资源限制,详细内容可以参考上面的链接),使用 ubuntu 的镜像,并运行 bash

docker container create \
    --name shiyanlou01 \
    --hostname shiyanlou01 \
    --mac-address 00:01:02:03:04:05 \
    --ulimit nproc=1024:2048 \
    -it ubuntu /bin/bash

图片描述

此时,容器创建成功后,会打印该容器的 ID,这里需要简单说明一下,在 Docker 中,容器的标识有三种比较常见的标识方式:

  • UUID 长标识符,例如 1f6789f885029dbdd4a6426d7b950996a5bcc1ccec9f8185240313aa1badeaff
  • UUID 短标识符,从长标识符开始,只要不与其它标识符冲突,可以从头开始,任意选用位数,例如针对上面的长标识符,可以使用 1f1f678 等。
  • Name 最后一种方式即是使用容器的名字。

在容器创建成功后,我们可以查看其运行状态,使用如下命令:

# 此时该容器并未运行,需要使用 -a 参数
docker container ls -a

图片描述

新创建的容器的状态 (STATUS) 为 Created,并且其容器名被设置为对应的值,而之前没有指定名字的容器都是随机生成的名字。

启动容器

容器的启动命令为:

# Management Commands
docker container start [OPTIONS] CONTAINER [CONTAINER...]

# 旧的命令格式如下:
docker start [OPTIONS] CONTAINER [CONTAINER...]

对于上面我们创建的容器 shiyanlou01 而言,此时处于 Created 状态,需要使用如下命令启动它:

docker container start shiyanlou01

图片描述

此时,运行一个容器我们分成了两个步骤,即创建和启动,使用的命令如下【可跳过步骤】:

# 创建
docker container create \
    --name shiyanlou01 \
    --hostname shiyanlou01 \
    --mac-address 00:01:02:03:04:05 \
    --ulimit nproc=1024:2048 \
    -it ubuntu /bin/bash

# 启动
docker container start shiyanlou01

上述的两个命令如果我们使用 docker container run 只需要一步即可,即此时 run 命令同时完成了 createstart 操作【可跳过步骤】:

docker container run \
    --name shiyanlou01 \
    --hostname shiyanlou01 \
    --mac-address 00:01:02:03:04:05 \
    --ulimit nproc=1024:2048 \
    -it ubuntu /bin/bash

除此之外,上面的 run 命令还完成一些其它的操作,例如没有镜像时会 pull 镜像,使用 -it 参数时完成了 attach 操作(后面会学习该操作),使用 --rm 参数在容器退出后还会完成 container rm 操作。run 命令是一个综合性的命令,如果能够熟练的使用它可以简化很多步骤。

停止容器

停止容器可以使用如下命令:

# Management Commands
docker container stop CONTAINER [CONTAINER...]

# 旧的命令格式如下:
docker stop CONTAINER [CONTAINER...]

刚刚我们启动了一个名为 shiyanlou01 的容器,并且进入了交互式界面,这里我们先同时按下 ctrlp 键,再同时按 ctrlq 键,让这个容器进入到后台运行。

此时我们使用 docker container ls -a 命令查看容器的状态,从下图可以看到,容器正在运行。输入 docker container stop shiyanlou01,docker 返回了容器的 UUID,再次使用 docker container ls -a 命令查看容器的状态,发现容器已经停止运行了。

图片描述

重启容器

重启容器可以使用如下命令:

# Management Commands
docker container restart CONTAINER [CONTAINER...]

# 旧的命令格式如下:
docker restart CONTAINER [CONTAINER...]

这里我们重启刚刚停止的容器 shiyanlou01,然后再使用 docker container ls -a 命令查看容器,从下图中可以看到,容器又处于运行状态了。

图片描述

暂停进程

暂停容器中进程的命令格式如下:

# Management Commands
docker container pause CONTAINER [CONTAINER...]

# 旧的命令格式如下:
docker pause [OPTIONS] CONTAINER [CONTAINER...]

这里还是使用 shiyanlou01 这个容器,执行下述命令。

docker container pause shiyanlou01
docker container ls -a

如下图所示,容器被暂停后,此时处于 Paused 状态。

图片描述

恢复进程

恢复容器中进程的命令格式如下:

# Management Commands
docker container unpause CONTAINER [CONTAINER...]

# 旧的命令格式如下:
docker unpause [OPTIONS] CONTAINER [CONTAINER...]

使用 shiyanlou01 这个容器,执行下述命令。

# 恢复容器中的进程
docker container unpause shiyanlou01

# 查看容器列表
docker container ls -a

如下图所示,容器恢复后,此时处于运行状态。

图片描述

查看容器列表

查看容器列表可以使用如下命令:

# Management Commands
docker container ls [OPTIONS]

# 旧的命令格式如下:
docker ps [OPTIONS]

在使用命令时,我们可以使用一些可选的配置项 [OPTIONS]

  • -a 显示所有的容器。
  • -q 仅显示 ID
  • -s 显示总的文件大小。

默认情况下,直接使用该命令仅显示正在运行的容器,如下所示:

docker container ls

图片描述

我们可以使用 -a 参数,来显示所有的容器,并加上 -s 选项,显示大小,命令如下:

docker container ls -a -s

图片描述

连接到正在运行中的容器

上述操作我们启动的容器运行于后台,所以,我们需要使用 attach 操作将本地标准输入输出流连接到一个运行中的容器,命令格式为:

# Management Commands
docker container attach [OPTIONS] CONTAINER

# 旧的命令格式如下:
docker attach [OPTIONS] CONTAINER

如下示例,我们启动容器,并使用连接命令:

docker container start shiyanlou01

docker container attach shiyanlou01

连接到容器后,查看相应的主机名(输入 hostname 命令)和 Mac 地址(输入 ifconfig 命令),可以判断我们连接到了刚刚创建的容器。

图片描述

如果提示无 ifconfig 命令,可以在容器中执行 apt update && apt install net-tools 安装。

查看容器的元数据

查看容器的详细信息(即元数据)可以使用如下命令:

# Management Commands
docker container inspect [OPTIONS] CONTAINER [CONTAINER...]

# 旧的命令格式如下:
docker inspect [OPTIONS] CONTAINER [CONTAINER...]

例如我们查看刚刚创建的容器的详细信息就可以使用以下命令:

# 使用容器名
docker container inspect shiyanlou01

# 使用 ID ,因生成的 ID 不同,需要修改为相应的 ID
docker container inspect 1f6789

docker container inspect 1f6

例如,我们查看刚刚创建的名为 shiyanlou01 的容器的 MAC 地址,就可以使用如下命令:

docker container inspect shiyanlou01 | grep "MacAddress"

图片描述

容器日志管理

获取容器的输出信息可以使用如下命令:

# Management Commands
docker container logs [OPTIONS] CONTAINER

# 旧的命令格式如下:
docker logs [OPTIONS] CONTAINER

常用的配置项有:

  • -t--timestamps 显示时间戳
  • -f 实时输出,类似于 tail -f

这里我们重新运行一个容器,让它在后台执行一个不断输出的脚本,命令如下:

docker container run \
    --name shiyanlou02 \
    -i -t -d \
    ubuntu /bin/sh -c "while true; do echo hello shiyanlou; sleep 2; done"

“while true; do echo hello world; sleep 2; done” 是一个脚本,它的功能是每 2 秒输出一次 “ hello shiyanlou ”,此处不讲解语法构成,感兴趣的同学可以自己了解相关知识。

如下所示,我们查看刚刚创建的容器的日志,使用如下命令:

docker container logs -tf shiyanlou02

我们可以使用组合键 Ctrl + c 来结束日志跟踪,其结果如下图所示。

图片描述

显示容器中的进程信息

除了获取日志之外,还可以显示运行中的容器的进程信息,命令格式如下:

# Management Commands
docker container top CONTAINER

# 旧的命令格式如下:
docker top CONTAINER

例如查看刚刚创建的容器的进程信息:

docker container top shiyanlou02

图片描述

需要注意的是,该命令对于并未运行的容器是无效的。

查看文件修改

查看相对于镜像的文件系统来说,容器中做了哪些改变,可以使用如下命令:

# Management Commands
docker container diff CONTAINER

# 旧的命令格式如下:
docker diff CONTAINER

我们先在 shiyanlou01 中创建一个文件,执行以下命令:

# 重启容器
docker container restart shiyanlou01

# 连接到容器中
docker container attach shiyanlou01

进入容器中后,创建一个文件,并退出:

# 创建一个文件
touch ~/a.txt

现在我们在 shiyanlou01 容器中创建一个文件,Ctrl+p Ctrl+q 退出当前容器,使用 docker container diff shiyanlou01 命令查看到相应的修改:

图片描述

容器中执行命令

除了使用 docker container run 执行命令之外,我们还可以在一个运行中的容器中执行命令,使用如下格式:

# Management Commands
docker container exec [OPTIONS] CONTAINER COMMAND [ARG...]

# 旧的命令格式如下:
docker exec [OPTIONS] CONTAINER COMMAND [ARG...]

例如,我们在 shiyanlou01 容器中执行 echo "test_exec" 命令,就可以使用如下命令:

# 重启容器
docker container restart shiyanlou01

# 执行命令
docker container exec shiyanlou01 echo "test_exec"

图片描述

删除容器

删除容器的命令:

# Management Commands
docker container rm [OPTIONS] CONTAINER [CONTAINER...]

# 旧的命令格式如下:
docker rm [OPTIONS] CONTAINER [CONTAINER...]

需要注意的是,在删除容器后,在容器中进行的操作并不会持久化到镜像中。

如果想删除之前创建的所有容器,可以使用以下命令:

docker container rm -f $(docker container ls -aq)

docker container ls -aq 会输出所有容器的 UUID ,rm 命令可以根据 UUID 去删除容器。这里用来选项 -f 是因为还有在运行中的容器,所以需要强制删除。ls 列出的 UUID 传递给 rm 进行删除。

图片描述

如果 docker 版本为 1.13 及以上版本,还可以更方便的 prune。

docker container prune [OPTIONS]

常用的配置项有:

  • -f--force 跳过警告提示
  • --filter 执行过滤删除

如直接删除所有停止的容器:

docker container prune -f

实验总结

本节实验中我们学习了以下内容:

  • 容器命令基础
  • 创建容器
  • 容器的启动与停止
  • 容器中进程的暂停与恢复
  • 查看容器列表
  • 连接容器
  • 查看元数据
  • 显示进程信息
  • 查看文件修改
  • 容器中执行命令
  • 删除容器

请务必保证自己能够动手完成整个实验,只看文字很简单,真正操作的时候会遇到各种各样的问题,解决问题的过程才是收获的过程。

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇