基础镜像有:1、应用镜像(nginx、redis、mongo、mysql、httpd、php、tomcat等);2、编程语言镜像(node、oraclejdk、openjdk、python、golang等);3、空白镜像“scratch”。
本教程操作环境:linux5.9.8系统、docker-1.13.1版、Dell G3电脑。
Docker基础镜像是什么
我们通常会以一个镜像为基础,在其上进行定制,这就是基础镜像。
就像运行了一个 nginx
镜像的容器,再进行修改一样。在DockerFile中基础镜像是必须指定的 (FROM 就是指定 基础镜像,因此一个 Dockerfile 中 FROM 是必备的指令,并且必须是第一条指令)
比如构建一个Java应用的镜像,选择一个Oracle JDK的镜像作为基础镜像比选择一个alpine镜像作为基础镜像更方便。
Docker基础镜像都有哪些
在 Docker Hub 上有非常多的高质量的官方镜像,可以在其中寻找一个最符合我们最终目标的镜像为基础镜像进行定制。
有应用镜像,如 nginx
、redis
、mongo
、mysql
、httpd
、php
、tomcat
等;
有方便开发、构建、运行各种语言应用的编程语言镜像,如 node
、oraclejdk
,openjdk
、python
、ruby
、golang
等。
还有更为基础的操作系统镜像,如 ubuntu
、debian
、centos
、fedora
、alpine
等,这些操作系统的软件库为我们提供了更广阔的扩展空间。
除了选择现有镜像为基础镜像外,Docker 还存在一个特殊的镜像,名为 scratch
。这个镜像是虚拟的概念,并不实际存在,它表示一个空白的镜像。
如果你在DockerFIle中以 scratch
为基础镜像的话(FROM scratch
),意味着你不以任何镜像为基础,接下来所写的指令将作为镜像第一层开始存在。不以任何系统为基础,直接将可执行文件复制进镜像的做法并不罕见,比如 swarm
、coreos/etcd
。对于 Linux 下静态编译的程序来说,并不需要有操作系统提供运行时支持,所需的一切库都已经在可执行文件里了,因此直接 FROM scratch
会让镜像体积更加小巧。使用 Go 语言 开发的应用很多会使用这种方式来制作镜像,这也是为什么有人认为 Go 是特别适合容器微服务架构的语言的原因之一。
推荐学习:《docker视频教程》