6月3日 00:04

Docker 镜像和 Dockerfile 是什么?从零构建镜像详解

Docker 镜像是容器的模板——只读的文件包,包含运行应用所需的一切(代码、运行时、依赖、配置)。Dockerfile 是构建镜像的脚本——一行一个指令,告诉 Docker 怎么组装镜像。

镜像是什么

镜像是一个分层的文件系统。每个指令(RUN、COPY、ADD)创建一层,层层叠加。好处:多个镜像共享相同的基础层,节省磁盘和拉取时间。

镜像本身不可变。运行容器时,Docker 在镜像顶部加一个可写层——容器修改文件只影响这个可写层,不修改镜像。

Dockerfile 基本结构

逐行解读:

  • FROM:基础镜像,你的镜像在此之上构建
  • WORKDIR:设置工作目录,后续指令都在这个目录下执行
  • COPY:拷贝文件到镜像里
  • RUN:构建时执行命令(安装依赖等)
  • EXPOSE:声明端口(文档作用,不实际映射)
  • CMD:容器启动时执行的命令

构建镜像

-t myapp:v1 给镜像打标签,. 表示 Dockerfile 在当前目录。

Dockerfile 优化技巧

1. 利用缓存:Docker 按层缓存。package.json 没变时 npm ci 用缓存,不用重新安装。所以先 COPY package.json 再 COPY 源码——源码变了不影响依赖缓存。

2. .dockerignore:排除不需要的文件:

不加 .dockerignore 会把 node_modules 也 COPY 进去,既慢又大。

3. 多阶段构建:编译和运行分开,运行镜像不需要编译工具。详见多阶段构建专题。

镜像标签管理

不要只用 latest 标签——无法回滚。用版本号(v1.2.3)或 git commit hash 标记每个镜像。

标签:Docker