Docker通过引入一种轻量级且高效的打包应用程序及其依赖的方法——容器化,彻底改变了软件开发和部署的世界。
有了Docker,开发者可以创建被称为容器的隔离环境,这些容器能在不同平台上稳定运行,使得构建、部署和扩展应用程序变得更加容易。然而,要真正发挥Docker的力量,掌握有效管理容器的基本命令是必要的。
在这篇文章中,我们将探讨每个开发者和系统管理员都应该了解的十个重要的Docker命令,以使他们的容器管理流程更加顺畅。从创建和启动容器,到列出可用的镜像,再到优雅地停止它们,这些命令将成为有效管理你的Docker环境的基石。
通过掌握这些命令,你将获得扎实的基础,以便高效和有效地管理Docker容器。无论你是刚开始接触Docker的初学者,还是希望提升你的容器管理技能的有经验的用户,这篇文章都将提供有价值的见解和实用的例子,帮助你自信地驾驭Docker的世界。让我们深入挖掘,释放Docker容器化能力的全部潜力吧。
1、docker run
docker run
命令被用于基于Docker镜像创建并启动一个新的容器。运行容器的基本语法如下:
docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
- OPTIONS:可以用于自定义容器行为的额外选项,例如指定ports、volumes、环境变量等。
- IMAGE :用于创建容器的Docker镜像的名称。
- COMMAND:(可选)在容器内执行的命令。
- 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 注册表,并对他人可供下载和使用。