讲师中心 微信公众号
AI工具推荐 视频效率加速

Linux如何编写Dockerfile_Linux Dockerfile编写攻略

胖宇大大_6024

胖宇大大_6024

发布时间:2026-04-04 20:55:33

|

653人浏览过

|

来源于php中文网

原创

Dockerfile 安全优化核心是明确镜像封装边界:选 slim/alpine 基础镜像并固定小版本;COPY 优先于 ADD;RUN 合并命令并清理缓存;早设 WORKDIR、后设 USER、CMD 用 JSON 格式。

linux如何编写dockerfile_linux dockerfile编写攻略

绝大多数 Dockerfile 写得不安全、不可复现、体积臃肿,根本原因不是语法不会,而是没想清楚“镜像到底该封装什么”。

FROM 选哪个基础镜像才不算埋雷

别直接写 FROM ubuntu:latest 或 FROM python:latest——latest 标签不固定,CI 构建可能突然失败;Ubuntu 镜像默认带大量非运行必需的包(如 man、vim),徒增体积和攻击面。

  • 优先用 slim 或 alpine 变体:python:3.12-slim(Debian 基础,兼容性好)或 python:3.12-alpine(更小,但注意 glibc vs musl 兼容性)
  • 明确指定小版本号,例如 node:20.11.1,避免 patch 版本漂移导致行为差异
  • 生产环境禁用 scratch(空镜像)直连,除非你真清楚自己在做什么——没有 shell、没有 ls、没有调试能力

COPY 和 ADD 到底该用谁、什么时候用

ADD 看似功能多(支持自动解压、远程 URL),但实际场景中几乎不需要它;滥用 ADD 会破坏构建缓存、引入不可控行为(比如自动解压 tar 包可能覆盖已有文件)。

  • 一律用 COPY:只做“把宿主机文件/目录复制进镜像”这一件事,语义清晰、可预测
  • ADD 唯一合理场景:从远程 URL 下载并解压归档(如 ADD https://example.com/app.tar.gz /app/),但更推荐用 curl | tar 分步控制
  • COPY --chown=user:group 要早用:避免后续 RUN chown 多一层镜像层,也防止权限错误导致容器启动失败

RUN 指令怎么写才能少一层、少一个漏洞

每个 RUN 指令都会生成一个新镜像层,层越多,镜像越臃肿,缓存失效风险越高;同时,把安装、清理拆成两行 RUN,中间层会残留缓存包,白给攻击面。

  • 合并操作:用 && 连接命令,末尾加 && rm -rf /var/lib/apt/lists/*(Debian/Ubuntu)或 && apk del .build-deps(Alpine)清理临时文件
  • 避免 RUN pip install 直接装全量依赖:先 COPY requirements.txt,再 RUN pip install -r requirements.txt,这样只要 requirements.txt 不变,pip 安装步骤就能命中缓存
  • 禁止在 RUN 中写密码、密钥、token——哪怕只是临时变量,也会留在某一层里,用 docker history 就能看见

容器启动失败?先盯紧 WORKDIR、USER、CMD 这三个指令

很多“本地跑得好,容器里起不来”的问题,根源不在代码,而在这三个看似简单的指令配置错位。

  • WORKDIR 必须是绝对路径,且最好在 COPY 之前就设好,否则相对路径容易出错;它还决定了 CMD 和 ENTRYPOINT 的执行上下文
  • USER 要在最后设(即所有需要 root 权限的操作完成后),且必须是已存在的用户(adduser 或 useradd 创建),不能只写 USER 1001 却没建对应用户
  • CMD 推荐用 JSON 数组格式:CMD ["python", "app.py"];避免 CMD python app.py(shell 形式)——后者会绕过 ENTRYPOINT,且无法接收信号(如 SIGTERM)

最常被忽略的一点:Dockerfile 不是 Shell 脚本,它的每一行都是独立执行环境;上一行 export PATH=... 对下一行完全无效。所有路径、环境、权限,都得显式声明、显式传递。

热门游戏推荐
热门游戏推荐

海量精品小游戏合集,无需安装即点即玩,休闲益智、动作闯关应有尽有,秒开即玩,轻松解压,快乐停不下来

下载

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热门AI工具

更多
二狗PPT
二狗PPT Hot

一款AI演示文稿工具,主要用于专为中式职场打造的AI PPT生成工具,适合需要提升相关任务效率的用户。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

切问学术

切问学术是一款AI论文写作工具,复旦大学NLP团队推出的AI学术智能体。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

咔片AIPPT

一款在线AI演示文稿制作工具,可根据主题和内容需求辅助生成PPT结构与页面,提高演示材料制作效率。

火山引擎

火山引擎是一款面向企业的云计算与AI服务平台。

UpDream
UpDream Hot

一款AI视频创作工具,主要用于哔哩哔哩推出的自研AI视频创作工具,适合需要提升相关任务效率的用户。

VibeKnow
VibeKnow Hot

一款AI视频创作工具,主要用于全球首个AI知识视频创作平台,文档、文章、网页,一键生成视频,适合需要提升相关任务效率的用户。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

相关专题

更多
json数据格式
json数据格式

JSON是一种轻量级的数据交换格式。本专题为大家带来json数据格式相关文章,帮助大家解决问题。

2035

2023.08.07

json是什么
json是什么

JSON是一种轻量级的数据交换格式,具有简洁、易读、跨平台和语言的特点,JSON数据是通过键值对的方式进行组织,其中键是字符串,值可以是字符串、数值、布尔值、数组、对象或者null,在Web开发、数据交换和配置文件等方面得到广泛应用。本专题为大家提供json相关的文章、下载、课程内容,供大家免费下载体验。

3002

2023.08.23

jquery怎么操作json
jquery怎么操作json

操作的方法有:1、“$.parseJSON(jsonString)”2、“$.getJSON(url, data, success)”;3、“$.each(obj, callback)”;4、“$.ajax()”。更多jquery怎么操作json的详细内容,可以访问本专题下面的文章。

1016

2023.10.13

go语言处理json数据方法
go语言处理json数据方法

本专题整合了go语言中处理json数据方法,阅读专题下面的文章了解更多详细内容。

3399

2025.09.10

pip安装使用方法
pip安装使用方法

安装步骤:1、确保Python已经正确安装在您的计算机上;2、下载“get-pip.py”脚本;3、按下Win + R键,然后输入cmd并按下Enter键来打开命令行窗口;4、在命令行窗口中,使用cd命令切换到“get-pip.py”所在的目录;5、执行安装命令;6、验证安装结果即可。大家可以访问本专题下的文章,了解pip安装使用方法的更多内容。

2750

2023.10.09

更新pip版本
更新pip版本

更新pip版本方法有使用pip自身更新、使用操作系统自带的包管理工具、使用python包管理工具、手动安装最新版本。想了解更多相关的内容,请阅读专题下面的文章。

6343

2024.12.20

pip设置清华源
pip设置清华源

设置方法:1、打开终端或命令提示符窗口;2、运行“touch ~/.pip/pip.conf”命令创建一个名为pip的配置文件;3、打开pip.conf文件,然后添加“[global];index-url = https://pypi.tuna.tsinghua.edu.cn/simple”内容,这将把pip的镜像源设置为清华大学的镜像源;4、保存并关闭文件即可。

7922

2024.12.23

python升级pip
python升级pip

本专题整合了python升级pip相关教程,阅读下面的文章了解更多详细内容。

3927

2025.07.23

FrankenPHP集成Laravel详细教程
FrankenPHP集成Laravel详细教程

本专题提供FrankenPHP集成Laravel的详细配置指南,全面解析运行原理、开发环境搭建、Caddyfile配置、Octane工作模式、数据库连接、队列任务、定时任务和生产环境优化,解决部署过程中常见的报错与兼容性问题。

40

2026.10.08

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
热门推荐
/
最新课程
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn