Getting Started with Docker
Ubuntu: 18.04
Docker: 18.09
Docker 是一個管理容器(Container)的開源專案,最初是基於 LXC 開發的 Container Engine。
Docker 有幾個特色:
- 作業系統層級的虛擬化產品
- 資源的隔離及分配
- 更為輕量
- 應用導向
在實務上, Docker 可以解決在任何狀況下程式運行環境一致性的問題,大大降低系統出錯的可能。
Containers 與 Virtual Machines 的差異
雖然 Container 和虛擬主機都是虛擬化服務,但是 VM 還需要再搭建一層 Guest OS,因此每裝一個 VM,就需要自行再裝一次 OS,而 Container 不需要安裝作業系統就能執行應用程式。
Docker 額外提供了一個軟體抽像層,讓 Container 共用 Host OS,因此建立 Container 時不需要安裝 Guset OS,更不需要等待作業系統開機時間,所以比傳統 VM 還來得輕量、快速許多。
(圖片來源:Docker 官網)
Docker 的底層是利用 LXC 做資源管理、利用 AUFS 做映像檔(Image)管理。
另外,映像檔(Image)可以用來當成 Containers 產生時相依的模組。這樣一來進行系統調整或部署時,只要抽換映像檔就可以解決大部份的問題。
(圖片來源:Ship it with Docker!)
Images、Containers、Dockerfile、Registry
在瞭解 Docker 運作機制之後,有幾個延伸的名詞是需要清楚的。
| 名稱 | 功用 |
|---|---|
| Images | Image 為完整的程式封裝,一個 Image 裡面可能包含了應用程式、作業系統或運作時所需的成份。 |
| Containers | 根據 Image 產生的 Instance。Image 是唯讀的,Container 可以寫入。每個 Container 都是獨立的平台。 |
| Dockerfile | 描述 Image 內容的指令文件,可以透過該份文件直接建立 Docker Image。 |
| Registry | 存放 Image 的倉庫,目前最大的為 Docker Hub |
下圖為各個名詞相關的關係:
(圖片來源:認識 Docker)
Installation
Installation
; 安裝
sudo apt install docker.io
; 啟動 Docker
sudo systemctl start docker
; 開機時啟動
sudo systemctl enable docker
測試
; 查看 docker 版本
docker --version
由於安裝 Docker 時,只有管理者權限可以使用,如果不想要每次使用指令都要加上 sudo 的話,可以將自己的帳號加進 docker group 裡。
; 將自己的帳號加進 docker group 裡
sudo usermod -aG docker $USER
; 重新登入
su $USER -
; 查詢是否加入成功
groups