鏡像是 Docker 容器的基石,容器是鏡像的運行實例,有了鏡像才能啓動容器。docker
本章內容安排以下:學習
首先經過研究幾個典型的鏡像,分析鏡像的內部結構。ui
而後學習如何構建本身的鏡像。spa
最後介紹怎樣管理和分發鏡像。操作系統
爲何咱們要討論鏡像的內部結構?code
若是隻是使用鏡像,固然不須要了解,直接經過 docker
命令下載和運行就能夠了。orm
但若是咱們想建立本身的鏡像,或者想理解 Docker 爲何是輕量級的,就很是有必要學習這部分知識了。ci
咱們從一個最小的鏡像開始吧。it
hello-world 是 Docker 官方提供的一個鏡像,一般用來驗證 Docker 是否安裝成功。class
咱們先經過 docker pull
從 Docker Hub 下載它。
用 docker images
命令查看鏡像的信息。
hello-world 鏡像居然還不到 2KB!
經過 docker run
運行。
其實咱們更關心 hello-world 鏡像包含哪些內容。
Dockerfile 是鏡像的描述文件,定義瞭如何構建 Docker 鏡像。Dockerfile 的語法簡潔且可讀性強,後面咱們會專門討論如何編寫 Dockerfile。
hello-world 的 Dockerfile 內容以下:
只有短短三條指令。
FROM scratch
此鏡像是從白手起家,從 0 開始構建。
COPY hello /
將文件「hello」複製到鏡像的根目錄。
CMD ["/hello"]
容器啓動時,執行 /hello
鏡像 hello-world 中就只有一個可執行文件 「hello」,其功能就是打印出 「Hello from Docker ......」 等信息。
/hello 就是文件系統的所有內容,連最基本的 /bin,/usr, /lib, /dev 都沒有。
hello-world 雖然是一個完整的鏡像,但它並無什麼實際用途。一般來講,咱們但願鏡像能提供一個基本的操做系統環境,用戶能夠根據須要安裝和配置軟件。這樣的鏡像咱們稱做 base 鏡像。
咱們下一節討論 base 鏡像。