docker系列学习(三):基础命令

作者:chen_h
微信号 & QQ:862251340
微信公众号:coderpai


docker系列学习(一):整体认识

docker系列学习(二):Docker + Flask 例子

docker系列学习(三):基础命令


这节我们来学习尝试通过 docker 客户端程序执行基本命令吧。

概括

重新收集 docker 工具集包含:

  • Docker 守护进程
  • Docker 客户端
  • Docker Hub

现在,当我们使用 docker 客户端时,发生的事情是命令被发送到 Docker 守护进程,然后 Docker 守护程序解释该命令并为你执行它。

docker 客户端帮助

docker 客户端可以理解几个命令。在这个动手实践的步骤中,我们将看一下在运行 docker 时主要使用的各种命令。

要在任何时间点获得帮助,请尝试一下命令:

docker help

这将为你提供 docker 客户端可以理解的完整命令列表。花一些时间来完成这个。大多数命令都是不言自明的,是处理容器时要使用的典型命令。

在任何时候,如果你需要任何 COMMAND 的更多帮助,你可以通过以下方式获得:

docker COMMAND --help

初始命令列表

接下来的几节将介绍各种命令,你应该尝试每一个命令。在尝试任何此操作之前,请确保已经启动 docker。你可以访问终端并提供以下命令。

docker version

这将显示当前的 docker 版本。

有趣的事实:Docker 是用 Go 语言编写的。该语言类似于 C 语言,并且一直是编写基础结构软件的开发人员的最爱。现在就拿起来吧!

docker info

这将向你显示有关操作系统的几条信息。

运行一些 Unix 命令

让我们了解我们现在在做什么。我们在 windows 机器上,我们希望运行一些 Unix 命令来熟悉它们。

这就是 Docker 现在的步骤:

  • 有一个有用的 Docker Image 叫做 busybox(就像我们有 hello-world 一样),有人已经为 Docker 创建了。
  • 我们将使用 docker run 命令来运行容器,即创建该镜像的实例。
  • 通过运行,我们想要做的是进入该容器并在哪里运行一些命令。

让我们检查一些步骤,即我们将运行的 docker 命令——并非所有步骤都是必要的。但我们这样做是为了让你熟悉这些命令。我们将在后续会话中更详细的查看其中一些命令。

docker search busybox

此命令将在联机 docker 注册表中搜索名为 busybox 的镜像。在我的机器上,显示的输出如下:

NAME                        DESCRIPTION                                     STARS               OFFICIAL            AUTOMATED
busybox                     Busybox base image.                             1423                [OK]                
progrium/busybox                                                            68                                      [OK]
hypriot/rpi-busybox-httpd   Raspberry Pi compatible Docker Image with a …   45                                      
radial/busyboxplus          Full-chain, Internet enabled, busybox made f…   20                                      [OK]
hypriot/armhf-busybox       Busybox base image for ARM.                     9                                       
arm32v7/busybox             Busybox base image.                             6                                       
yauritux/busybox-curl       Busybox with CURL                               5                                       
armhf/busybox               Busybox base image.                             4                                       
prom/busybox                Prometheus Busybox Docker base images           2                                       [OK]
p7ppc64/busybox             Busybox base image for ppc64.                   2                                       
armel/busybox               Busybox base image.                             2                                       
odise/busybox-curl                                                          2                                       [OK]
s390x/busybox               Busybox base image.                             2                                       
onsi/grace-busybox                                                          2                                       
i386/busybox                Busybox base image.                             2                                       
aarch64/busybox             Busybox base image.                             2                                       
arm64v8/busybox             Busybox base image.                             1                                       
spotify/busybox             Spotify fork of https://hub.docker.com/_/bus…   1                                       
ppc64le/busybox             Busybox base image.                             1                                       
concourse/busyboxplus                                                       0                                       
amd64/busybox               Busybox base image.                             0                                       
trollin/busybox                                                             0                                       
sou856099/busybox                                                           0                                       
cfgarden/garden-busybox                                                     0                                       
ggtools/busybox-ubuntu      Busybox ubuntu version with extra goodies       0                                       [OK]

让我们通过关注列来了解输出:

  • 第一列是 NAME,它为你提供 Docker 镜像的名称。
  • 第二列是 DESCRIPTION,很明显这意味着什么。
  • 下一栏是 STARS,如果你注意到与搜索词匹配的镜像列表,docker已按照加星的数量进行降序列出。这是镜像流行度的指标。通常我们会选择 STARS 最多的那个。

重申的第一列是 Docker 镜像的名称。这是一个唯一的名称,你必须将此名称用于下面给出的一些命令。

所以,假设我们对 busybox 镜像名称没问题,现在想要创建该镜像的实例(container)。要做到这一点,我们需要做的就是使用 docker runcommand,如下所示:

docker run -t -i busybox

run 命令做了一些有趣的事情,这将有助于你理解我们之前看到的 docker 架构。run 命令执行以下操作:

  • 它会检查你的本地存储库中是否已经有 busybox 镜像。
  • 如果没有找到(这将是第一次的情况),它将从 docker hub 中提取镜像。拉镜像到本地,这可能会需要花费一部分时间。
  • 一旦成功提取之后,它将存在于你的本地存储库中,因此可以根据此镜像创建容器。
  • 我们提供了 -i -t 作为 run 命令的参数,这意味着它是交互式的并 tty 输入。

注意:如果镜像存在于本地,它将直接运行容器。

成功启动容器之后,你将进入 busybox 的 bash shell。为了让 windows 用户保持简单,我们现在登录到 busybox 容器并处于命令提示符下,如下所示:

docker系列学习(三):基础命令_第1张图片

你可以运行一些简单的命令来尝试一下:

docker系列学习(三):基础命令_第2张图片

请注意提示你现在处于容器内,你只提供 exit 命令即可退出容器。

在这里插入图片描述

当你提供 exit 命令时,容器已经停止运行。要验证这一点,你可以给出另一个命令,如下所示:

docker ps

这将为你提供所有正在运行的容器的列表。你将从输出中注意到没有容器正在运行。

试试以下内容:

如果要查找以前运行但未处于已终止转台的容器,可以使用 docker ps 命令的 --all 标志,试试看:

获取 docker images 列表

此时,如果你想知道本地 docker 设置中已存在哪些镜像,请尝试以下命令:

docker images

你会发现它列出了 busybox 镜像。

注意输出给出的列(下面给出了2个重要的列):

  • REPOSITYORY
  • TAG

REPOSITYORY 列很明显,它是 image 本身的名称。TAG 非常重要,你会发现 TAG 值是最新的。但我们没有给出任何迹象。

我们再来启动命令:

docker run -t -i busybox

我们只指定了名称,默认情况下,如果只指定了 image 名称,则默认情况下会获取最新的镜像。在没有你提供的显示标记值的情况下,标记值 latest 是docker 客户端隐式使用的。

换句话说,你可以将其指定为:

docker run -t -i busybox:latest

同样,很明显 docker hub 中存在多个版本的镜像,我们将在一段时间内看到所有这些,但是现在,请记住,我们可以说 busybox 有以下版本:

  1. 镜像名称:busybox ,版本标签:1.0
  2. 镜像名称:busybox ,版本标签:2.0
  3. 镜像名称:busybox ,版本标签:3.0

我们可以根据需要提及 TAG 版本:

$ docker run -t -i busybox:1.0
$ docker run -t -i busybox:2.0

docker 容器

执行 docker ps 命令时,你注意到没有正在运行的容器。这是因为你退出了容器。这意味着只要父进程正在运行,容器就会存在。

现在,让我们做一个 docker ps --all 命令。这应该会显示几分钟前由你启动的容器。对于例如在我的系统上,我看到以下内容:

在这里插入图片描述

请注意以下列:

  • CONTAINER ID:已启动容器的唯一 ID。
  • IMAGE:这是你启动的镜像,即 busybox。
  • COMMAND:重要的东西在这里。这是启动容器时执行的默认命令。如果你回忆一下,当基于 busybox 镜像的容器启动时,它会引导你进入 Unix ,即 Shell 启动了。这正是 /bin 中的程序所做的。这应该给你一个提示,如果你想在 docker 镜像中打包自己的服务器,这里的默认命令通常是启动服务器并将其置于监听模式的命令。明白吗?

重新启动容器

要启动已经停止的容器,可以使用 docke start 命令。你需要做的就是讲 container ID 提供给 docker start 命令。

因此,查看 docker ps --all 输出并记下 CONTAINER_ID。在我的机器上,docker ps --all 命令给我以下输出。

在这里插入图片描述

我记下了 CONTAINER_ID,即 ab0e37214358 ,然后给出以下命令:

docker start ab0e37214358

请注意 -i 进入交互模式。你会发现,如果一切正常,container 将重新启动,你又回到了提示符,如下所示:

在这里插入图片描述

键入 exit 并从容器中退出,我们回到了没有容器运行的地方。

附加到正在运行的 container

现在,是时候有趣的事情来帮助我们理解更多的命令。我们将继续围绕 busybox image 的示例。

首先,我们将在没有 -i (交互式)模式的情况下重新启动容器。

提供一下命令:

docker start ab0e37214358
ab0e37214358

我们得到的唯一输出是 CONTAINER ID。

刚刚发生的事情是 container 已经启动,而且所有 docker 客户端都已经完成了回收容器 ID。

给出以下命令来检查当前正在运行的容器(现在该命令应该是你熟悉的):

docker ps

这位我们提供了 container 正在运行的输出,检查 STATUS 列,你会发现它表示它已经启动。

我们可以通过 docker attach 命令附加到正在运行的 container 。让我们依附于此:

docker attach ab0e37214358

你可能感兴趣的:(docker)