隨著雲端原生架構成為主流,容器化技術已是現代應用程式開發與維運不可或缺的一環。本文旨在提供一個標準化的部署範例,將業界廣泛採用的 Docker 容器平台,部署於 Amazon Web Services (AWS) 的 EC2 虛擬伺服器之上。此過程不僅是技術操作的演練,更體現了基礎設施即程式碼與自動化維運的核心精神。文章以 Red Hat Enterprise Linux 7 作為目標作業系統,詳細拆解從環境準備、安全連線、軟體安裝到服務配置的完整生命週期。透過腳本化安裝與 systemd 服務管理,展現了如何在企業級 Linux 環境中,建立一個穩定、可重複且高效的 Docker 運行環境,為後續的微服務部署與持續整合奠定穩固基礎。
雲端環境下的 Docker 部署與容器化實踐:從 EC2 連線到 Red Hat 7 安裝
雲端伺服器環境設定:EC2 實例的選擇與連線
在實際部署 Docker 和運行容器化應用時,選擇合適的雲端基礎設施是首要步驟。Amazon Elastic Compute Cloud (EC2) 提供了一系列虛擬伺服器選項,非常適合用於搭建 Docker 環境。本節將聚焦於如何在 EC2 上選擇 Linux 實例,並透過 SSH 連線進行初步設定。
選擇合適的 EC2 Linux 映像檔 (AMI)
為了確保 Docker 能夠順利運行,我們需要選擇支援 64 位元架構的 Linux 發行版。文中提到了兩個具體的 AMI 範例,它們都基於 64 位元架構,適合運行現代化的應用程式和容器化技術:
- Ubuntu Server 14.04 LTS (HVM), SSD Volume Type:這個 AMI 提供了一個基於 Ubuntu 的 64 位元環境。Ubuntu 以其易用性和廣泛的社群支援而聞名,是許多開發者和系統管理員的首選。LTS 版本意味著較長的支援週期,能提供更穩定的運行環境。SSD 磁碟類型則保證了較快的 I/O 效能,這對於 Docker 映像檔的讀寫操作至關重要。
- Red Hat Enterprise Linux version 7.1 (HVM), EBS General Purpose (SSD):Red Hat Enterprise Linux (RHEL) 是企業級 Linux 的標準,以其穩定性、安全性和長期的企業支援而聞名。版本 7.1 是當時一個成熟的選擇。同樣,它也基於 64 位元架構,並配備了 SSD 磁碟,為 Docker 運行提供優良的效能。
選擇哪個 AMI 取決於個人或團隊對 Linux 發行版的偏好以及具體的應用需求。
連線至 EC2 實例
一旦選定並啟動了 EC2 實例,我們就需要透過 SSH(安全殼層協定)來連線到它,以便執行後續的設定和管理命令。
- 獲取公用 IP 地址:在 AWS 管理控制台中,可以輕鬆找到已啟動實例的公用 IP 地址。這個 IP 地址是從外部網路訪問該實例的入口。
- SSH 連線命令:SSH 連線需要指定私鑰檔案(通常是
.pem格式,由 AWS 在創建金鑰對時提供)和目標實例的用戶名。- 對於 Ubuntu 實例:預設的用戶名是
ubuntu。連線命令格式為:例如:ssh -i "docker.pem" ubuntu@<PUBLIC_IP_ADDRESS>ssh -i "docker.pem" ubuntu@54.86.12.113 - 對於 Red Hat 實例:預設的用戶名是
ec2-user。連線命令格式為:例如:ssh -i "docker.pem" ec2-user@<PUBLIC_IP_ADDRESS>ssh -i "docker.pem" ec2-user@54.175.182.96
- 對於 Ubuntu 實例:預設的用戶名是
成功連線後,終端介面將顯示該 Linux 實例的命令提示符,表明我們可以開始執行管理命令了。
確認系統架構支援 64 位元
在進行 Docker 的安裝之前,最好先確認目標 Linux 實例的架構是否支援 64 位元軟體。這可以通過 uname -r 命令來檢查。
uname -r
如果輸出結果中包含 x86_64,則表示系統架構為 64 位元,可以順利運行 Docker 引擎。
@startuml
!define DISABLE_LINK
!define PLANTUML_FORMAT svg
!theme _none_
skinparam dpi auto
skinparam shadowing false
skinparam linetype ortho
skinparam roundcorner 5
skinparam defaultFontName "Microsoft JhengHei UI"
skinparam defaultFontSize 16
skinparam minClassWidth 100
object "使用者" as User
object "AWS EC2 Console" as EC2Console
object "EC2 Instance (Ubuntu/RHEL)" as EC2Instance
object "SSH Client" as SSHClient
partition "EC2 實例連線流程" {
User --> EC2Console : 選擇 AMI (Ubuntu/RHEL 64-bit) 並啟動實例
EC2Console --> EC2Instance : 創建實例並分配公用 IP
EC2Console --> User : 提供實例的公用 IP 地址
User --> SSHClient : 準備私鑰 (docker.pem)
User --> SSHClient : 輸入 SSH 連線指令 (含私鑰, 用戶名, IP)
SSHClient --> EC2Instance : 發送 SSH 連線請求
EC2Instance --> SSHClient : 驗證金鑰並建立 SSH 連線
SSHClient --> User : 顯示終端提示符
User --> SSHClient : 執行 uname -r 檢查架構
SSHClient --> EC2Instance : 執行 uname -r 命令
EC2Instance --> SSHClient : 回傳架構資訊 (如 x86_64)
SSHClient --> User : 顯示架構資訊
}
@enduml看圖說話:
此圖示描繪了使用者如何在 Amazon EC2 雲端環境中設定 Linux 實例並進行連線的過程。首先,使用者透過 AWS EC2 Console 選擇一個合適的 64 位元 Linux AMI(例如 Ubuntu 或 Red Hat),然後啟動一個 EC2 實例。EC2 Console 會為這個新啟動的實例分配一個公用 IP 地址,並將此資訊提供給使用者。同時,使用者需要準備好對應的私鑰檔案(在此範例中為 docker.pem),該檔案是在創建金鑰對時由 AWS 生成的。接著,使用者透過 SSH Client 輸入 SSH 連線指令,該指令包含了私鑰、目標實例的用戶名(如 ubuntu 或 ec2-user)以及剛才獲取的公用 IP 地址。SSH Client 將此連線請求發送給 EC2 實例。EC2 實例會驗證使用者提供的私鑰,如果驗證成功,則會建立一個安全的 SSH 連線,並向使用者顯示終端提示符,表示連線已成功建立。在連線建立後,使用者可以執行 uname -r 命令,SSH Client 會將此命令傳送至 EC2 實例執行,實例會回傳其系統架構資訊(如 x86_64),確保其支援 64 位元軟體,為後續的 Docker 安裝做好準備。
在 Red Hat 7 上安裝 Docker:腳本化部署流程
在 Red Hat Enterprise Linux 7 (RHEL 7) 環境中安裝 Docker Engine,可以選擇透過 yum 套件管理器或使用官方提供的安裝腳本。本節將詳細介紹使用安裝腳本的方法,這通常能提供更直接且快速的安裝體驗。
更新本地套件列表
在安裝任何新軟體之前,養成更新本地套件列表的習慣是良好的實踐。這能確保您獲取的是最新的套件資訊,並減少潛在的依賴問題。
sudo yum update
此命令會檢查所有已安裝套件的更新,並根據需要下載和安裝它們。
執行 Docker 安裝腳本
Docker 官方提供了一個便捷的安裝腳本,可以自動處理 Docker Engine 的下載和安裝過程。
curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh
curl -fsSL https://get.docker.com -o get-docker.sh:這個命令會從指定的 URL 下載 Docker 的安裝腳本,並將其保存為get-docker.sh檔案。-f:靜默模式,不顯示下載進度。-s:靜默模式,不顯示進度條。-S:在靜默模式下,如果發生錯誤,仍然顯示錯誤訊息。-L:如果 URL 指向一個重定向,則跟隨重定向。-o get-docker.sh:將下載的內容輸出到名為get-docker.sh的檔案。
sudo sh get-docker.sh:以管理員權限執行下載的腳本。這個腳本會自動檢測您的 Linux 發行版,並安裝適合的 Docker Engine 版本及其依賴項。
腳本執行過程中,您會看到 Docker Engine 被下載和安裝的訊息。
修改 Docker 服務啟動超時設定
在某些環境下,Docker 服務的啟動過程可能需要較長時間,尤其是在首次啟動時。系統的 systemd 管理器可能會因為 Docker 服務啟動超時而失敗。為了避免這個問題,可以修改 docker.service 檔案,延長或禁用啟動超時。
- 定位
docker.service檔案:該檔案通常位於/usr/lib/systemd/system/目錄下。 - 修改檔案:由於該檔案是系統檔案,需要使用
sudo權限來編輯。在sudo vi /usr/lib/systemd/system/docker.servicevi編輯器中,找到[Service]區段。 - 添加
TimeoutStartSec=0:在[Service]區段下添加或修改TimeoutStartSec參數,將其值設為0,這表示禁用啟動超時。[Service] Type=notify ExecStart=/usr/bin/dockerd -H fd:// --containerd-gid=... TimeoutStartSec=0 # 添加或修改此行 ... - 重載 systemd 配置:修改服務檔案後,需要重載
systemd的配置,使其識別變更。sudo systemctl daemon-reload
啟動與檢查 Docker 服務
修改配置後,就可以啟動 Docker 服務並檢查其狀態了。
- 啟動 Docker 服務:
sudo systemctl start docker - 檢查 Docker 服務狀態:如果一切正常,您應該會看到 Docker 服務的狀態為
sudo systemctl status dockeractive (running)。
解除安裝 Docker (若需要)
如果在安裝過程中遇到問題,或者需要重新安裝,可以先解除安裝現有的 Docker 版本。
- 列出已安裝的 Docker 套件:
yum list installed | grep docker - 移除 Docker 引擎和相關目錄:請注意,
sudo yum -y remove docker-engine.x86_64 rm -rf /var/lib/dockerrm -rf /var/lib/docker會刪除所有 Docker 數據,包括映像檔、容器和卷,請謹慎操作。
安裝特定版本的 Docker
有時,為了兼容性或測試目的,需要安裝特定版本的 Docker。這通常需要手動下載對應版本的 RPM 檔案,然後使用 yum localinstall 命令進行安裝。例如,安裝 Docker 1.7.0:
# 下載對應版本的 RPM 檔案 (此處為範例,實際檔案名可能不同)
# 例如: docker-engine-1.7.0-1.el6.x86_64.rpm
sudo yum localinstall --nogpgcheck /path/to/docker-engine-1.7.0-1.el6.x86_64.rpm
--nogpgcheck 選項用於跳過 GPG 簽名驗證,這在安裝本地 RPM 時有時是必要的。
透過上述步驟,便能在 Red Hat 7 環境中完成 Docker 的安裝,並進行必要的服務配置和管理。
結論
縱觀現代雲端維運的多元挑戰,從虛擬機到容器化的遷移不僅是技術堆疊的轉換,更是對穩定性、可擴展性與維運效率的重新定義。本文詳述的 EC2 實例配置與 Docker 安裝流程,看似基礎,實則蘊含了區分「臨時搭建」與「專業部署」的關鍵思維。
深入剖析其核心價值可以發現,選擇官方腳本安裝雖能加速部署,卻可能犧牲版本控制的精確性,這與使用套件管理器鎖定版本的策略形成重要權衡;而調整 systemd 的 TimeoutStartSec 參數,則直接反映了對生產環境中服務啟動韌性的深刻理解,是預防在高負載下潛在服務中斷的關鍵一步。這些細微設定,正是將一個「能動」的環境,提升為「可靠」的基礎設施之精髓所在。
展望未來 2-3 年,儘管手動配置是理解底層運作的必要訓練,但趨勢顯然是將這些步驟全面「基礎設施即代碼化」(IaC)。今日在單一節點上的精細調校,將成為明日透過 Terraform 或 Ansible 自動化部署腳本的設計藍圖,從而實現跨環境的一致性與規模化管理。
玄貓認為,精通這些基礎部署與組態細節,是所有雲端工程師邁向架構師之路的基石。其價值不僅在於成功啟動一個容器,更在於為未來構建高可用、自動化的雲原生應用生態系,奠定堅實且可靠的根基。