京公网安备 11010802034615号
经营许可证编号:京B2-20210330
1. 选择Debian
官方镜像的大多数Dockerfile,不管是直接还是通过其他镜像,都是基于Debian的。Dockerfile版本通常跟特定的发行版挂钩,正常是使用稳定版(wheezy),有些是测试版(jessie),还有是不稳定版(sid)。Debian镜像的主要好处是文件小,加起来才85.1MB,而Ubuntu要200MB。指定准确的发行版可以预防一些问题,比如,即使标上latest的发行版升级了,构建也不会崩溃。
2. 确定来源
如果要用户信赖你的镜像,你就要考虑如果验证此镜像上的所有软件的真实性。如果通过apt-get方式从Debian的仓库获取,这个验证过程已经被解决了。如果从网上下载文件,或者从第三方仓库安装软件,你就应该通过校验和、数字签名等方式验证这些文件。比如,为了验证nginx包,nginx的Dockerfile会做如下操作:
RUN apt-key adv --keyserver pgp.mit.edu --recv-keys 573BFD6B3D8FBC641079A6ABABF5BD827BD9BF62
RUN echo "deb http://nginx.org/packages/mainline/debian/ wheezy nginx" >> /etc/apt/sources.list
ENV NGINX_VERSION 1.7.7-1~wheezy
RUN apt-get update && apt-get install -y nginx=${NGINX_VERSION}
注意nginx也是跟一个特定的版本关联的。这种做法可以保证,维护者测试的镜像跟构建工具构建的是相同的。但是,这个假设也不是绝对的,因为nginx本身的依赖也会随时间变化(比如有些依赖会标明>=某个版本)。
你自己也可以对下载的文件做相似的操作,计算文件校验和,然后跟本地版本(stored version)比较。这些操作都由Redis Dockerfile做过了。另外,有些下载的文件可能包含签名文件,你可以通过gpg来验证,通常这些操作都由官方镜像做过了。
不幸的是,一些官方镜像也没能定期正确地进行这些验证操作,或者只验证了部分文件,所以查看官方Dockerfile时要注意下。
3. 移除构建依赖
如果通过源码编译构建,你的镜像通常比需要的大很多。可能的话,在同一条RUN指令中,安装构建工具、构建软件,然后移除构建工具。虽然这样做又诡异又恼人,但是可以省下几百MB空间。在不同的指令中删除文件是没有意义的,因为这些文件已经被打包进镜像了。我们看下Redis Dockerfile是怎么做的:
RUN buildDeps='gcc libc6-dev make'; \
set -x \
&& apt-get update && apt-get install -y $buildDeps --no-install-recommends \
&& rm -rf /var/lib/apt/lists/* \
&& mkdir -p /usr/src/redis \
&& curl -sSL "$REDIS_DOWNLOAD_URL" -o redis.tar.gz \
&& echo "$REDIS_DOWNLOAD_SHA1 *redis.tar.gz" | sha1sum -c - \
&& tar -xzf redis.tar.gz -C /usr/src/redis --strip-components=1 \
&& rm redis.tar.gz \
&& make -C /usr/src/redis \
&& make -C /usr/src/redis install \
&& ln -s redis-server "$(dirname "$(which redis-server)")/redis-sentinel" \
http://cda.pinggu.org/
&& rm -r /usr/src/redis \
&& apt-get purge -y --auto-remove $buildDeps
gcc, libc和make在同一条指令中先被安装,使用,然后被删掉。另外注意下,作者还删除了不会被使用的tar.gz源文件夹。顺带提下,这些代码也演示了如何使用sha1sum来验证Redis下载文件的校验和。
4. 选择gosu
gosu实用工具,通常用在ENTRYPOINT指令调用的脚本中,这些ENTRYPOINT指令位于官方镜像的Dockerfile中。它是个类sudo的简单工具,接受并运行特定用户的特定指令。但是gosu可以避免sudo怪异恼人的TTY和信号转发(signal-forwarding)行为。
看下这篇编写入口点脚本的官方建议https://docs.docker.com/articles/dockerfile_best-practices/,大多数官方镜像都遵循该建议。
5. 选择buildpack-deps基础镜像
很多Docker的"language-stack"镜像都是基于 buildpack-deps 基 础镜像,该镜像包含了通常开发所必须的头文件和工具(比如源码管理工具)。如果你想构建一个language-stack镜像,使用这个基础镜像可以省下 不少时间。但是向镜像添加非必须的东西也遭受了很多批评,这导致了一些仓库,如Node提供了直接基于Debian的可选slim包(完整的Node镜像 有728MB,slim只有291.4MB)。但是记住用户可能需要某些开发库,同时也通过某种途径下载了基础镜像。
6. 使用描述性标签
所有的官方镜像都提供了很多标签。像latest标签一样,提供一个版本标签是种好做法,这样用户就不用担心基础镜像变更而破坏容器。官方镜像做了更多, 提供了上文提及的精简slim镜像,以及自动导入和编译的onbuild镜像。镜像打上onbuild标签,即使转移代码再编译,来新建子镜像,用户也不会太意外。
数据分析咨询请扫描二维码
若不方便扫码,搜微信号:CDAshujufenxi
在数据分析、业务决策、科学研究等领域,统计模型是连接原始数据与业务价值的核心工具——它通过对数据的规律提炼、变量关联分析 ...
2026-02-14在SQL查询实操中,SELECT * 与 SELECT 字段1, 字段2,...(指定个别字段)是最常用的两种查询方式。很多开发者在日常开发中,为了 ...
2026-02-14对CDA(Certified Data Analyst)数据分析师而言,数据分析的核心不是孤立解读单个指标数值,而是构建一套科学、完整、贴合业务 ...
2026-02-14在Power BI实操中,函数是实现数据清洗、建模计算、可视化呈现的核心工具——无论是简单的数据筛选、异常值处理,还是复杂的度量 ...
2026-02-13在互联网运营、产品迭代、用户增长等工作中,“留存率”是衡量产品核心价值、用户粘性的核心指标——而次日留存率,作为留存率体 ...
2026-02-13对CDA(Certified Data Analyst)数据分析师而言,指标是贯穿工作全流程的核心载体,更是连接原始数据与业务洞察的关键桥梁。CDA ...
2026-02-13在机器学习建模实操中,“特征选择”是提升模型性能、简化模型复杂度、解读数据逻辑的核心步骤——而随机森林(Random Forest) ...
2026-02-12在MySQL数据查询实操中,按日期分组统计是高频需求——比如统计每日用户登录量、每日订单量、每日销售额,需要按日期分组展示, ...
2026-02-12对CDA(Certified Data Analyst)数据分析师而言,描述性统计是贯穿实操全流程的核心基础,更是从“原始数据”到“初步洞察”的 ...
2026-02-12备考CDA的小伙伴,专属宠粉福利来啦! 不用拼运气抽奖,不用复杂操作,只要转发CDA真题海报到朋友圈集赞,就能免费抱走实用好礼 ...
2026-02-11在数据科学、机器学习实操中,Anaconda是必备工具——它集成了Python解释器、conda包管理器,能快速搭建独立的虚拟环境,便捷安 ...
2026-02-11在Tableau数据可视化实操中,多表连接是高频操作——无论是将“产品表”与“销量表”连接分析产品销量,还是将“用户表”与“消 ...
2026-02-11在CDA(Certified Data Analyst)数据分析师的实操体系中,统计基本概念是不可或缺的核心根基,更是连接原始数据与业务洞察的关 ...
2026-02-11在数字经济飞速发展的今天,数据已成为核心生产要素,渗透到企业运营、民生服务、科技研发等各个领域。从个人手机里的浏览记录、 ...
2026-02-10在数据分析、实验研究中,我们经常会遇到小样本配对数据的差异检验场景——比如同一组受试者用药前后的指标对比、配对分组的两组 ...
2026-02-10在结构化数据分析领域,透视分析(Pivot Analysis)是CDA(Certified Data Analyst)数据分析师最常用、最高效的核心实操方法之 ...
2026-02-10在SQL数据库实操中,字段类型的合理设置是保证数据运算、统计准确性的基础。日常开发或数据分析时,我们常会遇到这样的问题:数 ...
2026-02-09在日常办公数据分析中,Excel数据透视表是最常用的高效工具之一——它能快速对海量数据进行分类汇总、分组统计,将杂乱无章的数 ...
2026-02-09表结构数据作为结构化数据的核心载体,其“获取-加工-使用”全流程,是CDA(Certified Data Analyst)数据分析师开展专业工作的 ...
2026-02-09在互联网产品运营、用户增长的实战场景中,很多从业者都会陷入一个误区:盲目投入资源做推广、拉新,却忽视了“拉新后的用户激活 ...
2026-02-06