目录
[什么是 Docker?](#什么是 Docker?)
[基础 Docker 命令](#基础 Docker 命令)
[docker --version 与 docker info](#docker --version 与 docker info)
[docker pull](#docker pull)
[docker run](#docker run)
[docker stop 与 docker start :](#docker stop 与 docker start :)
[使用 Docker 镜像](#使用 Docker 镜像)
[docker build](#docker build)
[docker images](#docker images)
[docker rmi](#docker rmi)
[Docker 容器管理](#Docker 容器管理)
[docker exec](#docker exec)
[docker logs](#docker logs)
[docker rm](#docker rm)
[docker restart](#docker restart)
[Docker 网络](#Docker 网络)
[docker network ls](#docker network ls)
[docker network create](#docker network create)
[Docker 数据卷](#Docker 数据卷)
[docker volume ls](#docker volume ls)
[docker volume create](#docker volume create)
[Docker Compose 命令](#Docker Compose 命令)
[docker-compose up](#docker-compose up)
[docker-compose down](#docker-compose down)
[使用 Docker 命令的最佳实践](#使用 Docker 命令的最佳实践)
[使用 Docker 数据卷持久化数据](#使用 Docker 数据卷持久化数据)
[使用 Docker Compose 实现自动化](#使用 Docker Compose 实现自动化)

如果您喜欢此文章,请收藏、点赞、评论,谢谢,祝您快乐每一天。
Docker 已成为开发者和数据专业人士的常用工具,可在不同环境中一致地构建、共享与运行应用。无论您是在本地开发中启动容器,还是在生产环境中部署微服务,熟练掌握 Docker 命令都至关重要。
在本指南中,我将带您快速掌握 18 个必备的 Docker 命令------涵盖镜像、容器、网络、数据卷和 Compose------帮助您优化工作流程,更顺畅、高效地使用 Docker。
什么是 Docker?
Docker 是一个用于开发、交付与运行应用的平台。它允许您将应用与底层基础设施解耦,从而加速软件交付,并像管理应用一样管理您的环境配置。
Docker 通过名为容器的轻量级包在隔离环境中运行应用。容器包含应用运行所需的一切,如依赖与安装,从而节省系统资源。我们可以轻松与团队共享容器、同时运行多个容器,并通过 Docker 的工具与平台统一管理它们。
Docker 的典型使用场景包括:
- 弹性部署与扩缩容。
- 在相同硬件上运行更多负载。
- 快速且一致地交付应用。
使用 Docker 时,我们会接触到不同的 Docker 对象,如镜像、容器、网络、插件与数据卷。它们共同构成 Docker 体系的基石。Docker 在底层依托 Linux 内核特性实现这些能力。我们通过终端中的简单命令与之交互,所有 Docker 命令都以 docker 开头。
基础 Docker 命令
了解了 Docker 是什么以及其工作原理后,让我们看看一些最常用的命令。它们将帮助您在日常工作中构建、运行与管理容器。
docker --version 与 docker info
在 Docker 命令中,任何以 -- 开头的部分称为标志(flag)。
例如,--version 是一个标志,用于显示您使用的 Docker CLI 版本。您也可以使用 docker version(不带标志)获取所有 Docker 组件的详细版本信息。
输出分为两部分:
- Client 显示关于 Docker CLI 及相关工具的信息。
- Server 显示 Docker 引擎及其运行环境的详细信息。
您还可以使用 --format 标志配合自定义模板格式化输出。
docker info 命令会为您提供 Docker 设置的完整概览。它与运行 docker system info 等价,只是名称更短。您将看到内核版本、容器与镜像数量以及其他系统级细节。
根据您的存储驱动不同,您还可能看到如池名称和数据文件等信息。与 docker version 一样,您可以使用 --format 或 -f 格式化输出。
docker pull <image>
pull 命令会从镜像仓库下载 Docker 镜像,通常来自 Docker Hub,这是一个公共的预构建镜像库,您无需自行配置即可使用。您可以以 docker pull <image> 或 docker pull 的形式运行,它们作用相同。
- 完整语法如下:
docker image pull [OPTIONS] NAME[:TAG|@DIGEST]
如果未指定标签,Docker 将默认使用 :latest。例如:docker image pull debian 会拉取 debian:latest 镜像。
您还可以在命令后添加选项以自定义拉取行为,例如限制带宽或跳过镜像验证。下图展示了所有可用选项及其功能。

docker pull 命令的选项。来源:Docker 文档
docker run <image>
docker run <image> 命令会基于指定镜像创建并启动一个全新的容器,即在一个全新容器中运行该镜像。它是 docker container run 的简写,二者等效。
- 基本语法:
docker container run [OPTIONS] IMAGE [COMMAND] [ARG...]
如果您已经运行过一个容器,并希望带着此前的更改再次启动它,请使用:docker start <container>。
run 命令提供了大量选项以自定义容器的运行方式。我们将通过示例介绍几个常见选项:
|------------------|----------------------------------------------------------------|------------------------------------------------------------------------|
| 标志 | 命令示例 | 说明 |
| -- name | docker run --name test -d nginx:alpine | 为使用 nginx:alpine 镜像创建的容器指定自定义标识符 test。 |
| -w,--workdir | docker run -w /path/to/dir/ -i -t ubuntu pwd | 在指定目录中执行命令,本例为 /path/to/dir/ |
| --pid | docker run --rm -it --pid=host alpine | 默认情况下,所有容器都启用了 PID 命名空间,以实现进程隔离。 该示例以 --pid = host 选项运行一个 alpine 容器。 |
| --cidfile | docker run --cidfile /tmp/docker_test.cid ubuntu echo "test" | 创建一个容器并在控制台打印测试输出 cidfile 标志会让 Docker 尝试创建一个新文件并将容器 ID 写入其中。 |
docker stop <container> 与 docker start <container>:
docker start <container> 命令用于启动一个或多个已停止的容器。例如,在 docker start my_container 中,my_container 是我们要启动的容器名称。它也有别名:docker container start。
- 完整语法为:
docker container start [OPTIONS] CONTAINER [CONTAINER...]
类似地,docker stop 用于停止一个或多个正在运行的容器。例如,在 docker stop my_container 中,my_container 是一个正在运行的容器名称。
它也有一个别名:docker container stop。
- 完整语法如下:
docker container stop [OPTIONS] CONTAINER [CONTAINER...]
与 start 一样,stop 命令也提供了自定义停止行为的选项。我们将在下文重点介绍一些实用选项:

docker stop 的选项。来源:Docker 文档
使用 Docker 镜像
镜像是一切容器的基础。本节将介绍如何通过常用命令创建、管理与检查 Docker 镜像。
docker build
docker build 是 Docker 中使用最广泛的命令之一。尽管它属于支持高级用例的更大生态的一部分,我们在此将聚焦于如何基于一个简单的 Dockerfile 构建镜像。
Dockerfile 是一个纯文本文件(无扩展名),其中包含 Docker 用于构建镜像的分步指令。创建方法如下:
1、在应用的根目录创建名为 Dockerfile 的文件,内容如下:
syntax=docker/dockerfile:1
FROM node:lts-alpine
WORKDIR /app
COPY . .
RUN yarn install --production
CMD "node", "src/index.js"
EXPOSE 3000
该 Dockerfile 以包含 Node.js 与 Yarn 的轻量级基础镜像起步。它会将应用源代码复制到镜像中、安装依赖,并定义应用的启动方式。
2、现在,使用以下命令构建镜像:
docker build -t getting-started.
-t 标志用于为镜像打标签。本例中我们将其命名为 getting-started. 末尾的 . 表示让 Docker 在当前目录查找 Dockerfile。
docker images
docker images 命令会列出所有顶层镜像、其仓库、标签与大小。它的别名包括:
docker image listdocker image ls
其语法为:docker image ls [OPTIONS] [REPOSITORY[:TAG]]
该命令支持多个选项。例如,若要显示所有镜像(包括中间层),可添加 -a 或 --all 标志:docker images -a。
docker rmi <image>
docker rmi <image> 命令会从系统中删除一个或多个镜像。若某镜像有多个标签,使用该命令并指定某个标签只会删除该标签;但如果该标签是镜像唯一关联的标签,则会同时删除标签与镜像本体。
您也可以使用以下别名:
docker image removedocker image rm
语法为:docker image rm [OPTIONS] IMAGE [IMAGE...]
如果需要删除仍被正在运行的容器使用的镜像,必须添加 -f 或 --force 选项强制删除。
Docker 容器管理
在应用演进过程中,我们常常需要管理容器------启动、停止、检查或移除它们。下面我将介绍在日常工作中处理容器最有用的 Docker 命令。
docker exec <container> <command>
docker exec 命令允许您在一个正在运行的容器内执行命令,而无需重启容器。它特别适用于调试或在容器内进行手动检查。它的别名是:docker container exec。
仅当容器的主进程(PID 1)在运行时,该命令才会生效。如果容器重启,该命令不会自动再次执行。
其语法为:docker exec [OPTIONS] CONTAINER COMMAND [ARG...]
该命令支持多个可选标志。例如,--privileged 会赋予命令在容器内的扩展权限。完整选项列表请参阅官方文档。
以下是在容器中执行命令的示例:
docker exec -d mycontainer touch /tmp/execWorks
touch 命令会在正在运行的容器 mycontainer 内后台创建文件 /tmp/execWorks。
docker logs <container>
docker logs 命令可查看指定容器的日志,展示执行时输出到标准输出与标准错误的所有内容。它的别名是:docker container logs
其语法为:docker container logs [OPTIONS] CONTAINER
可以添加若干实用选项。例如:
--details显示额外属性,如环境变量和标签。--until允许按时间点截取日志。docker logs -f --until=2s test会持续跟随test容器的日志输出,并在显示最近两秒的日志后停止。
以下展示了可与 docker logs 配合使用的所有选项:

docker log <container> 的选项。来源:Docker 文档
docker rm <container>
docker rm <container> 命令会从系统中移除一个或多个容器。其别名包括:
docker container removedocker container rm
语法为:docker container rm [OPTIONS] CONTAINER [CONTAINER...]
该命令也提供一些可选标志,部分如下:

docker rm <container> 的选项。来源:Docker 文档
例如,您可以使用 docker rm /redis 移除由 /redis 链接标识的容器。但请注意,该命令仅会移除正在运行的容器。
如果要移除已停止的容器,需使用 docker container prune。若想保持环境整洁,可通过这篇Docker prune 教程了解如何安全地移除未使用的 Docker 资源。
docker restart <container>
docker restart <container> 命令会停止并重新启动一个或多个容器。它的别名是:docker container restart。
语法为:docker restart [OPTIONS] CONTAINER [CONTAINER...]
restart 命令有若干用于自定义重启行为的实用选项。如下所示并附有示例。
|---------------|----------------|-----------------------------------------|
| 选项 | 说明 | 示例 |
| -s, --signal | 发送给容器的信号。 | docker restart -s SIGTERM mycontainer |
| -t, --timeout | 在强制终止容器前等待的秒数。 | docker restart -t 10 mycontainer |
Docker 网络
容器网络使容器之间以及与外部工作负载之间能够通信。默认情况下,容器启用了网络并可发起出站连接,但它们不会自动了解所处网络类型或已连接的其他工作负载。
除非您使用 none 网络驱动(会禁用网络),否则容器可以与 IP 地址、网关与 DNS 等网络元素交互。
下面我们来了解一些常用的 Docker 网络命令。
docker network ls
docker network ls 命令会列出 Docker 引擎已知的所有网络,包括集群中跨多个主机的网络。其别名为:docker network list。
- 其语法为:
docker network ls [OPTIONS]
该命令可配合多种选项使用,如下图所示。
默认情况下,该命令会显示每个网络的:
- ID
- 名称
- 驱动
- 作用域
您可以使用标志自定义输出。例如,--no-trunc 会显示完整的网络 ID,而非截断形式。使用方式如下:
docker network ls --no-trunc
docker network create <network-name>
docker network create 命令用于创建新的 Docker 网络。默认使用 bridge 驱动;若需使用其他驱动,可通过 --driver(或 -d)标志指定。
Docker 支持以下内置网络驱动:
bridge:用于单主机网络。overlay:用于 Swarm 模式下的多主机网络。
如有需要,也可使用第三方或自定义驱动。
- 基本语法:
docker network create [OPTIONS] NETWORK
该命令提供了大量选项以满足不同目的。您可以查阅官方文档以查看完整选项列表。
以下是创建 bridge 网络的示例:
docker network create -d bridge my-bridge-network
Bridge 网络的作用范围仅限单个 Docker 引擎,无法跨主机连接容器。
启用 Swarm 模式后,您可以创建跨多个 Docker 主机的网络:
docker network create --scope=swarm --attachable -d overlay my-multihost-network
Docker 数据卷
Docker 数据卷用于存储需要持久化的数据,即使容器停止或被移除,数据也会保留。您可以显式创建它们,或在启动容器时让 Docker 自动创建。
数据卷存储于宿主机系统上,但与宿主机的核心文件相互隔离。它们以类似于绑定挂载(bind mount)的方式挂载到容器中,但具备更好的可移植性与安全性。
下面来看看几个相关的数据卷命令:
docker volume ls
docker volume ls 命令会列出 Docker 已知的所有数据卷。其别名为:docker volume list。
- 语法为:
docker volume ls [OPTIONS]
该命令支持一些可选标志,帮助筛选或格式化输出------如下所示:

docker volume ls 命令的选项。来源:Docker 文档
docker volume create <volume-name>
docker volume create 命令用于创建新的数据卷以存储持久化数据。如果您未提供名称,Docker 会自动为您生成。
在希望数据超出单一容器的生命周期而保留时,创建数据卷是常见步骤。
- 语法:
docker volume create [OPTIONS] [VOLUME_NAME]
以下示例展示了如何创建数据卷,并配置容器使用该数据卷:
docker volume create hello
docker run -d -v hello:/world busybox ls /world
在该示例中,创建了名为 hello 的数据卷。随后将其挂载到容器的 /world 路径。这样容器即可对该数据卷进行读写。
多个容器可以共享同一个数据卷------当一个容器写入数据、另一个容器读取时,这很实用。
注意: 数据卷名称在不同驱动间必须唯一。不能在两个不同的存储驱动中使用相同卷名。
Docker Compose 命令
Docker Compose 通过一个简单的 YAML 文件 轻松管理多容器应用。它支持开发、测试、预发、生产与 CI 等不同环境。借助一条命令,您即可在同一处管理服务、网络与数据卷。
下面来看看一些常用的 compose 命令:
docker-compose up
docker compose up 命令会为某个服务构建、(重新)创建、启动并附加到其容器上。若容器尚未运行,它也会自动启动任何关联的服务。
- 语法:
docker compose up [OPTIONS] [SERVICE...]
默认情况下,该命令会合并所有容器的输出。若只关注特定服务,您可以:
- 使用
--attach标志仅附加到指定服务 - 使用
--no-attach标志排除其他服务
例如,docker compose up --no-attach <service-name> 会启动所有服务,但在日志中排除您指定的服务。
当命令结束时,容器也会随之停止。若希望它们在后台持续运行,请使用 --detach 标志:
docker compose up --detach
在运行此命令之前,请确保已切换(cd)到存放 docker-compose.yml 文件的目录。
docker-compose down
docker compose down 命令会停止容器,并移除由 docker compose up 创建的容器、镜像、网络与数据卷。
- 语法:
docker compose down [OPTIONS] [SERVICES]
该命令可配合多种选项使用,包括以下内容:

docker compose down 命令的选项。来源:Docker 文档。
默认情况下,该命令会移除:
- Compose 文件中定义的服务容器。
- Compose 文件 networks 部分中定义的网络。
- 若使用了默认网络,也会将其移除。
以下内容默认不会被移除:
- 被定义为 external 的网络和数据卷。
- 匿名数据卷(即没有名称的数据卷)。
匿名数据卷在您再次运行 docker compose up 时不会被自动挂载,因为它们没有名称。若需要持久化数据存储,建议使用具名数据卷或绑定挂载。
使用 Docker 命令的最佳实践
Docker 是在容器中构建、交付与运行应用的强大方式。但要用得好、并确保环境高效且易于扩展,需要遵循一些最佳实践。
使用 Docker 数据卷持久化数据
默认情况下,容器文件存储在一个可写层中,一旦容器被移除,该层就会丢失!该层对每个容器都是唯一的,也不易直接访问。Docker 通过不同类型的挂载来持久化数据,其中之一是由 Docker 守护进程管理并存储在宿主机上的数据卷。
使用数据卷可以:
- 在容器被删除后仍然保留数据。
- 以接近宿主机速度存储性能关键型数据。
- 通过 Docker 便捷地管理存储。
它们非常适合长期数据,或当多个容器需要共享访问时。但请记住,如果您需要直接从宿主机访问文件,绑定挂载可能更合适,因为数据卷完全由 Docker 管理。
使用 Docker Compose 实现自动化
手动管理多个容器会变得繁琐。Docker Compose 通过在单个 YAML 文件中定义全部内容来简化这一过程,让您专注于构建本身。
以下是值得遵循的最佳实践原因:
- 一条简单命令:一次性启动、停止、扩缩或重建您的服务。
- 全员一致性:无论处于开发、测试还是生产,Compose 都能保持环境一致,避免"只在我机子上能跑"的问题。
- 内置网络:Compose 会创建共享网络,让服务能通过服务名而非 IP 轻松通信。
- 轻松扩缩:可通过
--scale标志快速扩缩服务,便于测试应用在不同负载下的表现。 - 清晰且便于协作的配置:包含容器、网络与数据卷在内的全部配置都可版本控制且易读。
结语
刚开始接触 Docker 可能会觉得内容很多,但一旦掌握核心命令,您将获得巨大可能性。从运行第一个容器,到管理网络、数据卷与服务,您现在已能更有把握地构建并运行容器化应用。
参考文章:https://www.datacamp.com/zh/blog/docker-commands
如果您喜欢此文章,请收藏、点赞、评论,谢谢,祝您快乐每一天。