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


🚀 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

vbnet 复制代码
# 阶段 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 使用心得!

相关推荐
OEC小胖胖9 小时前
02|从 `createRoot` 到 `scheduleUpdateOnFiber`:一次更新如何进入 React 引擎
前端·javascript·react.js·前端框架
林太白9 小时前
ofd文件
前端·后端
闲云一鹤9 小时前
Git 焚决!一个绝招助你找回丢失的代码文件!
前端·git
小宇的天下9 小时前
Calibre 3Dstack--每日一个命令day 6 [process和export layout](3-6)
java·前端·数据库
Xの哲學9 小时前
Linux 文件系统一致性: 从崩溃恢复到 Journaling 机制
linux·服务器·算法·架构·边缘计算
冴羽9 小时前
2025 年最火的前端项目出炉,No.1 易主!
前端·javascript·node.js
wordbaby9 小时前
Flexbox 布局中的滚动失效问题:为什么需要 `min-h-0`?
前端·css
demo007x9 小时前
在国内也能使用 Claude cli给自己提效,附实操方法
前端·后端·程序员
开心猴爷9 小时前
iOS App的tcp、udp数据包抓取在实际开发中的使用方式
后端
jayaccc9 小时前
Webpack配置详解与实战指南
前端·webpack·node.js