原文链接

如果您像我一样,第一次创建Dockerfile并从DockerHub页面中选择镜像时,您会彻底困惑。有时候,像这样的选择会让我们的行动停滞不前,所以也许我们只是用标准的镜像,避免深入研究,这样我们就可以继续我们的项目。

但最好了解Docker镜像类型之间的差异,以便为应用程序或脚本选择正确的Docker镜像。要知道这个决定不是永久的。您可以随时更改Dockerfile中的镜像,并重建镜像。请确保在部署到生产环境之前进行彻底的测试。

简而言之,docker镜像之间的区别在于底层的操作系统。以下是每种类型的介绍

full official image

我将使用python和node作为例子,因为这些是我最常用的docker镜像,这也同样适用于任何镜像。根据DockerHub,这是事实上的标准镜像,如果你不确定,你应该使用它。

  • python:3.8.3
  • node:14.1.1

这些镜像基于最新的稳定Debian操作系统发行版。 当我试图让一个项目快速启动和运行时,我通常会从其中的一个开始,我并不关心最终镜像的大小。完整镜像是最安全的选择

buster/stretch/jessie

  • buster:Debian 10
  • stretch:Debian 9
  • jessie:Debian 8

带有stretch、buster或jessie标签的镜像是不同Debian发行版的代号。

在撰写本文时,稳定的Debian发行版是10.4,它的代号是“buster”。 “stretch”是所有版本9变种的代号,“jessie”是所有版本8变种的代号。

正在开发的未来版本是“bullseye ”和“bookworm”,但还不稳定。你可能会在DockerHub上的镜像版本列表中看到这些标签。

如果您的代码与Debian操作系统的特定版本兼容,请选择其中一个镜像。在开始一个新项目时,你很少需要使用旧版本的Debian。

slim

slim的镜像是完整镜像的配对版本。这个镜像通常只安装运行特定工具所需的最小包。以python为例,就是运行python的最小包,node.js同理。

通过省去较少使用的工具,镜像会更小。如果有空间限制且不需要完整版本,请使用此镜像。

**但是,在使用这个镜像时,一定要进行彻底的测试!**如果您遇到无法解释的错误,请尝试切换到完整的镜像,看看是否能够解决问题。

alpine

alipine镜像基于alpine linux项目,这是一个专门为容器内部使用而构建的操作系统。在很长一段时间里,这些是最受欢迎的镜像变体,因为它们的尺寸很小。

然而,一些团队正在弃用alpine镜像,因为这些镜像可能会导致难以调试的兼容性问题。具体来说,如果使用python镜像,一些 wheels将被构建成与Debian兼容,并且需要重新编译,才能与基于apline的镜像一起工作。

使用alpine镜像的主要原因是使你得到的镜像尽可能小。基础镜像将小于5MB。python基础镜像(将python添加到基础alpine镜像)目前是78.9MB。这仍然很小。

如果考虑到空间问题,强烈推荐使用此镜像。

它的缺点是不包含一些你可能会需要的包。主要是,它使用了一个更小的musl lib代替glibc。如果您的应用程序有特定的libc需求,您可能会遇到问题。

如果你发现Alpine镜像缺少你需要的东西,你可以直接在Dockerfile中安装它,这样能确保镜像只包含你需要的内容。需要注意,如果您正在安装外部包,您的Dockerfile将会更改。主要的区别是,您将使用apk而不是apt-get来安装包。

对alpine镜像的使用有很多担心之处,所以你需要充分了解它。需要充分阅读文档并研究。 同样,如果您在构建Dockerfile时遇到了无法解释的问题,请尝试切换到完整的镜像,看看是否能解决问题。

windowsservercore

我很少使用windows,我现在坚定地站在Mac / Linux阵营,但如果你的应用程序只运行在windows或windows Server上,这就是为你准备的镜像。

综述 如何选择镜像

以下是我使用的通用准则:

  • 如果我需要快速启动并运行项目,没有空间限制,并且没有时间进行太多测试,那么我就使用实际的标准镜像。 我最关心的是镜像有我需要的所有东西,镜像大小并不关心。

  • 如果空间是一个问题,并且我知道我只需要最小的包来运行特定的语言,如python,我会选择slim

  • 对于一些我有时间彻底测试的项目,并且有极端的空间限制,我将使用alpine镜像。但是要注意,这可能会导致更长的构建时间和不确定的bug。 如果您在将docker容器移植到新环境时遇到了困难,或者在添加新包时出现了故障,这可能是因为Alpine镜像。

  • 最后,滚动到特定镜像的DockerHub页面底部,阅读有关选择镜像的建议。

关于版本的说明

不要在生产系统Dockerfile中使用<image>:latest。这样做将总是获取最新的镜像,并且应用程序的依赖项可能与未来的版本不兼容。

当开始一个新项目时,我通常会从最近标记的版本开始,进行彻底的测试,然后根据需要升级,在投入生产之前进行彻底的测试。

02.docker镜像的区别--Alpine、Slim、Stretch、Buster、Jessie、Bullseye相关推荐

  1. Docker 镜像,基于 alpine 系统的时区配置

    在 Java 开发中使用 Docker 镜像时,由于 alpine 提供的 linux 环境的镜像特别的小,只有 5M 左右,集成 openjdk 后的大小也在 100M 以内,因此应用非常广泛,在 ...

  2. alpine linux时区,Docker 镜像,基于 alpine 系统的时区配置

    在 Java 开发中使用 Docker 镜像时,由于 alpine 提供的 linux 环境的镜像特别的小,只有 5M 左右,集成 openjdk 后的大小也在 100M 以内,因此应用非常广泛,在 ...

  3. docker Alpine一个只有5M小而美的Docker镜像

    docker Alpine一个只有5M小而美的Docker镜像 参考链接: Alpine 一个只有5M的Docker镜像 http://www.infoq.com/cn/news/2016/01/Al ...

  4. docker $PWD路径_深入浅出Docker 镜像

    技术头条:干货.简洁.多维全面.更多云计算精华知识尽在眼前,get要点.solve难题,统统不在话下! 作为云计算的当红明星Docker 来势汹汹,它就像一场森林大火,烧到了我们中间.因为工作的原因, ...

  5. 深入浅出Docker 镜像 | 技术头条

    戳蓝字"CSDN云计算"关注我们哦! 技术头条:干货.简洁.多维全面.更多云计算精华知识尽在眼前,get要点.solve难题,统统不在话下! 作为云计算的当红明星Docker 来势 ...

  6. 构建最小JDK Docker镜像 或者直接使用镜像:frolvlad/alpine-oraclejre8:slim

    直接使用镜像:frolvlad/alpine-oraclejre8:slim 参考: https://my.oschina.net/shyloveliyi/blog/1627020 1.首先下载jre ...

  7. docker镜像的版本(bullseye、buster、slim、alphine)

    docker镜像的版本(bullseye.buster.slim-xxx.alphine 版本含义 版本含义 以 Python 的官方镜像为例不同版本含义如下 1.buster.jessie.stre ...

  8. docker中使用golang:alpine镜像制作开启goweb的dockerfile

    docker中使用golang:alpine镜像制作开启goweb的dockerfile go的web代码 package mainimport("net/http""f ...

  9. linux docker漏洞,安装shadow或linux-pam的Alpine Linux Docker镜像有漏洞,附解决

    只要你在 Alpine Linux 系统 Docker 镜像中安装有 shadow 或 linux-pam 软件包,那么这个镜像是有安全漏洞的,需要尽快修补,要说明的是,其他 Alpine Linux ...

最新文章

  1. vue $emit、$on、$refs简介
  2. 大爷与支付宝同名,曾想状告阿里巴巴侵权,现在过得怎么样
  3. 【转】freetextbox的ToolBarLayout属性设置
  4. 超清晰的 DNS 原理入门指南 (资源)
  5. 一起来当网管(一)——Windows Server上的DHCP配置
  6. 【Gym-101889 D】Daunting device【分块】
  7. 关于流行的几点思考——《引爆点》读书笔记
  8. 信道编码:编码FEC 前向纠错码
  9. 如何恢复被删短信_手机短信删除了怎么恢复?超级简单的两种方法
  10. java常用逻辑运算
  11. 【Python】Python网络爬虫-电视剧《平凡的荣耀》数据爬取与分析
  12. 手机盾验证失败是什么意思_手机盾是什么意思
  13. Pytorch 之torch.nn初探
  14. 使用Flexible.js实现手机端网页内容适配(rem适配法)
  15. python股票接口_股市python接口
  16. AjaxFileUpload组件结合Struts2异步图片上传
  17. 【拓扑学知识】2.连续同胚映射
  18. apache中的php模块安装
  19. Java将数据信息写入文件文件的几种实现方法
  20. 15.7数据库(7):MySQL创建校园数据库

热门文章

  1. JAVA实现基于k-means聚类算法实现微博舆情热点分析系统
  2. python里raise是什么意思_python raise有什么用
  3. 英勇行动海豹突击队 感
  4. JAVA知识点-适合自学、面试
  5. Android录音下————AudioRecord源码分析
  6. Python《机器学习实战》读书笔记(四)——朴素贝叶斯
  7. 推荐免费小巧图片大小处理工具--Image Resizer for Windows
  8. Linux卸载安装bind,Bind编译安装详解
  9. 高通与安卓水火不容 Android音频系统缺陷测评
  10. App渠道打包的最佳攻略,一次解决打包难题