前端也必看的Docker 核心命令与实战指南

141 阅读4分钟

🚀 2026 开发者必看:

一、 Docker 核心命令百科全书

1. 镜像管理 (Images) — 你的程序

命令示例核心用途
构建docker build -t app:v1 .根据 Dockerfile 创建镜像
查看docker images列出本地所有镜像
删除docker rmi [ID/Name]删除本地镜像
导出docker save -o app.tar app:v1镜像打包成文件(跨服务器传输)
导入docker load -i app.tar从文件恢复镜像

2. 容器生命周期 (Containers) — 程序的运行实例

命令示例核心用途
创建启动docker run -d -p 80:80 --name web nginx最常用:创建并后台启动容器
启动docker start web启动容器
停止docker stop web停止容器运行
重启docker restart web重启容器
查看状态docker ps查看所有容器(只包含启动的)
查看状态docker ps -a查看所有容器(含已停止)
进入容器docker exec -it web sh调试必备:进入容器内部交互
删除docker rm -f web强制删除运行中的容器

3. 运维与性能监控 — 线上“救火”神器

命令示例核心用途
日志查看docker logs -f --tail 100 web实时查看最后 100 行日志
性能监控docker stats实时监控 CPU、内存、网络 IO
元数据docker inspect web查看容器 IP、挂载卷等原始 JSON 信息
进程查看docker top web查看容器内运行的具体进程
文件传输docker cp ./a.txt web:/app/宿主机与容器间文件互传

4. 镜像发布与版本管理 (Distribution)

命令示例核心用途
打标签docker tag app:v1 registry.com/my-repo/app:v1必经之路:关联远程仓库地址
仓库登录docker login registry.com验证私有仓库权限
镜像推送docker push registry.com/my-repo/app:v1上传镜像至云端

5. 系统清理 — 磁盘空间回收

  • 清理停止的容器docker container prune
  • 清理无用的镜像docker image prune -a
  • 一键全系统清理docker system prune -a --volumes (慎用,会清理数据卷)

二、 Dockerfile 常用指令深剖

指令作用生产级建议
FROM指定基础镜像建议使用 node:18-alpine,体积比普通版小 80%
WORKDIR设置工作目录相当于容器内的 cd,不存在会自动创建
COPY拷贝本地文件优先拷贝依赖定义文件(如 package.json)以利用缓存
RUN执行构建命令多个命令用 && 连接,减少镜像层数(Layer)
ENV设置环境变量运行时有效:程序可通过环境变量动态调整行为
EXPOSE声明端口仅做文档说明,告知该应用预计监听的端口
VOLUME定义匿名卷标记数据持久化目录,防止容器删除后数据丢失

三、 Docker 难点辨析:CMD vs ENTRYPOINT

这是面试中最常被问到的区别:

  • CMD:容器启动时的默认命令。它会被 docker run 后的参数完全替换

  • ENTRYPOINT:容器启动的入口。它不容易被覆盖,其后的内容会被当作参数传递给入口程序。

  • 黄金实践ENTRYPOINT ["node"] + CMD ["server.js"]

    • 直接运行:执行 node server.js
    • 传入参数运行:docker run app app.js 会执行 node app.js(保持了环境固定,灵活切换文件)。

四、 生产实战:Next.js 项目极致优化部署

使用多阶段构建 (Multi-stage builds) 实现镜像瘦身。

Dockerfile

# 阶段 1: 安装依赖
FROM node:18-alpine AS deps
WORKDIR /app
COPY package.json package-lock.json ./
RUN npm ci

# 阶段 2: 编译构建
FROM node:18-alpine AS builder
WORKDIR /app
COPY --from=deps /app/node_modules ./node_modules
COPY . .
RUN npm run build

# 阶段 3: 最终运行 (Runner)
FROM node:18-alpine AS runner
WORKDIR /app
ENV NODE_ENV production
ENV PORT 3000

# 仅拷贝运行必需的 standalone 产物,不拷贝源码
COPY --from=builder /app/public ./public
COPY --from=builder /app/.next/standalone ./
COPY --from=builder /app/.next/static ./.next/static

EXPOSE 3000
CMD ["node", "server.js"]

五、 避坑点与小贴士 (Tips)

  1. 必须要有的 .dockerignore:

    在根目录创建该文件,排除 node_modules、.git、.next。如果不写,你的构建上下文会非常巨大,导致构建极慢。

  2. 端口映射的逻辑:

    -p 8080:3000 意味着 宿主机(8080) : 容器内(3000)。

  3. 不要在镜像里存数据:

    容器是易失的。数据库文件、用户上传的图片务必通过 -v 挂载到宿主机或使用云存储。

  4. 最小权限原则:

    如果可能,尽量在 Dockerfile 中使用 USER node 切换非 root 用户运行,增加安全性。

  5. 时区问题:

    默认镜像是 UTC 时间,通过 ENV TZ=Asia/Shanghai 修正。


六、 最常用的一套开发流程

  1. 本地开发:通过 docker-compose 搭建本地环境。
  2. 编写构建:编写 Dockerfile,执行 docker build -t app:v1 .
  3. 打标分发docker tag app:v1 registry.com/app:v1 -> docker push
  4. 线上部署:在服务器执行 docker pull -> docker run
  5. 日常监控docker stats 观察性能,docker logs 查看异常。

如果你觉得这份全攻略对你有帮助,欢迎点赞、收藏并在评论区交流你的 Docker 使用心得!