本篇是 Docker 容器的基本觀念與操作教學,敘述如何自行建立 Docker 影像檔。
相較於傳統的虛擬機器(例如 VirtualBox 與 VMWare 等),Docker 是一個輕量級的容器,只包含特定程式執行所需要的必要元件,不像虛擬機器要包含整個作業系統,所以大小會比較小,執行效能也會比較高。
以下是關於 Docker 的一些基本觀念,以及簡單的應用程式包裝與佈署步驟。
Docker 的影像(image)是一個可以獨立執行的輕量級套件,其包含所有執行程式所需要的函式庫、環境變數與設定檔等,而容器(container)則是一個影像(image)的執行實體,就是將影像(image)載入至記憶體中執行之後的環境。
預設的情況下,容器(container)是一個與 host 機器環境分開的獨立執行環境,但其程式卻可以在原生 host 機器的核心中運行,因此 Docker 的執行效能會比傳統虛擬機器更好。
以下兩張圖是傳統虛擬機器與 Docker 的比較,虛擬機器(VM)除了包含程式與函式庫之外,還要加上整個作業系統(Guest OS)。
在 Docker 容器的架構下,容器只需要包含程式與其所需要的函式庫,剩下的部份則由 Docker 容器來處理,所有的程式都共用同一個 host 系統核心。
在開始使用 Docker 之前,請先在系統上安裝 Docker 的環境,大部分的作業系統 Docker 都有直接支援,這裡示範在 Ubuntu Linux 中的安裝步驟,若使用 CentOS Linux 的人可參考 CentOS Linux 安裝 Docker 的教學,或是 Docker 官方的文件。
首先移除舊版的 Docker 套件,官方的建議指令是:
sudo apt-get remove docker docker-engine
我自己的 Ubuntu Linux 中舊版的 Docker 套件是 docker.io
:
sudo apt-get remove docker.io
安裝 linux-image-extra-*
套件,讓 Docker 可以使用 aufs
儲存驅動程式:
sudo apt-get install linux-image-extra-$(uname -r) linux-image-extra-virtual
安裝基本套件:
sudo apt-get install apt-transport-https ca-certificates curl software-properties-common
加入 Docker 的 GPG 金鑰:
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
加入 Docker 套件庫:
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
更新套件庫:
sudo apt-get update
安裝 Docker CE(Community Edition):
sudo apt-get install docker-ce
檢查 Docker 是否可以正常運作:
sudo docker run hello-world
正常來說,執行之後就會輸出類似這樣的訊息:
如果要以一般的使用者的權限執行 Docker,要先在系統中加入 docker
群組:
sudo groupadd docker
在將要執行 Docker 的使用者加入至 docker
群組內:
sudo usermod -aG docker $USER
這樣就完成了。如果沒有把使用者加入 docker
群組的話,使用時就會出現類似這樣的錯誤訊息:
docker: Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Post http://%2Fvar%2Frun%2Fdocker.sock/v1.27/containers/create: dial unix /var/run/docker.sock: connect: permission denied. See 'docker run --help'.
如果要設定 Docker 的服務是否要在開機時自動啟動,可透過 systemd
的控制介面:
sudo systemctl enable docker # 啟動 Docker 服務 sudo systemctl disable docker # 關閉 Docker 服務
最後檢查一下 Docker 的版本。
docker --version
Docker version 17.03.1-ce, build c6d412e
接下來的教學內容適用於 1.13 或更新版的 Docker 環境。
將 Docker 的執行環境準備好之後,接下來要介紹如何在 Docker 環境中開發與佈署應用程式,請繼續閱讀下一頁。