前言
簡單來說,「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 建立 CentOS 7 虛擬主機。因為本文並非要討論 Microsoft Azure 所以如何建立 CentOS 虛擬主機就不多說明了。😁
OS 需求
在 CentOS 運作環境中,為了確保可以順利安裝及執行 Docker 容器環境,請確認採用「CentOS 7 - 64 位元」版本。首先,透過「uname -a」指令確認目前採用的 Linux 版本為 64 位元,接著執行「cat /etc/redhat-release」 指令可以看到為 CentOS 7.3 符合 Docker 容器環境運作要求。安裝 Docker 容器環境
完整且詳細的作法,請參考 Docker 官網提供的正規作法 Get Docker for CentOS - Docker。因為在 CentOS 7 版本中「CentOS-Extras」庫存中已經內建 Docker 套件,所以只要執行「sudo yum -y install docker」便可以安裝完成 (但是你會發現所安裝的 Docker 並非最新版本的 Docker,例如,目前最新為 1.13但透過 CentOS-Extras 所安裝則為 1.12)。所以,本文還是採用最簡單並取得最新 Docker 版本的安裝方式透過 curl 指令去安裝。
sudo yum -y update
sudo curl -sSL https://get.docker.com | sh
從 CentOS 7 開始,管理服務的部分已經從傳統的 Runlevel (/etc/rc.d/init.d),改為新一代的「systemd (/etc/systemd/system)」,所以在安裝作業完成後,我們使用「systemctl start docker」指令來啟動 docker 服務,接著透過「systemctl enable docker」設定 CentOS 主機重新啟動後,仍然能夠自動啟動 docker 服務。
systemctl start docker
systemctl enable docker
接著,我們仍可以透過傳統的「ps aux |grep docker」來確認 Docker Daemon 是否啟動,或採用新一代的指令「systemctl status docker」來確認目前 Docker Daemon 的執行狀態、PID……等資訊。
執行下列指令,把實作的使用者帳戶 (dockerlab)加入到「docker」群組當中,避免後續執行 docker client 指令都還要打 sudo。完成後,確認 dockerlab 這個使用者帳號已經加入到 docker 群組當中後,記得「登出再登入」以便套用生效。
sudo usermod -aG docker $(whoami)
grep "docker:" /etc/group
exit
基礎操作
透過「docker info」可以查看 Docker 容器環境的運作資訊,條列一下我覺得輸出資訊中比較重要的項目:- Server Version: 1.13.0
- 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 run hello-world
接著,可以透過「docker images」查看目前系統中的 Docker Images 清單。此外,你也可以觀察一下 Docker Images 的預設資料夾「/var/lib/docker/*」下相關的變化。 初步練習就先到這裡,後續再慢慢深入吧。 💪
參考資源
- 《Docker —— 從入門到實踐》正體中文版
- Get Docker for CentOS - Docker
- Docker Documentation - Docker
- zh-tw/Cloud/Docker - CentOS Wiki
- RedHat Document - Chapter 9. Managing Services with systemd
- 10 個 Q&A 快速認識 Docker | iThome
- How To Install and Use Docker on CentOS 7 | DigitalOcean
- How To Use Systemctl to Manage Systemd Services and Units | DigitalOcean