Docker 在 2013 年釋出,它把 container 標準化,有效降低使用 container 的難度,很快就成為一個火紅的技術。
更多資訊可以上維基百科查詢,筆者在這裡提一下 Docker 帶來的好處:
Dockerfile
的純文字檔做為建置 image 的來源,這代表 Docker 實現了環境即程式碼(Infrastructure-as-code,IaC),環境資訊可以被版控系統記錄。筆者運氣很好,在 2015 年遇到了 Docker 並開始學習,算很早就趕上這班車。當時因為對 Docker 特性不理解而踩過非常多雷,這些都對於筆者了解 Docker 基本特性有非常大的幫助。
未來筆者將會用入門學習 Docker 的角度來跟大家分享,三十天會拆成三個階段各十天如下:
本作定位為教學系列文,每篇文章固定有一個特殊段落為今日自我回顧,裡面是以讀者角度撰寫出來的行為,讓讀者可以快速了解自己是否了解該文章的內容。
Docker 是一個學無止盡的技術,只靠三十天是無法說明完,因此今天會先列出本系列文章的範圍與限制。
類似 Laravel 原始碼分析,閱讀未來三十天的文章,會預期讀者已具備以下基礎知識:
以 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 version
Client: Docker Engine - Community
Version: 19.03.12
API version: 1.40
Go version: go1.13.10
Git commit: 48a66213fe
Built: Mon Jun 22 15:41:33 2020
OS/Arch: darwin/amd64
Experimental: false
Server: Docker Engine - Community
Engine:
Version: 19.03.12
API version: 1.40 (minimum version 1.12)
Go version: go1.13.10
Git commit: 48a66213fe
Built: Mon Jun 22 15:49:27 2020
OS/Arch: linux/amd64
Experimental: false
containerd:
Version: v1.2.13
GitCommit: 7ad184331fa3e55e52b890ea95e65ba581ae3429
runc:
Version: 1.0.0-rc10
GitCommit: dc9208a3303feef5b3839f4323d9beb36df0a9dd
docker-init:
Version: 0.18.0
GitCommit: fec3683
$ docker-compose version
docker-compose version 1.26.2, build eefe0d31
docker-py version: 4.2.2
CPython version: 3.7.7
OpenSSL version: OpenSSL 1.1.1g 21 Apr 2020