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 還來得輕量、快速許多。

Containers 與 Virtual Machines 的差異
(圖片來源:Docker 官網

Docker 的底層是利用 LXC 做資源管理、利用 AUFS 做映像檔(Image)管理。

另外,映像檔(Image)可以用來當成 Containers 產生時相依的模組。這樣一來進行系統調整或部署時,只要抽換映像檔就可以解決大部份的問題。

Docker = LXC + AUFS
(圖片來源: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

下圖為各個名詞相關的關係:

Relation of Images、Containers、Dockerfile、Registry
(圖片來源:認識 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
Categories: Docker