前言
簡單來說,「Docker」本來是 dotCloud公司內部的一個業餘專案,並採用 Google 的 Go 語言進行實作的產品。後來 dotCloud 公司將此專案加入 Linux 基金會並在 GitHub 上進行維護,迅速受到開發人員的喜愛,甚至 dotCloud 公司改名為 Docker Inc。有關 Docker 的一些歷史及觀念介紹因為《Docker — 從入門到實踐》已經很清楚的說明,請參考下列相關連結即可:Docker 簡介
什麼是 Docker
為什麼要使用 Docker?
Docker 基本概念
映像檔 (Image)
容器 (Container)
倉庫 (Repository)
Docker 底層技術
基本架構
命名空間 (NameSpaces)
控制組 (Control Groups)
Union 檔案系統 (Union File Systems)
容器格式
網路
那麼 2017 年的新年新希望,就讓我們開始從玩 Docker 開始吧,以下是其它的一些重點摘要:
- 在開始玩 Docker Lab 之前,建議註冊 Docker Hub、GitHub等帳號以便後續實作。
- Container 目前尚未支援如 VM 的快照功能,但 Container 建立產生快速所以原則上並不需要快照功能。
- Container 是指 Running 時的狀態,若是靜態的話則稱之為 Images。
- Container 的概念,就是每個「服務」個別打包成「1 個」Container,例如,過往的 LAMP 在 Container 的運作概念中,就是分拆成 Apache Container, MySQL Container, PHP Container。
為了方便進行 Docker 環境的測試作業,我採用 Microsoft Azure 建立 ubuntu 虛擬主機。因為本文並非要討論 Microsoft Azure 所以如何建立 ubuntu 虛擬主機就不多說明了。😁
OS 需求
在 Ubuntu 運作環境中,為了確保可以順利安裝及執行 Docker 容器環境,請確認採用「64 位元」Ubuntu 以及下列版本:- Yakkety 16.10
- Xenial 16.04 (LTS)
- Trusty 14.04 (LTS)
首先,透過「uname -a」指令確認目前採用的 Linux 版本為 64 位元,接著執行「lsb_release -a」 可以看到為 Ubuntu 16.04.1 LTS符合 Docker 容器環境運作要求。
安裝 Docker 容器環境
完整且詳細的作法,請參考 Docker 官網提供的正規作法 Install Docker on Ubuntu - Docker。下列則是簡易作法,直接透過 curl 去把 Docker.com 上的 Shell Script 下載後執行安裝的動作。sudo apt-get update
sudo curl -sSL https://get.docker.com | sh
安裝作業完成後,可以看到採用的 Docker Client / Server的版本及相關資訊。同時,還提醒你要把目前的使用者帳號 (此實作為 dockerlab) 加入至「Docker」群組當中,以避免後續執行 docker 指令因為權限的關係還要額外加上 sudo 才能執行的困擾。
執行下列指令,把實作的使用者帳戶 (dockerlab) 加入到「docker」群組當中,避免後續執行 docker 指令都還要打 sudo。 完成後,確認 dockerlab 這個使用者帳號已經加入到 docker 群組當中後,記得「登出再登入」便套用生效。
sudo usermod -aG docker dockerlab
grep "docker:" /etc/group
exit
重新登入後,首先確認 Docker Daemon是否正在執行中,以及後續倘若 Ubuntu 重新啟動後 Docker Daemon 是否會自動啟動。
ps aux | grep dockerd
service --status-all |grep docker
基礎操作
透過「docker info」可以查看 Docker 容器環境的運作資訊,條列一下我覺得輸出資訊中比較重要的項目:- Server Version: 1.13.0
- Root Dir: /var/lib/docker/aufs
- Docker Root Dir: /var/lib/docker
透過「docker version」指令,馬上確認目前 Docker 容器環境的 Client / Server 版本。
永遠的範例 Hello-World
那麼,讓我們開始使用 Docker 容器環境吧,不免俗的第 1 個範例就是透過 Docker 容器環境執行列出字串「Hello-World」吧。其實在執行「docker run hello-world」指令後,在第 1 行資訊中 (Unable to find image 'hello-world:latest' locally) 可以看到,系統發現目前並沒有「Hello-World」這個 Images,所以就透過預設的系統設定去 Docker Hub 下載 Hello-World 這個容器映像檔 (所以自動執行「docker pull」的動作),最後執行它。其實在結果中看到回應的 4 點訊息,已經完全說明這個動作的流程。
接著,可以透過「docker images」查看目前系統中的 Docker Images 清單。此外,你也可以觀察一下 Docker Images 的預設資料夾「/var/lib/docker/*」下相關的變化。初步練習就先到這裡,後續再慢慢深入吧。💨