Docker 和 Docker Compose 命令速查:从一脸懵到能干活

发布于 2026年05月27日 10:00 #Docker#CLI

Docker 和 Docker Compose 命令速查:从一脸懵到能干活 封面图

快速预览:本文整理了 Docker 和 Docker Compose 最常用的命令,按场景分类,每个命令都带注释。不管你是刚装完 Docker 想跑第一个容器,还是已经在用 Compose 编排多服务项目,这篇都能当速查手册用。

关键词DockerDocker Compose容器镜像CLIDevOps

先说结论

Docker 的命令多到离谱,docker --help 列出来一百多个子命令,真正常用的也就 20 来个。与其去啃官方文档,不如先把这几个核心场景的命令搞熟:镜像管理、容器生命周期、Compose 编排、数据卷和网络。剩下的按需查就行。

坦白讲,我用了两年 Docker,日常翻来覆去用的也就那几个命令组合。这篇把我实际在用的命令全整理出来,省得每次都去 Google。

镜像操作

镜像是容器的“安装包”,所有应用跑起来之前,都得先有镜像。

拉取和查看

# 从 Docker Hub 拉取镜像(默认 latest 标签)
docker pull nginx

# 拉取指定版本
docker pull node:20-alpine

# 从 GitHub Container Registry 拉取(ghcr.io)
docker pull ghcr.io/wangruofeng/newsnow:main

# 查看本地所有镜像
docker images

# 只看镜像 ID(简洁输出)
docker images -q

构建镜像

# 基于当前目录的 Dockerfile 构建
docker build -t my-app:latest .

# 指定 Dockerfile 文件
docker build -f Dockerfile.prod -t my-app:v1.0 .

# 构建时传入构建参数
docker build --build-arg NODE_ENV=production -t my-app .

删除镜像

# 删除指定镜像
docker rmi nginx:latest

# 强制删除(即使有容器在用)
docker rmi -f nginx:latest

# 删除所有悬空镜像(没有名字的 <none> 镜像)
docker image prune

# 删除所有未被容器使用的镜像
docker image prune -a

容器操作

容器就是跑起来的镜像实例。日常 90% 的时间都在跟这几个命令打交道。

启动和停止

# 从镜像启动一个新容器(后台运行,映射端口 4444)
docker run -d -p 4444:4444 --name newsnow ghcr.io/wangruofeng/newsnow:main

# 启动时传入环境变量
docker run -d -p 4444:4444 \
  -e G_CLIENT_ID=xxx \
  -e G_CLIENT_SECRET=xxx \
  --name newsnow ghcr.io/wangruofeng/newsnow:main

# 启动时挂载数据卷(持久化数据)
docker run -d -p 4444:4444 \
  -v newsnow_data:/usr/app/.data \
  --name newsnow ghcr.io/wangruofeng/newsnow:main

# 启动一个已停止的容器
docker start newsnow

# 停止运行中的容器
docker stop newsnow

# 重启容器
docker restart newsnow

查看和调试

# 查看运行中的容器
docker ps

# 查看所有容器(包括已停止的)
docker ps -a

# 只看容器 ID
docker ps -q

# 查看容器日志
docker logs newsnow

# 实时跟踪日志(类似 tail -f)
docker logs -f newsnow

# 看最后 100 行日志
docker logs --tail 100 newsnow

# 进入容器内部(开一个 shell)
docker exec -it newsnow sh

# 以 root 身份进入
docker exec -it -u root newsnow sh

# 在容器里执行单个命令(不进入 shell)
docker exec newsnow ls /usr/app

# 查看容器资源占用(CPU、内存、网络)
docker stats

# 查看某个容器的详细信息(IP、挂载、环境变量等)
docker inspect newsnow

删除容器

# 删除已停止的容器
docker rm newsnow

# 强制删除运行中的容器(先停再删)
docker rm -f newsnow

# 删除所有已停止的容器
docker container prune

Docker Compose

说实话,单个 docker run 命令参数一多就很难维护。Compose 用一个 YAML 文件管理所有服务配置,才是正经用法。

核心命令

# 启动所有服务(后台运行)
docker compose up -d

# 启动并重新构建镜像
docker compose up -d --build

# 停止并删除所有容器
docker compose down

# 停止并删除容器 + 数据卷(清空所有数据)
docker compose down -v

# 查看服务状态
docker compose ps

# 查看服务日志
docker compose logs

# 实时跟踪某个服务的日志
docker compose logs -f newsnow

# 进入某个服务的容器
docker compose exec newsnow sh

# 重启某个服务
docker compose restart newsnow

# 拉取最新镜像
docker compose pull

指定配置文件

# 使用指定的 compose 文件
docker compose -f docker-compose.local.yml up -d

# 本地源码构建 + 后台启动
docker compose -f docker-compose.local.yml up -d --build

更新服务

# 拉取最新镜像 + 重建容器(更新部署的标准操作)
docker compose pull && docker compose up -d

这条命令做的事很简单:pull 拉最新镜像,up -d 发现镜像变了就自动重建容器。比手动 downup 要优雅得多,因为 Compose 会检测镜像 digest 是否变化,只有变化的容器才会重建。

数据卷

数据卷是 Docker 里最容易被忽略的概念,但一旦容器重建数据丢了,你就知道它有多重要了。

# 查看所有数据卷
docker volume ls

# 查看某个数据卷的详细信息
docker volume inspect newsnow_data

# 删除指定数据卷
docker volume rm newsnow_data

# 删除所有未被使用的数据卷
docker volume prune

网络相关

# 查看所有网络
docker network ls

# 查看某个网络的详细信息
docker network inspect bridge

# 创建自定义网络
docker network create my-network

# 删除所有未被使用的网络
docker network prune

一键清理

时间久了,本地的废弃镜像、停止的容器、悬空的数据卷会吃掉大量磁盘空间。这几个命令可以一键清理:

# 查看 Docker 占用了多少磁盘
docker system df

# 一键清理所有未使用的资源(镜像、容器、网络、缓存)
docker system prune

# 连数据卷一起清理
docker system prune --volumes

# 查看清理后释放了多少空间
docker system df

说实话,docker system prune 这个命令我大概每个月会跑一次。Docker 的镜像层叠机制很聪明,但吃磁盘也确实厉害,定期清理是个好习惯。

Dockerfile 速查

既然提到了镜像,顺便把 Dockerfile 最常用的指令也整理一下:

# 基础镜像
FROM node:20-alpine

# 设置工作目录
WORKDIR /usr/app

# 先复制依赖文件(利用缓存层,依赖不变时跳过 install)
COPY package.json pnpm-lock.yaml ./

# 安装依赖
RUN corepack enable && pnpm install --frozen-lockfile

# 复制源码
COPY . .

# 构建项目
RUN pnpm run build

# 运行阶段用更小的基础镜像(多阶段构建)
FROM node:20-alpine
WORKDIR /usr/app
COPY --from=0 /usr/app/dist ./dist

# 暴露端口
EXPOSE 4444

# 启动命令
CMD ["node", "dist/server/index.mjs"]

多阶段构建是个好习惯。构建阶段用完整镜像装编译工具,运行阶段只拷贝产物到精简镜像,最终镜像体积能小好几倍。

速查表

把最常用的命令汇总一下,方便快速查找:

场景命令
拉取镜像docker pull <image>
构建镜像docker build -t <name> .
启动容器docker run -d -p 8080:80 --name <name> <image>
查看容器docker ps
查看日志docker logs -f <name>
进入容器docker exec -it <name> sh
停止容器docker stop <name>
删除容器docker rm <name>
Compose 启动docker compose up -d
Compose 更新docker compose pull && docker compose up -d
Compose 停止docker compose down
一键清理docker system prune
查看磁盘占用docker system df

写在最后

Docker 命令多,但日常真正高频使用的就那些。与其背命令,不如把 docker compose up -ddocker compose logs -fdocker exec -it 这三板斧练熟,遇到问题再查。

如果你刚开始用 Docker,我的建议是直接从 Compose 开始学。单个 docker run 命令参数一长就不好维护了,Compose 的 YAML 文件才是正道——版本可控、团队可共享、修改可追溯。

评论互动

© 2026 王若风的技术博客 · Powered by Astro