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