前言
Photon 由 VMware 官方在 2015 年 4 月發行,它是由 VMware 自家所開發的 Linux 版本專為 vSphere 環境所優化的 Container 運作平台 (同時,也支援其它常見的容器格式,例如,Docker, Rocket (rkt), Pivotal Garden),並且移除 Linux Kernel 及 vSphere Hypervisor 重複的核心快取,以便提升整體運作效能。此外,Photon OS 可以部署在 vSphere ESXi 5.5、6.0 虛擬化平台,以及 vCloud Air、VMware Fusion、VMware Workstation 等虛擬化環境中。下列為入門 Photon OS 很棒的參考文件及影片:
- Photon OS Administration Guide
- Photon OS wiki
- VMworld 2016 - CNA 12273 - Delivering Containers as a Service with Photon Platform - YouTube
Photon 安裝需求
Photon OS 安裝及初始設定的詳細操作步驟,請參考官方影片及說明文件:- Use VMware Fusion to get started with Project Photon container runtime - YouTube
- Getting Started Using Project Photon on VMware vSphere 5.5 & 6.0
在此次的實作環境中,採用的 Photon-1.0 ISO 大小為 2.06 GB,倘若採用 VM 的方式安裝 photon 時,記得在選擇 OS 類型時採用「Linux - Other Linux 3.x kernel 64-bit」。下列為安裝 Photon OS 的最低硬體需求:
- 2 vCPU
- 384 MB Memory
- 20 GB HDD
在安裝 Photon 過程中,將有下列 4 種安裝選項可供選擇:
- Photon Minimal: 為最輕量的 Container Host Runtime 運作環境,具備最高效能及安全性的版本。
- Photon Full: 包含額外的套件以方便建立及打包應用程式為容器環境,適合一開始使用 Photon 進行驗證及測試的版本。
- Photon OSTree Host: 將會建立 Photon OS Instance 並從 RPM-OSTree Server 下載相關 Package 及 Library,並且後續由 OSTree Server 集中管理。
- Photon OSTree Server: 將會建立 Repository 及負責管理 OSTree Hosts,為單位生命週期管理及企業級規模擴充的工作任務。
此次實作環境中,選擇「Photon Full」安裝選項並花費 225 秒即安裝完畢。
基礎操作
查看 Photon OS 主機系統資訊。此外,倘若 Photon OS 是運作在 VM 虛擬主機的話,可以透過「systemctl status vmtoolsd」指令查看 VMware Tools 服務的運作情況。# uname -a
# cat /etc/photon-release
# hostnamectl
從 RHEL 7 / CentOS 7 開始,管理服務的部分已經從傳統的 Runlevel (/etc/rc.d/init.d),改為新一代的 systemd (/etc/systemd/system)。因此,採用與 RedHat / CentOS 相關 Linux 核心的 Photon OS 便可以使用「systemctl start docker」指令來啟動 docker 服務,接著透過「systemctl enable docker」設定 Photon 主機重新啟動後,仍然能夠自動啟動 docker 服務。接著,可以透過傳統的「ps aux |grep docker」來確認 Docker Daemon 是否啟動,或採用新一代的指令「systemctl status docker」來確認目前 Docker Daemon 的執行狀態、PID……等資訊。
# systemctl start docker
# systemctl enable docker
# ps aux |grep docker
# systemctl status docker
透過「docker info」可以查看 Docker 容器環境的運作資訊,條列一下我覺得輸出資訊中比較重要的項目:
- Server Version: 1.11.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/*」下相關的變化。
接著,我們來練習第 2 個範例為透過 Docker 容器環境執行 Nginx 網頁伺服器。但是在開始之前因為在本文實作環境中,採用「Photon Full」安裝選項所以預設會自動啟動 httpd 服務 (佔用 TCP Port 80),所以把 httpd 調整為預設停用,以避免 Photon OS 重新啟動後佔用 TCP Port 80。
# systemctl disable httpd
# systemctl list-unit-files --type service | grep enabled
確認 Photon OS 停用 httpd 預設啟動的組態設定後,便可以練習第 2 個範例為透過 Docker 容器環境執行 Nginx 網頁伺服器。
# docker run -d -p 80:80 vmwarecna/nginx
Photon OS 預設 Iptables 防火牆規則只允許 TCP Port 22 放行,我們開啟常用的 ICMP 回應 (ping) 以及 TCP Port 80 將其放行。有關 iptables 防火牆的基本操作,請參考站內文章 邁向 RHCE 之路 (Day22) - IPTables 防火牆 文章內容。
請修改「/etc/systemd/scripts/iptables」組態設定檔,開啟 ICMP 回應 (ping) 以及 TCP Port 80 放行 (如下 2 行放行規則)。然後,就可以重新啟動 iptables 服務以便防火牆規則能夠套用生效,再採用「iptables -L」指令確認 ICMP 及允許 TCP Port 80 的防火牆規則已經套用生效。
# vi /etc/systemd/scripts/iptables
iptables -A INPUT -p icmp -j ACCEPT
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
# systemctl restart iptables
# systemctl status iptables
# iptables -L
確認 Photon OS 的 iptables 防火牆允許 TCP Port 80 後,便可以開啟瀏覽器確認是否能夠看到 Nginx 網頁伺服器的歡迎頁面。
MeFAQ
Q1. 預設情況下 Photon OS 雖然 sshd 服務有啟動,但不允許 Root 帳號遠端 SSH 登入?
Ans: 請參考 Photon Wiki - FAQ - Why can't I SSH in as root? 文章內容。簡單來說,Photon OS 預設情況下「/etc/ssh/sshd_config」設定檔內容中,預設值為「PermitRootLogin no」所以,不允許 Root 管理帳號可以遠端登入。所以,只要修改為「PermitRootLogin yes」後重新啟動 sshd daemon 即可 (當然,這樣就會多了安全性風險就不在本文討論範圍了。)# grep PermitRootLogin /etc/ssh/sshd_config
PermitRootLogin yes
# systemctl restart sshd
# systemctl status sshd
Q2. 運作 nginx 時顯示 Localhost TCP Port 80 已經被使用了?
Ans: 倘若在安裝 Photon OS 時,採用「Photon Full」選項的話,那麼預設就會安裝及啟用 httpd 服務所以 TCP Port 80 就會被佔用。倘若,選擇 Minimal 的話就不會。相關討論串請參考 TCP Port 80 in use | VMware Communities、Running Photon OS on vSphere example iptables issue · Issue #35 · vmware/photon-controller。可以看到預設情況下 Photon OS 已經 Listen tcp6 port 80。
# netstat -na | grep ":80"
tcp6 0 0 :::80 :::* LISTEN
如果,希望是 Listen tcp4 port 80 的話,可以修改「/etc/httpd/httpd.conf」把「Listen 80」改成「Listen 0.0.0.0:80」,然後「systemctl httpd restart」就會變成 IPv4 httpd 了。
# netstat -na | grep ":80"
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN
但是,我們希望把 httpd 調整為預設停用並停止服務,以避免 Photon OS 重新啟動的話會佔用 TCP Port 80。
# systemctl stop httpd
# systemctl disable httpd
# systemctl list-unit-files --type service | grep enabled
參考資源
- Photon OS Administration Guide
- Photon OS wiki
- 6 大 Container OS 介紹 | iThome
- Container 太夯了!Vmware 也推出 Linux 作業系統 | iThome
- 【專訪 VM 執行副總】Vmware 為什麼要做 Container OS? | iThome
- Project Lightwave Provides Authentication for Project Photon SSH Logins - YouTube
- VMworld 2016 - CNA 12273 - Delivering Containers as a Service with Photon Platform - YouTube
- Community: Photon OS | VMware Communities
- RedHat Document - 4.5. Using Firewalls
- RedHat Document - 9.2. Managing System Services