侧边栏壁纸
博主头像
MobotStone - 技术宅博主等级

行动起来,活在当下

  • 累计撰写 191 篇文章
  • 累计创建 80 个标签
  • 累计收到 1 条评论

目 录CONTENT

文章目录

Docker一通百通:10个关键命令带你解锁90%的容器化任务

MobotStone
2023-07-18 / 0 评论 / 0 点赞 / 145 阅读 / 10290 字

Docker通过引入一种轻量级且高效的打包应用程序及其依赖的方法——容器化,彻底改变了软件开发和部署的世界。

有了Docker,开发者可以创建被称为容器的隔离环境,这些容器能在不同平台上稳定运行,使得构建、部署和扩展应用程序变得更加容易。然而,要真正发挥Docker的力量,掌握有效管理容器的基本命令是必要的。

在这篇文章中,我们将探讨每个开发者和系统管理员都应该了解的十个重要的Docker命令,以使他们的容器管理流程更加顺畅。从创建和启动容器,到列出可用的镜像,再到优雅地停止它们,这些命令将成为有效管理你的Docker环境的基石。

通过掌握这些命令,你将获得扎实的基础,以便高效和有效地管理Docker容器。无论你是刚开始接触Docker的初学者,还是希望提升你的容器管理技能的有经验的用户,这篇文章都将提供有价值的见解和实用的例子,帮助你自信地驾驭Docker的世界。让我们深入挖掘,释放Docker容器化能力的全部潜力吧。

image-1689645916816

1、docker run

docker run命令被用于基于Docker镜像创建并启动一个新的容器。运行容器的基本语法如下:

docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
  1. OPTIONS:可以用于自定义容器行为的额外选项,例如指定ports、volumes、环境变量等。
  2. IMAGE :用于创建容器的Docker镜像的名称。
  3. COMMAND:(可选)在容器内执行的命令。
  4. ARG:(可选)传递给容器内命令的参数。

例如,要运行一个基于“ubuntu”镜像的容器,并在容器内执行ls命令,你可以使用以下命令:

docker run ubuntu ls 

这将使用“ubuntu”image 创建一个新的容器并运行ls命令,列出容器文件系统内的文件和目录。

请注意,如果指定的image 在本地不可用,Docker会在创建容器之前自动从Docker registry拉取镜像。

2、docker ps

docker ps命令用于列出在你的 Docker 主机上正在运行的容器。它提供的信息包括容器 ID、使用的镜像、正在执行的命令、状态和端口映射等。下面是基本的语法:

docker ps [OPTIONS]

默认情况下,docker ps 只显示正在运行的容器。如果你想查看所有容器,包括已停止或已退出的容器,可以使用-a选项:

docker ps -a 

这将显示你的 Docker 主机上所有容器的列表,以及它们各自的详细信息。

docker ps命令的输出包括 CONTAINER ID、IMAGE、COMMAND、CREATED、STATUS、PORTS 和 NAMES 等列。下面是对这些列的简要解释:

  • CONTAINER ID:容器的唯一标识符。
  • IMAGE:用于创建容器的镜像的名称或 ID。
  • COMMAND:在容器内部执行的命令。
  • CREATED:时间戳,表示容器的创建时间。
  • STATUS:容器的当前状态(例如,运行中、已停止、已退出)。
  • PORTS:容器与主机系统之间的端口映射。
  • NAMES:容器的自动生成或用户指定的名称。

默认情况下,docker ps命令提供了容器的摘要视图。如果你想要更详细的信息,可以添加--format选项,后跟一个格式模板。例如:

docker ps --format "ID: {{.ID}}, Image: {{.Image}}, Status: {{.Status}}" 

这将仅显示每个容器的容器 ID、镜像和状态信息。请注意,运行docker ps命令需要在你的系统上安装和运行 Docker。

3、docker stop

docker stop命令用于停止一个或多个正在运行的容器。它向容器的主进程发送一个信号,请求它优雅地停止运行。下面是基本的语法:

docker stop [OPTIONS] CONTAINER [CONTAINER...]
  • OPTIONS:可以用来自定义停止行为的额外选项。例如,你可以使用--time-t选项指定超时时间,让容器有更多时间优雅地停止运行,而不是强制终止它。
  • CONTAINER :要停止的容器的名称或 ID。你可以用空格分隔指定多个容器。

例如,要停止名称为my-container的容器,你可以使用以下命令:

docker stop my-container 

如果你想停止多个容器,可以列出它们的名称或 ID,用空格分隔:

docker stop container1 container2 container3 

当执行docker stop命令时,Docker向容器发送一个 SIGTERM 信号,允许容器内部的进程执行任何必要的清理任务,并优雅地关闭。如果进程在给定的超时时间内(默认为10秒)没有停止,Docker可以发送一个 SIGKILL 信号来强制终止容器。

4、docker rm

docker rm 命令用于从你的 Docker 主机中删除一个或多个已停止的容器。它永久删除指定的容器,并释放相关的资源。下面是基本的语法:

docker rm [OPTIONS] CONTAINER [CONTAINER...]
  • OPTIONS:可以用来自定义删除行为的额外选项。例如,你可以使用-f--force选项来强制删除正在运行的容器。
  • CONTAINER:要删除的容器的名称或 ID。你可以用空格分隔指定多个容器。

例如,要删除名称为my-container的容器,你可以使用以下命令:

docker rm my-container 

如果你想删除多个容器,可以列出它们的名称或 ID,用空格分隔:

docker rm container1 container2 container3 

默认情况下,docker rm命令只删除已停止的容器。如果你想同时删除正在运行的容器,可以使用-f--force选项:

docker rm -f container1 container2 

请注意,删除容器将永久删除它,包括容器内部的任何数据或更改。如果你要删除正在运行的容器,它会先被停止,然后再被删除。

此外,你还可以在docker rm命令中使用-v--volumes选项,如果有的话,一并删除与容器关联的卷。

5、docker images

docker images命令用于列出你的 Docker 主机上可用的 Docker 镜像。它显示有关镜像的信息,如repository, tag, image ID、创建日期和大小。下面是基本的语法:

docker images [OPTIONS] [REPOSITORY[:TAG]]
  • OPTIONS:可以用来自定义输出或过滤镜像的额外选项。例如,你可以使用--format选项来指定输出的格式模板,或者使用-a--all选项来显示所有镜像,包括中间镜像层。
  • REPOSITORY:(可选)镜像的仓库名称。
  • TAG:(可选)镜像的标签。

默认情况下,docker images命令列出你的 Docker 主机上所有可用的镜像。例如:

docker images 

这将显示一个镜像表格,包括 REPOSITORY、TAG、IMAGE ID、CREATED 和 SIZE 等列。REPOSITORY 和 TAG 组合在一起形成镜像的唯一标识符。

如果你想根据仓库或标签对镜像进行过滤,可以提供仓库和/或标签名称作为参数。例如,列出来自特定仓库的镜像:

docker images my-repo 

列出具有特定标签的镜像:

docker images my-repo:my-tag 

你还可以组合选项来进一步自定义输出。例如,显示包括中间层镜像在内的所有镜像,并使用自定义格式进行输出:

docker images -a --format "table {{.ID}}\t{{.Repository}}\t{{.Tag}}" 

这将以表格格式显示镜像,只显示 image ID, repository和tag 信息。

6、docker rmi

docker rmi命令用于从你的 Docker 主机中删除一个或多个 Docker 镜像。它会永久删除你本地镜像缓存中指定的镜像。下面是基本的语法:

docker rmi [OPTIONS] IMAGE [IMAGE...]
  • OPTIONS:可以用来自定义删除行为的额外选项。例如,你可以使用-f--force选项来强制删除镜像,即使它正被运行的容器使用。
  • IMAGE:要删除的镜像的名称或 ID。你可以用空格分隔指定多个镜像。

例如,要删除名称为my-image:latest的镜像,你可以使用以下命令:

docker rmi my-image:latest 

如果你想删除多个镜像,可以列出它们的名称或 ID,用空格分隔:

docker rmi image1 image2 image3 

默认情况下,docker rmi命令只会删除没有被任何容器使用的镜像。如果你尝试删除当前被一个或多个容器使用的镜像,Docker 会报错。在这种情况下,你可以使用-f--force选项强制删除镜像,即使它正在使用中:

docker rmi -f my-image:latest 

请注意,删除镜像将会永久从你的本地镜像缓存中删除它。如果你将来需要再次使用该镜像,你需要从 Docker 注册表中拉取它,或者使用 Dockerfile 重新构建它。

此外,你还可以在docker rmi命令中使用--no-prune选项,如果存在未标记的父镜像,则防止自动删除它们。

7、docker build

docker build命令用于根据 Dockerfile 构建一个 Docker 镜像。它允许你定义创建自定义镜像所需的指令和依赖关系。下面是基本的语法:

docker build [OPTIONS] PATH | URL | -
  • OPTIONS:可以用来自定义构建过程的额外选项。一些常用的选项包括-t--tag用于指定镜像的名称和可选标签,-f--file用于指定 Dockerfile 的位置,--build-arg用于传递构建时变量给 Dockerfile。
  • PATH | URL | -:指向包含 Dockerfile 的目录的路径,Git 仓库的 URL,或者“-”表示从标准输入构建。

例如,要使用当前目录中的 Dockerfile 构建一个镜像,并将其标记为my-image:latest,你可以使用以下命令:

docker build -t my-image:latest .

这里的“.”表示 Dockerfile 在当前目录中。

如果你的 Dockerfile 存在于其他位置,你可以使用-f选项指定其路径:

docker build -t my-image:latest -f /path/to/Dockerfile .

在构建过程中,Docker 读取 Dockerfile 中的指令,执行每个步骤,并根据需要创建中间镜像。最终生成的镜像将会被打上指定的名称和可选的标签。

你可以在 Dockerfile 中定义额外的指令,例如复制文件、安装依赖项、设置环境变量或暴露端口,以根据你的需求自定义镜像。

8、docker exec

docker exec命令用于在正在运行的 Docker 容器内执行命令。它允许你以交互或分离模式运行命令。下面是基本的语法:

docker exec [OPTIONS] CONTAINER COMMAND [ARG...]
  • OPTIONS:可以用来自定义执行行为的额外选项。一些常用的选项包括-i--interactive用于保持 STDIN 开放以进行交互式命令,-t--tty用于分配一个伪终端,以及-d--detach用于在后台运行命令。
  • CONTAINER :要在其中执行命令的容器的名称或 ID。
  • COMMAND:要在容器内部执行的命令。
  • ARG:(可选)传递给容器内部命令的参数。

例如,要在名为my-container的容器内执行ls命令,你可以使用以下命令:

docker exec my-container ls 

这将在指定的容器内运行“ls”命令,并显示文件和目录的列表。

如果你想运行一个交互式命令,比如在容器内启动一个 shell,你可以同时使用-it选项:

docker exec -it my-container bash 

这将在容器内启动一个交互式的 shell 会话,允许你交互地执行多个命令。

请注意,容器必须处于运行状态才能使用docker exec命令。如果你需要在已停止或已退出的容器中执行命令,你可以先使用docker start命令启动容器,然后再使用docker exec运行命令。

9、docker pull

docker pull命令用于从 Docker 注册表(例如 Docker Hub)下载 Docker 镜像。它会获取指定的镜像或镜像,并将它们保存到你的本地镜像缓存中。下面是基本的语法:

docker pull [OPTIONS] IMAGE[:TAG]
  • OPTIONS:可以用来自定义下载过程的额外选项。一些常用的选项包括--all-tags用于拉取镜像的所有可用标签,--platform用于指定要拉取的镜像的平台,以及--quiet用于抑制进度输出。
  • IMAGE:要从 Docker 注册表中拉取的镜像的名称。它可以是“仓库/镜像”的格式或“仓库/镜像:标签”的格式。如果未指定标签,默认使用latest

例如,要从 Docker Hub 拉取最新版本的“ubuntu”镜像,你可以使用以下命令:

docker pull ubuntu 

如果你想拉取特定标签的镜像版本,可以指定标签:

docker pull ubuntu:20.04 

指定的镜像将会从 Docker 注册表中下载,并保存到你的本地镜像缓存中。一旦镜像被拉取,你就可以使用它来创建和运行在你的 Docker 主机上的容器。

10、docker push

docker push命令用于将 Docker 镜像上传到 Docker 注册表(例如 Docker Hub 或私有注册表)。它允许你与他人共享你本地构建或修改的镜像。下面是基本的语法:

docker push [OPTIONS] NAME[:TAG]
  • OPTIONS:可以用来自定义上传过程的额外选项。一些常用的选项包括--all-tags用于上传镜像的所有标签,--disable-content-trust用于跳过内容信任验证,以及--quiet用于抑制进度输出。
  • NAME:要上传的镜像的名称。它应该包括仓库和镜像名。例如,“用户名/仓库名:镜像名”。
  • TAG:(可选)要上传的镜像的标签。如果未指定标签,默认使用latest标签。

在推送镜像之前,你需要确保已经通过身份验证登录到 Docker 注册表。你可以使用docker login命令登录到注册表,提供用户名、密码和注册表的 URL(如果需要)。

例如,要将名为my-image的镜像与“latest”标签推送到 Docker Hub,假设你已经登录到 Docker Hub,你可以使用以下命令:

docker push username/my-image:latest

指定的镜像将会被上传到 Docker 注册表,并对他人可供下载和使用。

0