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







评论(共0条)