Docker 和 Docker Compose 命令速查:从一脸懵到能干活
快速预览:本文整理了 Docker 和 Docker Compose 最常用的命令,按场景分类,每个命令都带注释。不管你是刚装完 Docker 想跑第一个容器,还是已经在用 Compose 编排多服务项目,这篇都能当速查手册用。
关键词:Docker、Docker Compose、容器、镜像、CLI、DevOps
先说结论
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 发现镜像变了就自动重建容器。比手动 down 再 up 要优雅得多,因为 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 -d、docker compose logs -f、docker exec -it 这三板斧练熟,遇到问题再查。
如果你刚开始用 Docker,我的建议是直接从 Compose 开始学。单个 docker run 命令参数一长就不好维护了,Compose 的 YAML 文件才是正道——版本可控、团队可共享、修改可追溯。
评论互动