Docker基础镜像是什么?都有哪些?

1,666 阅读2分钟

参考:DockerFile的基础镜像如何选择Docker基础镜像

概念

  • 我们通常会以一个镜像为基础,在其上进行定制,这就是基础镜像。
  • 就像运行了一个 nginx 镜像的容器,再进行修改一样。在DockerFile中基础镜像是必须指定的 (FROM 就是指定 基础镜像,因此一个 Dockerfile 中 FROM 是必备的指令,并且必须是第一条指令)
  • 比如构建一个Java应用的镜像,选择一个Oracle JDK的镜像作为基础镜像比选择一个alpine镜像作为基础镜像更方便。

都有哪些

在 Docker Hub 上有非常多的高质量的官方镜像,可以在其中寻找一个最符合我们最终目标的镜像为基础镜像进行定制。

  • 应用镜像,如 nginxredismongomysqlhttpdphptomcat 等;
  • 有方便开发、构建、运行各种语言应用的编程语言镜像,如 nodeoraclejdkopenjdkpythonrubygolang 等。
  • 还有更为基础的操作系统镜像,如 ubuntudebiancentosfedoraalpine 等,这些操作系统的软件库为我们提供了更广阔的扩展空间。
  • 除了选择现有镜像为基础镜像外,Docker 还存在一个特殊的镜像,名为 scratch。这个镜像是虚拟的概念,并不实际存在,它表示一个空白的镜像。
  • 如果你在DockerFIle中以 scratch 为基础镜像的话(FROM scratch),意味着你不以任何镜像为基础,接下来所写的指令将作为镜像第一层开始存在。不以任何系统为基础,直接将可执行文件复制进镜像的做法==并不罕见==,比如 swarmcoreos/etcd。对于 Linux 下静态编译的程序来说,并不需要有操作系统提供运行时支持,所需的一切库都已经在可执行文件里了,因此直接 FROM scratch 会让镜像体积更加小巧。==使用 Go 语言 开发的应用很多会使用这种方式来制作镜像==,这也是为什么有人认为 Go 是特别适合容器微服务架构的语言的原因之一。

==😁欢迎加入QQ群交流: [游戏-Web-开发技术栈 ☄️] '300567032'== ==点击下方图标一键加入!== 游戏-Web-开发技术栈 ☄