iT邦幫忙

第 12 屆 iT 邦幫忙鐵人賽

DAY 1
2
DevOps

30 天與鯨魚先生做好朋友系列 第 1

簡介

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
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

下一篇
安裝 Docker 環境
系列文
30 天與鯨魚先生做好朋友30

尚未有邦友留言

立即登入留言