基礎(chǔ)鏡像有:1、應(yīng)用鏡像(nginx、redis、mongo、mysql、httpd、php、tomcat等);2、編程語(yǔ)言鏡像(node、oraclejdk、openjdk、python、golang等);3、空白鏡像“scratch”。
本教程操作環(huán)境:linux5.9.8系統(tǒng)、docker-1.13.1版、Dell G3電腦。
Docker基礎(chǔ)鏡像是什么
我們通常會(huì)以一個(gè)鏡像為基礎(chǔ),在其上進(jìn)行定制,這就是基礎(chǔ)鏡像。
就像運(yùn)行了一個(gè) nginx
鏡像的容器,再進(jìn)行修改一樣。在DockerFile中基礎(chǔ)鏡像是必須指定的 (FROM 就是指定 基礎(chǔ)鏡像,因此一個(gè) Dockerfile 中 FROM 是必備的指令,并且必須是第一條指令)
比如構(gòu)建一個(gè)Java應(yīng)用的鏡像,選擇一個(gè)Oracle JDK的鏡像作為基礎(chǔ)鏡像比選擇一個(gè)alpine鏡像作為基礎(chǔ)鏡像更方便。
Docker基礎(chǔ)鏡像都有哪些
在 Docker Hub 上有非常多的高質(zhì)量的官方鏡像,可以在其中尋找一個(gè)最符合我們最終目標(biāo)的鏡像為基礎(chǔ)鏡像進(jìn)行定制。
有應(yīng)用鏡像,如 nginx
、redis
、mongo
、mysql
、httpd
、php
、tomcat
等;
有方便開(kāi)發(fā)、構(gòu)建、運(yùn)行各種語(yǔ)言應(yīng)用的編程語(yǔ)言鏡像,如 node
、oraclejdk
,openjdk
、python
、ruby
、golang
等。
還有更為基礎(chǔ)的操作系統(tǒng)鏡像,如 ubuntu
、debian
、centos
、fedora
、alpine
等,這些操作系統(tǒng)的軟件庫(kù)為我們提供了更廣闊的擴(kuò)展空間。
除了選擇現(xiàn)有鏡像為基礎(chǔ)鏡像外,Docker 還存在一個(gè)特殊的鏡像,名為 scratch
。這個(gè)鏡像是虛擬的概念,并不實(shí)際存在,它表示一個(gè)空白的鏡像。
如果你在DockerFIle中以 scratch
為基礎(chǔ)鏡像的話(FROM scratch
),意味著你不以任何鏡像為基礎(chǔ),接下來(lái)所寫(xiě)的指令將作為鏡像第一層開(kāi)始存在。不以任何系統(tǒng)為基礎(chǔ),直接將可執(zhí)行文件復(fù)制進(jìn)鏡像的做法并不罕見(jiàn),比如 swarm
、coreos/etcd
。對(duì)于 Linux 下靜態(tài)編譯的程序來(lái)說(shuō),并不需要有操作系統(tǒng)提供運(yùn)行時(shí)支持,所需的一切庫(kù)都已經(jīng)在可執(zhí)行文件里了,因此直接 FROM scratch
會(huì)讓鏡像體積更加小巧。使用 Go 語(yǔ)言 開(kāi)發(fā)的應(yīng)用很多會(huì)使用這種方式來(lái)制作鏡像,這也是為什么有人認(rèn)為 Go 是特別適合容器微服務(wù)架構(gòu)的語(yǔ)言的原因之一。
推薦學(xué)習(xí):《docker視頻教程》