当前位置: 首页 > article >正文

dockerfile2-15

dockerfile

一、什么是dockerfile

1.1 dockerfile是创建镜像所有指令的文本文件,包含了一条条指令和说明,每条指令构建一层,通过docker build的命令,根据dockerfile的内容构建镜像,因此每一条指令的内筒就是描述该层如何构建,有了dockerfile,就可以制定自己的镜像规则,只需要在dockerfile上添加或者修改指令,就可生成docker 镜像

在这里插入图片描述

1.2docker容器,dockerfile,docker镜像的关系

dockerfile:是面向开发的,发布项目做镜像的时候就要西那些dockerfile文件

dockerImages:通过dockerfile构建生成的镜像,最终发布和运行的产品

docker容器:容器就是镜像运行起来提供服务的

二、dockerfile的基本指令

1.1dockerfile的指令选项

# ================== 基础指令 ==================
# 指定基础镜像(必须为第一条指令)
# 格式: FROM [--platform=<平台>] <镜像名>[:<标签>] [AS <构建阶段名>]
FROM ubuntu:22.04 AS builder

# ================== 元数据指令 ==================
# 维护者信息(已废弃,推荐用 LABEL 替代)
MAINTAINER John Doe <john@example.com>

# 设置镜像元数据(推荐方式)
LABEL maintainer="John Doe <john@example.com>"
LABEL version="1.0" description="My Application"

# ================== 构建环境指令 ==================
# 设置环境变量(整个构建过程和容器运行时生效)
# 格式: ENV <key>=<value> ...
ENV APP_HOME=/app \
    NODE_ENV=production

# 构建阶段临时变量(仅在构建过程中生效)
ARG DEBIAN_FRONTEND=noninteractive

# ================== 文件操作指令 ==================
# 切换工作目录(自动创建不存在路径)
WORKDIR $APP_HOME

# 复制本地文件到镜像(严格1:1复制,推荐首选)
COPY ./src ./src
COPY package.json ./

# 高级复制(支持URL和解压,非必要不推荐)
ADD https://example.com/data.tar.gz /tmp/
ADD configs.tar.gz ./configs/

# ================== 构建过程指令 ==================
# 执行Shell命令(合并减少镜像层)
RUN apt-get update && \
    apt-get install -y python3-pip && \
    rm -rf /var/lib/apt/lists/*

# ================== 运行时配置指令 ==================
# 声明容器运行时端口(仍需通过-p映射)
EXPOSE 80/tcp 443

# 定义数据卷挂载点(推荐运行时通过-v挂载)
VOLUME ["/data", "/logs"]

# 指定运行用户(需提前创建用户)
RUN groupadd -r appuser && useradd -r -g appuser appuser
USER appuser:appuser

# ================== 启动指令 ==================
# 入口点指令(不可被覆盖,通常与CMD配合使用)
ENTRYPOINT ["python3"]

# 默认启动参数(可被docker run覆盖)
CMD ["app.py"]

# ================== 高级指令 ==================
# 触发器指令(当本镜像被其他Dockerfile继承时执行)
ONBUILD COPY . /app
ONBUILD RUN make build

# 健康检查(Docker 1.12+)
HEALTHCHECK --interval=30s --timeout=3s \
  CMD curl -f http://localhost/health || exit 1

# 停止信号(指定容器停止时发送的信号)
STOPSIGNAL SIGTERM

常见误区修正
CMD vs ENTRYPOINT

当同时存在时,CMD 作为 ENTRYPOINT 的参数

示例:ENTRYPOINT ["echo"] + CMD ["Hello"] = 输出 "Hello"

COPY vs ADD

优先使用 COPY,仅在需要以下功能时用 ADD:

自动解压 .tar, .gz 等归档文件

从 URL 下载文件(不推荐,建议用 RUN curl)

ONBUILD 陷阱

触发时机:子镜像的 FROM 之后立即执行

典型用途:基础镜像预配置(如自动复制代码)

(自己找的指令,感觉不够好,然后利用ai补充了一下)

1、2 常见误区修正

1、CMD vs ENTRPOINT

  • 当两个同时存在的时候,CMD做为ENTRPOINT的参数
  • 示例ENTRYPOINT["echo"]+CMD["hello"] =输出“hello”

2、COPY vs ADD

  • 优先使用COPY,仅在需要以下功能时,用ADD

  • 自动解压.tar,.gz等归档文件

  • 从url下载文件(不推荐,建议使用RUN curl1)

  • ONBUILD 陷阱

FROM nginx:1.22
RUN echo "this is nginx" > /usr/share/nginx/html/index,html
EXPOSE 80
CMD["nginx"  "-g" "daemon off."]

这是一个很简单的dockerfile文件

将文件运行一下docker build -f 文件名 当前路径

在这里插入图片描述
在这里插入图片描述


http://www.kler.cn/a/553617.html

相关文章:

  • Vue 3最新组件解析与实践指南:提升开发效率的利器
  • Excel如何给单元格填色,以及如何用Python 3实现单元格填色
  • deepseek帮我设计物理量采集单片机口保护电路方案
  • 市场波动中的数据分析与策略优化
  • Spring源码分析のBean创建流程(下)
  • 科普:Docker run的相关事项
  • Vue前端开发-Vant之Image组件
  • 【基于SprintBoot+Mybatis+Mysql】电脑商城项目之设置默认收货地址及删除收货地址
  • React 渲染 Flash 接口数据
  • AI技术生成【参考】
  • K8s学习总结
  • 智慧园区安全调度的重要性
  • Oppo手机投屏到Windows的两个方法,Windows系统自带投屏的替补!
  • 代码随想录算法【Day50】
  • 并发和多线程
  • 提升信息检索准确性和效率的搜索技巧
  • Windows桌面系统管理7:国产操作系统与Linux操作系统
  • 深度学习-119-Text2SQL之实现的三种技术途径
  • python 快速实现链接转 word 文档
  • 【面试题】redis大key问题怎么解决?(key访问的次数比较多,key存的数据比较大)