当前位置: 首页 > 科技观察

Linux上的Docker入门

时间:2023-03-18 12:27:47 科技观察

为初学者提供的基本Docker命令指南。这个详细的Docker教程涵盖了核心Docker命令,例如如何创建新容器、运行容器、删除容器等。此外,本教程还介绍了如何从现有容器构建您自己的Docker映像,以及如何删除容器和映像。话不多说,下面开始介绍Docker的基本用法。Docker安装步骤Docker可以安装在大多数现代Linux操作系统上。如果你还没有安装Docker,请参考以下步骤:在AlmaLinux、CentOS、RockyLinux上安装DockerEngine和DockerCompose如何在Ubuntu上安装Docker和DockerCompose什么是Docker镜像和Docker容器?在开始使用Docker之前,让我解释一下什么是Docker镜像和Docker容器。Docker镜像是一个描述容器如何运行的文件,Docker容器是Docker镜像运行或终止的一个阶段。容器与主机上的其他文件隔离。当我们运行Docker容器时,它使用由Docker镜像提供的隔离文件系统。Docker镜像包含运行应用程序所需的一切-所有依赖项、配置、脚本、二进制文件等。该镜像还包含容器所需的其他配置项,例如环境变量、默认运行的命令和其他元数据。在Linux上开始使用Docker下面的所有步骤都已经在Ubuntu22.04、20.04和18.04LTS服务器版本上进行了测试。后续部分中提供的步骤适用于所有Linux平台。例如,相同的命令可以在基于RHEL的系统(如AlmaLinux)上运行。1.搜索Docker镜像我们可以从Docker官方库Dockerhub获取镜像,也可以自己制作镜像。有些人可能不知道Dockerhub是一个在线集中存储库,Docker用户可以在其中构建、测试然后保存他们的Docker映像。Dockerhub拥有数以万计的Docker镜像,并且这个数字每天都在增长。您可以使用“dockersearch”命令从命令行搜索任何Docker镜像。比如搜索基于AlpineLinux的Docker镜像,运行:Output:SearchDockerImages搜索基于Ubuntu的镜像,运行:也可以搜索其他任意应用,比如Nginx,如下:Dockerhub有各种镜像.您可以在Dockerhub上找到各种预构建的Docker映像,例如操作系统、应用程序或多个应用程序的组合(例如LAMP堆栈)。如果您要查找的内容不存在,您还可以构建一个映像并通过Docker集线器将其提供给其他人,或者仅供您自己使用。2.下载Docker镜像从终端运行以下命令以下载Ubuntu操作系统的Docker镜像:上述命令将从Dockerhub下载最新的Ubuntu镜像。输出:您还可以使用以下命令下载特定版本的Ubuntu映像:Docker允许我们下载任何映像并在该映像上创建容器,而不管主机的操作系统如何。例如下载Alpine系统的镜像,运行:DownloadDockerImages3,列出Docker镜像所有下载的Docker镜像存放在路径/var/lib/docker。要查看所有已下载的Docker镜像,请运行:输出:列出Docker镜像正如您在上面看到的,我已经下载了三个Docker镜像——Ubuntu最新版、Ubuntu20.04和AlpineLinux。现在,让我们看看如何从下载的镜像启动或运行容器。4.运行Docker容器有两种方式我们可以启动一个容器——使用Docker镜像的标签TAG或者镜像IDImageID。标签是指一张特定的图片快照,图片IDImageID是该图片对应的唯一标识码。你可以查看下面的截图:DockerImageTagandID从上面的浮雕可以看出,标签是最新的,是20.04。27941809078c是最新的UbuntuDocker镜像的镜像ID,20fffa419e3a是Ubuntu20.04的Docker镜像的镜像ID,e66264b98777是最新的AlpineDocker镜像的镜像ID。4.1.运行带标签的容器下载选定的Docker镜像后,运行以下命令启动Docker容器并通过其标签进行连接。或者,在这里,-t:在Ubuntu容器内分配一个伪终端。-i:允许我们通过从容器获取标准输入(STDIN)来创建交互式连接。ubuntu:latest:带有最新标签的UbuntuDocker镜像。/bin/bash:新容器的BASHshell。这是可选的。如果不添加外壳,则会为容器分配一个默认外壳。启动容器后,会自动进入容器的shell(命令行):RunContainersUsingTag基于最新Ubuntu镜像的容器就此启动。所有新容器都有一个名称和一个唯一ID。从上面的输出可以看出,Ubuntu容器ID是2f2a5b826762。我们稍后会看到在哪里可以找到容器的名称。现在您可以在容器内工作了。当您在容器内完成工作后,您可以返回到主机操作系统(在我的例子中是Ubuntu22.04LTS)上的终端,而无需关闭容器(来宾计算机)。4.2.从正在运行的容器分离使用CTRL+P,然后使用CTRL+Q从正在运行的容器分离(无需关闭)。您现在回到了原来的主机终端窗口。请注意,容器仍在后台运行,我们没有将其关闭。4.3.使用镜像ID运行容器另一种启动容器并连接到它的方法是使用镜像ID,像这样:这里,20fffa419e3a-镜像ID按CTRL+P和CTRL+Q可以脱离当前容器,回到宿主系统的终端。我们只是从容器中分离出来,但不要让它停止。容器仍在后台运行。4.4.在分离模式下运行容器在之前的回顾中,我们启动了一个容器并立即连接到它。然后当容器中的工作完成后,我们脱离容器。您还可以以分离模式启动容器(不自动附加)。后台运行一个容器,输入命令:输出结果:上面输出结果的前12个字符代表容器的ID。通过dockerps命令,您可以验证容器是否正在运行:RunContainersInBackground从上面的输出可以看到,我们已经创建了一个Alpine容器,但还没有连接它。如果要连接进去,很简单,运行:5.查看正在运行的容器查看正在运行的容器,运行如下命令:输出:这里查看正在运行的容器,f7e04eed577e来自镜像2f2a5b826762创建的Ubuntu容器的ID。并且,Brave_mclean是这个容器的名称。2f2a5b826762是从镜像“ubuntu:latest”创建的Ubuntu容器的ID。而且,hungry_leavitt是这个容器的名称。当一个新的容器被创建时,它会被赋予一个唯一的ID和名称,这样我们就可以通过它的ID和名称连接到它。注意:请注意容器ID和Docker镜像ID是不同的。要列出所有可用的(正在运行或已停止的)容器,请运行:6.断开或连接正在运行的容器首先,使用dockerps命令查找容器的ID。然后,运行dockerattach命令附加到正在运行的容器。例如,像下面这样,我想连接到ID为f7e04eed577e的容器:您也可以使用它的名称连接到容器。您现在已登录容器。要从容器中分离,只需按CTRL+P,然后按CTRL+Q。7.启动、重启、暂停和终止容器您可以使用容器名称或ID来启动、重启、暂停或终止Docker容器。首先,使用dockerps-a命令查找容器的名称或ID。查找容器ID和名称现在,通过使用dockerstart命令,加上名称或ID,你可以启动一个容器,像这样:用空格分隔,你可以启动多个容器,像这样:优雅要重新启动正在运行的容器,运行:暂停正在运行的容器:恢复暂停的容器:阻塞一个容器,直到所有其他容器都停止:我们可以通过使用容器的名称或容器ID轻松终止容器。如果您已经在容器的shell中,则可以通过运行以下命令非常简单地终止它:您还可以使用以下命令从Docker主机系统终止(关闭容器)容器:退出多个容器,如下所示。退出容器后,通过列出所有容器命令确保它确实终止了:8.强制关闭Docker容器dockerstop命令可以优雅地关闭正在运行的容器。有时,您可能会卡在一个无响应的容器中,或者您想强行关闭容器。要通过向其发送SIGKILL强制关闭正在运行的容器,请运行:9.关闭容器后自动删除容器也许您想测试一个容器,然后在容器中完成工作后将其删除。如果是这样,使用--rm标志在关闭后自动删除容器:当您退出容器时,它将自动删除。自动删除容器从上面的结果可以看出,我首先创建了一个新的Debian容器。当我退出容器时,它会自动删除。dockerps-a命令的输出显示Debian容器现在不存在。10.给容器命名如果你再看一下前面命令的输出,当你启动一个容器时,每个容器都会被赋予一个随机的名字。如果您不为容器命名,Docker会自动为您命名。现在看下面的例子:从上面的结果可以看出,虽然我创建了两个使用相同Docker镜像的容器,但是它们的ID和名称不同。如果您想给容器一个常量名称,请使用--name标志,如下所示:上面的命令将在分离模式下创建一个名为ostechnix_alpine的新容器。让我们看一下当前运行的容器列表:输出:为容器分配名称注意上面输出中第一个容器的名称吗?顺便说一下,我们为这个容器指定了一个自定义名称(即ostechnix_alpine)。为容器指定自定义名称给我们带来了其他好处。只需查看容器的名称,我们就可以轻松确定该容器中安装了什么。11.构建自定义Docker镜像Docker不仅仅是下载和使用现有容器。您还可以创建自己的自定义Docker映像。现在我们启动一个Ubuntu容器:现在,您将进入容器的shell。然后,在容器内,你可以安装任何软件或做任何你想做的事。例如,我们在容器中安装ApacheWeb服务器。同样,在容器中,您可以根据需要安装和测试软件。完成后,从容器分离(不要退出)回到主机系统的shell。不要终止或关闭容器。使用CTRL+P然后CTRL+Q脱离容器,这不会关闭容器。在Docker主机的终端中,运行以下命令以查找容器ID:最后,要创建当前正在运行的容器的Docker映像,请使用以下命令:输出:此处为377e6d77ebb5–Ubuntu容器的ID。ostechnix–创建容器的用户名。ubuntu_apache–用户ostechnix创建的Docker镜像的名称。现在让我们看看是否已经创建了新的Docker镜像,使用以下命令:系统。现在您可以从这个新的Docker镜像创建行容器,使用之前的命令:12.删除容器当您在Docker容器中完成所有开发后,如果您不再需要它们,您可以删除它们。为此,首先我们需要终止(关闭)正在运行的容器。使用此命令查看正在运行的容器:输出:使用其ID终止正在运行的容器:现在,使用此命令删除容器:另外,如果不再需要,请关闭并删除所有容器。一个一个地删除多个容器可能是一项乏味的工作。因此,我们可以一次性删除所有停止的容器,运行:按Y回车,这些容器就会被删除。删除容器命令仅在最新版本中有效。使用以下命令验证是否已删除所有容器:如果您没有看到任何结果,则所有容器均已删除。13.删除Docker镜像请记住,在删除所有镜像之前,首先要删除从这些镜像创建的所有容器。删除容器后,您可以删除不需要的Docker镜像。列出所有下载的Docker镜像:输出:如上所示,我们的主机上有5个Docker镜像。使用图像ID删除它们:输出:同样,删除所有其他Docker图像。Deleteallunrunningcontainer,allmirrors,builtcaches,allnetworks,运行:使用这个命令时要小心,它会删除所有未使用的容器,网络,镜像(包括pendingdangling和unusedunreferenced)DeleteEverythingInDocker默认情况下,即使当前没有容器使用磁盘卷,为了防止重要数据被删除,磁盘卷不会被删除。如果要删除所有内容,包括分配的卷,请使用--volumes标志。Docker问题摘要如果正在运行或已停止的容器正在使用Docker映像,则Docker将不允许您删除它们。例如,当我试图从以前的Ubuntu服务器中删除ID为b72889fa879c的Docker镜像时。我收到以下错误:这是因为您要删除的Docker映像正在被另一个容器使用。那么,我们先查看正在运行的容器,使用命令:输出结果:Showrunningdockercontainers哦,没有正在运行的容器。我们正在查看所有容器(正在运行和已停止),使用以下命令:输出:显示正在运行和已停止的docker容器您可以看到仍然有使用Docker映像之一的已停止容器。所以,让我们先删除所有容器。例如:同上,将对应容器的ID全部删除。删除所有容器后,移除Docker镜像。例如:就这么简单。现在使用以下命令检查主机上是否还有任何其他docker映像:您现在应该不再有任何docker映像。总结在这个全面的Docker入门教程中,我们解释了Docker的基本操作,例如创建、运行、搜索、删除容器以及从Docker映像构建您自己的容器。此外,我们还解释了如何在不再需要时删除Docker容器和图像。希望您现在对使用Docker有了基本的了解。