Docker
Workshop by Ben
什麼是 Docker
Docker 誕生的歷史
‧ Docker 是一個開源專案,誕生於 2013 年初。
‧ 基於 Google 推出的 Go 語言實作。
‧ Docker 專案的目標是實作輕量級的作業系統虛擬化解決方案。
‧目前最新版本為2015-02-03 釋出的 1.5.0
我才兩歲!?
圖解差異點
Docker 與傳統虛擬化技術的差異
傳統虛擬化技術
‧ 傳統虛擬架構每個虛擬客體裡都包含了一個作業系統。
‧ 由客體作業系統中架構新的執行環境。
‧ 由於只在硬體層實作共享,軟體層須重新加載整個作業系統,導致硬體資源不
必要的浪費。
Docker
‧ Docker 下的Container(概念等同一個虛擬客體) 由原生系統提供執行環境。
‧ Docker 的基礎是 Linux 容器(LXC)等技術。
‧ 執行環境由原生OS提供,藉由LXC技術動態加載所需的程式庫,故大量減少系
統虛擬化後的效能損耗。
Docker 的優點
除了效能上較傳統虛擬化技術為優外,Docker 還有以下的優點:
•快速的交付和部署
一次部屬,然後在任何地方執行!
•有效率的虛擬化
不需硬體層面的虛擬化支援,Docker 是核心面的虛擬化技術。
•簡單的管理
只需要小小的修改,就可以替代以往大量的更新工作。
基礎概念
Image(映像檔)、Container(容器)、Repository(倉庫)
倉庫
倉庫是集中存放映像檔檔案的場所。有時候會把倉庫和
倉庫註冊伺服器(Registry)混為一談,並不嚴格區分。
實際上,倉庫註冊伺服器上往往存放著多個倉庫,每個
倉庫中又包含了多個映像檔,每個映像檔有不同的標籤
(tag)。
倉庫分為公開倉庫(Public)和私有倉庫(Private)兩
種形式。
最大的公開倉庫是 Docker Hub,存放了數量龐大的映
像檔供使用者下載。
使用者也可以在本地網路內建立一個私有倉庫。
當使用者建立了自己的映像檔之後就可以使用 push 命
令將它上傳到公有或者私有倉庫,這樣下次在另外一台
機器上使用這個映像檔時候,只需要從倉庫上 pull 下來
就可以了。
*註:Docker 倉庫的概念跟 Git 類似,註冊伺服器可以
理解為 GitHub 這樣的託管服務。
映像檔
Docker 映像檔就是一個唯讀的模板。
例如:一個映像檔可以包含一個完整
的 ubuntu 作業系統環境,裡面僅安裝
了 Apache 或使用者需要的其它應用
程式。
映像檔可以用來建立 Docker 容器。
Docker 提供了一個很簡單的機制來建
立映像檔或者更新現有的映像檔,使
用者甚至可以直接從其他人那裡下載
一個已經做好的映像檔來直接使用。
容器
Docker 利用容器來執行應用。
容器是從映像檔建立的執行實例。它
可以被啟動、開始、停止、刪除。每
個容器都是相互隔離的、保證安全的
平台。
可以把容器看做是一個簡易版的 Linux
環境(包括root使用者權限、程式空間、
使用者空間和網路空間等)和在其中
執行的應用程式。
*註:映像檔是唯讀的,容器在啟動的
時候建立一層可寫層作為最上層。
實際體驗 Docker
目標
1. 從公共倉庫下載 wordpress ,mysql 兩個映像檔。
docker pull wordpress:latest , mysql:latest
2. 建立兩個容器, 並將為他們取上別命 myWP, myDB
docker run --name myDB -e MYSQL_ROOT_PASSWORD=1234 –d mysql
docker run --name myWP --link myDB:mysql -p 8080:80 -d wordpress
3. 關閉兩個容器,並重新執行它們
docker stop myWP
docker stop myDB
4. 在瀏覽窗口測試無誤,Done!

Docker workshop