鏡像是 Docker 容器的基石,容器是鏡像的運行實例,有了鏡像才能啟動容器。
本章內容安排如下:
-
首先通過研究幾個典型的鏡像,分析鏡像的內部結構。
-
然后學習如何構建自己的鏡像。
-
最后介紹怎樣管理和分發鏡像。
鏡像的內部結構
為什么我們要討論鏡像的內部結構?
如果只是使用鏡像,當然不需要了解,直接通過 docker
命令下載和運行就可以了。
但如果我們想創建自己的鏡像,或者想理解 Docker 為什么是輕量級的,就非常有必要學習這部分知識了。
我們從一個最小的鏡像開始吧。
hello-world - 最小的鏡像
hello-world 是 Docker 官方提供的一個鏡像,通常用來驗證 Docker 是否安裝成功。
我們先通過 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 鏡像。
文章列表