簡介
Docker 在 2013 年釋出,它把 container 標準化,有效降低使用 container 的難度,很快就成為一個火紅的技術。
更多資訊可以上維基百科查詢,在這裡提一下 Docker 帶來的好處:
- Docker 讓環境統一變得更容易,這有助於設計持續整合、持續部署的架構。
- 只要雲端服務或機器支援 Docker,就能運行 Docker 包裝好的服務。
- Docker 使用
Dockerfile
的純文字檔做為建置 image 的來源,這代表 Docker 實現了環境即程式碼(Infrastructure-as-code,IaC),環境資訊可以被版控系統記錄。 - 同為虛擬化技術,Docker(或指 container)的資源使用率較 VM 好,它直接跟底層共用作業系統,不需中間再隔一層作業系統虛擬層,因此啟動 container 非常快。
- Docker 應用場景橫跨開發與維運,也是 DevOps 熱門技能之一。
小弟運氣很好,在 2015 年遇到了 Docker 並開始學習,算很早就趕上這班車。當時因為對 Docker 特性不理解而踩過非常多雷,這些都對了解 Docker 基本特性有非常大的幫助。
未來將會用入門學習 Docker 的角度來跟大家分享,三十天會拆成三個階段各十天如下:
- 熟悉 Docker 基礎的十天 - 了解如何操作 Docker 完成簡單任務。
- 創造 Docker Image 的十天 - 網路上找到 Image 不滿意嗎?那就自己建一個!
- 深入了解 Docker 的十天 - 遇到越複雜的情境,就越需要更加基礎的知識。
本作定位為教學系列文,每篇文章固定有一個特殊段落為今日自我回顧,裡面是以讀者角度撰寫出來的行為,讓讀者可以快速了解自己是否了解該文章的內容。
Docker 是一個學無止盡的技術,只靠三十天是無法說明完,因此今天會先列出本系列文章的範圍與限制。
前置技能
類似 Laravel 原始碼分析,閱讀未來三十天的文章,會預期讀者已具備以下基礎知識:
- 使用常見指令操作 Linux
- 了解在 Linux 如何控制 process 的狀態
- 網路底層相關知識,包含 router、mask
- 常見 server 的運作原理,如 NAT、DHCP、DNS 等
- 了解 HTTP 與 TLS 應用
以 Linux + CLI 為主
以 Linux 為主的原因是,Docker 應用在 Linux 相較還是比較成熟;另一個原因則是:我沒有 Windows 電腦可以測試。
以 CLI 為主的理由則跟學習 git 的狀況很類似,GUI 的背後都有對應的指令,因此了解指令還是非常重要的。如果文章有提到新指令或新參數,會在當天最後加上指令補充說明的段落,讓讀者可以查詢或複習。
如果對 GUI 有興趣的可以參考下面的連結:
當對 Docker 原理了解清楚後,但又想在 CLI 方便管理 Docker 的話,則可以使用下面這個套件:
術語表
在介紹 Docker 原理時,會有非常多專有術語,下面是一個簡單的英中對照表(英文字母序):
英文 | 中文 |
---|---|
build | 建置 |
container | 容器 |
host | 本機、主機、宿主 |
image | 映像檔 |
registry | 倉庫註冊伺服器 [1] |
repository | 倉庫 [1] |
volume | 資料卷 [2] |
提供英中對照表的目的,是為了讓讀者在查詢資訊時,可以有不一樣的關鍵字選擇。
未來三十天的文章裡,若有要使用上面的術語,會盡可能使用英文。
[1]: 參考《Docker —— 從入門到實踐》正體中文版翻譯
[2]: 參考《Docker —— 從入門到實踐》正體中文版翻譯
Docker 版本參考
文章裡的範例都是有試驗並成功的。Docker 有些功能不一定會向下相容,如果測試遇到問題時,建議可以先來對一下版本資訊。
$ docker version |