作者:chen_h
微信号 & QQ:862251340
微信公众号:coderpai
docker系列学习(一):整体认识
docker系列学习(二):Docker + Flask 例子
docker系列学习(三):基础命令
这节我们来学习尝试通过 docker 客户端程序执行基本命令吧。
重新收集 docker 工具集包含:
现在,当我们使用 docker 客户端时,发生的事情是命令被发送到 Docker 守护进程,然后 Docker 守护程序解释该命令并为你执行它。
docker 客户端可以理解几个命令。在这个动手实践的步骤中,我们将看一下在运行 docker 时主要使用的各种命令。
要在任何时间点获得帮助,请尝试一下命令:
docker help
这将为你提供 docker 客户端可以理解的完整命令列表。花一些时间来完成这个。大多数命令都是不言自明的,是处理容器时要使用的典型命令。
在任何时候,如果你需要任何 COMMAND 的更多帮助,你可以通过以下方式获得:
docker COMMAND --help
接下来的几节将介绍各种命令,你应该尝试每一个命令。在尝试任何此操作之前,请确保已经启动 docker。你可以访问终端并提供以下命令。
docker version
这将显示当前的 docker 版本。
有趣的事实:Docker 是用 Go 语言编写的。该语言类似于 C 语言,并且一直是编写基础结构软件的开发人员的最爱。现在就拿起来吧!
docker info
这将向你显示有关操作系统的几条信息。
让我们了解我们现在在做什么。我们在 windows 机器上,我们希望运行一些 Unix 命令来熟悉它们。
这就是 Docker 现在的步骤:
让我们检查一些步骤,即我们将运行的 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]
让我们通过关注列来了解输出:
重申的第一列是 Docker 镜像的名称。这是一个唯一的名称,你必须将此名称用于下面给出的一些命令。
所以,假设我们对 busybox 镜像名称没问题,现在想要创建该镜像的实例(container)。要做到这一点,我们需要做的就是使用 docker runcommand,如下所示:
docker run -t -i busybox
run 命令做了一些有趣的事情,这将有助于你理解我们之前看到的 docker 架构。run 命令执行以下操作:
注意:如果镜像存在于本地,它将直接运行容器。
成功启动容器之后,你将进入 busybox 的 bash shell。为了让 windows 用户保持简单,我们现在登录到 busybox 容器并处于命令提示符下,如下所示:
你可以运行一些简单的命令来尝试一下:
请注意提示你现在处于容器内,你只提供 exit 命令即可退出容器。
当你提供 exit 命令时,容器已经停止运行。要验证这一点,你可以给出另一个命令,如下所示:
docker ps
这将为你提供所有正在运行的容器的列表。你将从输出中注意到没有容器正在运行。
试试以下内容:
如果要查找以前运行但未处于已终止转台的容器,可以使用 docker ps 命令的 --all 标志,试试看:
此时,如果你想知道本地 docker 设置中已存在哪些镜像,请尝试以下命令:
docker images
你会发现它列出了 busybox 镜像。
注意输出给出的列(下面给出了2个重要的列):
REPOSITYORY 列很明显,它是 image 本身的名称。TAG 非常重要,你会发现 TAG 值是最新的。但我们没有给出任何迹象。
我们再来启动命令:
docker run -t -i busybox
我们只指定了名称,默认情况下,如果只指定了 image 名称,则默认情况下会获取最新的镜像。在没有你提供的显示标记值的情况下,标记值 latest 是docker 客户端隐式使用的。
换句话说,你可以将其指定为:
docker run -t -i busybox:latest
同样,很明显 docker hub 中存在多个版本的镜像,我们将在一段时间内看到所有这些,但是现在,请记住,我们可以说 busybox 有以下版本:
我们可以根据需要提及 TAG 版本:
$ docker run -t -i busybox:1.0
$ docker run -t -i busybox:2.0
执行 docker ps 命令时,你注意到没有正在运行的容器。这是因为你退出了容器。这意味着只要父进程正在运行,容器就会存在。
现在,让我们做一个 docker ps --all 命令。这应该会显示几分钟前由你启动的容器。对于例如在我的系统上,我看到以下内容:
请注意以下列:
要启动已经停止的容器,可以使用 docke start 命令。你需要做的就是讲 container ID 提供给 docker start 命令。
因此,查看 docker ps --all 输出并记下 CONTAINER_ID。在我的机器上,docker ps --all 命令给我以下输出。
我记下了 CONTAINER_ID,即 ab0e37214358 ,然后给出以下命令:
docker start ab0e37214358
请注意 -i 进入交互模式。你会发现,如果一切正常,container 将重新启动,你又回到了提示符,如下所示:
键入 exit 并从容器中退出,我们回到了没有容器运行的地方。
现在,是时候有趣的事情来帮助我们理解更多的命令。我们将继续围绕 busybox image 的示例。
首先,我们将在没有 -i (交互式)模式的情况下重新启动容器。
提供一下命令:
docker start ab0e37214358
ab0e37214358
我们得到的唯一输出是 CONTAINER ID。
刚刚发生的事情是 container 已经启动,而且所有 docker 客户端都已经完成了回收容器 ID。
给出以下命令来检查当前正在运行的容器(现在该命令应该是你熟悉的):
docker ps
这位我们提供了 container 正在运行的输出,检查 STATUS 列,你会发现它表示它已经启动。
我们可以通过 docker attach 命令附加到正在运行的 container 。让我们依附于此:
docker attach ab0e37214358