6. docker Dockerfile
创建时间:2026-05-17 12:30
长度:1444
浏览:0
评论:0
一. Docker 镜像核心原理
1. 分层存储
镜像由多个只读层堆叠而成。
每层记录文件系统的增量变化(添加/修改/删除)。
所有镜像层都是只读的,不可修改。
2. 联合文件系统(UnionFS)
使用 OverlayFS/AUFS 等技术,将多个只读层联合挂载成一个完整的文件系统。
容器启动时,在镜像层之上增加一个可写层(容器层)。
容器运行时修改的文件都保存在容器层。
3. 写时复制(Copy‑on‑Write,CoW)
容器修改来自镜像层的文件时:
将文件从只读层复制到容器层。
在容器层中修改副本。
之后读写都使用容器层中的副本。
好处:多个容器共享同一镜像层,节省空间,保证镜像不可变。
从一个镜像中复制定自定义一些操作
# 将一个容器转换成镜像
docker commit 容器id 镜像名称:版本号
# 压缩镜像成.tar
docker save -o 压缩文件名称 镜像名称:版本号
# 加载已压缩的镜像
docker load -i 压缩文件名称二. dockerfile
dockerfile是什么?
Dockerfile 是一个纯文本文件,包含一系列指令,用于自动化地构建 Docker 镜像。每条指令创建一个新的镜像层,Docker 会按顺序执行这些指令,最终生成一个可运行的镜像
dockerfile常见属性介绍
| 命令 | 用途 | 示例 |
|---|---|---|
| FROM | 指定基础镜像(必须是第一条指令) | FROM node:20-alpine |
| RUN | 在构建阶段执行命令(用于安装软件等) | RUN apt update && apt install -y curl |
| COPY | 将本地文件/目录复制到镜像中 | COPY ./app /app |
| ADD | 类似 COPY,额外支持自动解压 tar 和 URL 下载 | ADD app.tar.gz /app |
| WORKDIR | 设置工作目录(后续命令的基路径) | WORKDIR /app |
| ENV | 设置环境变量(构建时和运行时均生效) | ENV NODE_ENV=production |
| ARG | 定义构建时的变量(仅在构建阶段有效) | ARG VERSION=1.0 |
| EXPOSE | 声明容器监听的端口(仅文档说明,不实际暴露) | EXPOSE 3000 |
| CMD | 容器启动时的默认命令(可被 docker run 覆盖) | CMD ["node", "app.js"] |
| ENTRYPOINT | 容器启动时的入口命令(不易被覆盖,常与 CMD 配合) | ENTRYPOINT ["docker-entrypoint.sh"] |
| VOLUME | 指定挂载点,创建匿名卷用于持久化数据 | VOLUME ["/data"] |
| USER | 切换运行用户(非 root 用户更安全) | USER node |
| LABEL | 添加元数据(如维护者、版本信息) | LABEL maintainer="huangcy" |
| SHELL | 更改默认 shell(Linux 默认为 /bin/sh) | SHELL ["/bin/bash", "-c"] |
| HEALTHCHECK | 定义容器健康检查命令 | HEALTHCHECK CMD curl -f http://localhost/ || exit 1 |
| ONBUILD | 为子镜像(以此镜像为基础的镜像)设置延迟执行指令 | ONBUILD RUN npm install |