前端也必看的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 使用心得!

相关推荐
广州华水科技4 小时前
单北斗变形监测一体机在基础设施安全与地质灾害监测中的应用价值分析
前端
Dragon Wu4 小时前
Electron Forge集成React Typescript完整步骤
前端·javascript·react.js·typescript·electron·reactjs
芳草萋萋鹦鹉洲哦4 小时前
【Tailwind】动画解读:Tailwind CSS Animation Examples
前端·css
华仔啊4 小时前
jQuery 4.0 发布,IE 终于被放弃了
前端·javascript
一心赚狗粮的宇叔4 小时前
03.Node.js依赖包补充说明及React&Node.Js项目
前端·react.js·node.js
子春一4 小时前
Flutter for OpenHarmony:音律尺 - 基于Flutter的Web友好型节拍器开发与节奏可视化实现
前端·flutter
JarvanMo4 小时前
150万开发者“被偷家”!这两款浓眉大眼的 VS Code 插件竟然是间谍
前端
亿元程序员4 小时前
大佬,现在AI游戏开发教程那么多,你不搞点卖给大学生吗?
前端
龙山云仓4 小时前
MES系统超融合架构
大数据·数据库·人工智能·sql·机器学习·架构·全文检索
jbtianci4 小时前
Spring Boot管理用户数据
java·spring boot·后端