构建、运行与管理容器的 18 个常用 Docker 命令

目录

[什么是 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 list
  • docker image ls

其语法为:docker image ls [OPTIONS] [REPOSITORY[:TAG]]

该命令支持多个选项。例如,若要显示所有镜像(包括中间层),可添加 -a 或 --all 标志:docker images -a。

docker rmi <image>

docker rmi <image> 命令会从系统中删除一个或多个镜像。若某镜像有多个标签,使用该命令并指定某个标签只会删除该标签;但如果该标签是镜像唯一关联的标签,则会同时删除标签与镜像本体。

您也可以使用以下别名:

  • docker image remove
  • docker 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 remove
  • docker 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

如果您喜欢此文章,请收藏、点赞、评论,谢谢,祝您快乐每一天。

相关推荐
木雷坞1 小时前
AnythingLLM Docker部署:中文资料上传后无引用的检查路径
运维·docker·容器
暖核1 小时前
K8s 深度拆解:健康检查、认证授权与可视化面板全梳理
云原生·容器·kubernetes
maochongsandai1102 小时前
Centos上运行docker应用命令汇总
linux·docker·centos
艾伦_耶格宇2 小时前
【kubernetes - 1.28版本】-4 containerd与docker-ce 的区别
docker·容器·kubernetes
切糕师学AI2 小时前
K8s 滚动更新与 Spring Boot 优雅停机实战:如何做到真正的平滑发布?
spring boot·云原生·容器·kubernetes·k8s
正经教主3 小时前
【FDE系列】阶段2:Day 45(up详细版):综合实战 — Docker + Nginx + Git 完整部署与本周收官
人工智能·git·nginx·docker·fde
CodeGL3 小时前
一文了解:K8s
云原生·容器·kubernetes
java_logo3 小时前
Docker 部署 Portainer CE 中文版:轻松搭建容器管理平台
运维·docker·容器·portainer·容器管理·轩辕镜像·portainer ce
csdn_aspnet19 小时前
Docker Prune:完整指南与上手示例
运维·docker·容器·prune