AWS EC2 deploy Docker

第一次在 AWS EC2 執行 Docker 就上手,新手入門之實作教學 & 心得分享

Last Updated on

翻翻工程師的職缺,越來越多高薪工作將 Amazon AWS 列為加分技能,甚至是必要技能。

深究其中,不難發現企業對於如 AWS、GCP、Azure 等雲端主機的需求愈來愈大(尤其 AWS 使用最普遍),為什麼呢?

因為雲端主機最大的優點 – 可擴展性(scalability),只要架構得對,就算突然流量暴增,也能自動生出新的伺服器分流,特別是電商公司最怕優惠活動時大量訪客湧入,網站卻被打掛而喪失訂單。

本篇文章將從頭到尾分享如何註冊 AWS 帳戶、創建 EC2,最後在 EC2 上執行 Docker 以提供應用程式服務。

AWS 概述

AWS (Amazon Web Services),由 Amazon 提供的雲端運算服務,讓使用者不需維護 IT 基礎設施,減少維護成本,也不需考慮架設備的地理因素和其他各種硬體因素,並且可以根據使用需求擴展,以量訂價。

對新創公司、小型企業、個人使用者來說,AWS 非常方便,若有較高的硬體設備需求,不必一下子就花很多錢構建與維運,或者想做評估才決定是否投入開發某產品的人,也可先利用 AWS 試驗、研發,成本小。

AWS 免費方案

AWS 提供許多免費方案,一註冊就可以先試用,等到使用量比較大或需要更多功能時,可以再付費增加或升級。(點我到 AWS 免費方案頁面)

AWS 免費方案

AWS 的服務爆炸多,主要有 10 種: Amazon EC2Amazon VPCAmazon S3Amazon RDSAmazon SESAmazon SNSAmazon CloudFrontAWS IAMElastic Load BalancerAWS Auto Scaling

這麼多服務項目,讓人「霧煞煞」,不知道要怎麼開始,對新手很不友善。不過在這其中,Amazon EC2 是最常用的,故本文章以 EC2 為主,介紹如何實現部署 Docker 的目標。

Amazon EC2 簡介

Amazon Elastic Compute Cloud (Amazon EC2) 在 AWS 雲端提供可擴展的運算容量,又稱 AWS EC2。每個 EC2 使用的單位是 instance (實例)。若單獨使用它就像虛擬主機,需要選硬體規格和資源。

用途和優點

  1. 可以減少一開始所需要的硬體投入成本,快速開發且部署應用程式。
  2. 可以依照需求啟動任意數量的虛擬伺服器、設定安全和聯網功能,還有管理儲存。
  3. 可以彈性地擴展或縮減規模,因時處理需求的變更,減少不必要的資源浪費與成本投入。

計費方式

以小時計費,關掉它就不會算錢,但要注意運算實例以外的部分若有使用到也要算錢,比如硬碟空間可以加錢擴增,或是固定連外 IP 也需要負額外費用 …。

你可以在登入主控台後,從「我的帳單儀表板」去看目前的使用到什麼服務與使用量,以及花費。

AWS 帳單儀表板

在免費方案中,EC2 的用量上限是一個月 750 小時,硬碟空間是 30 G。若啟用多個 instances,它會加總用量,比如我啟用 2 個 instances,一起用了 30 小時,時數的用量計算即 2*30 = 60 小時。

AWS 免費方案用量

再次提醒,AWS 的免費方案讓你使用某些服務在一定的範圍內不用錢,一旦超過就開始收費,所以如果你只想先試用但不想花錢,務必小心使用!


Docker 概述

Docker 為開放原始碼,是一个很棒的工具,用來打包程式碼,將應用程式自動化部署成可攜式、可自足的容器,在雲端或內部部署上執行,使其在開發、測試和 production 環境運作方式一致,減少解決不同環境所產生之問題的時間。

docker

若是想更深入且詳細的瞭解 Docker,可以看 Docker 官方文件或參考微軟的文件


AWS 帳戶註冊步驟

(1) 建立 AWS 帳戶 (點我到帳戶建立頁面),填好 E-mail、密碼、帳戶名稱後,按「繼續」。

AWS 建立帳戶

(2) 選擇帳戶類型,有「專業級」和「個人」 2 個選項,專業級帳戶需要多填公司名稱和一些相關資料,如果只是自己試用就選「個人」。ps. 本文是新手自學的分享,所以這裡選個人帳戶。

ps. 選「專業級」的話,一段時間沒去用,AWS 可能會來找你,關心一下是否有什麼問題。

如果有公司的需求或相關稅務問題,直接打電話給 AWS,目前它們在台灣有辦公室,不只能回答問題,還能提供更詳細的資訊。

AWS 帳戶類型

此外,地址的部分最好填英文,可以到中華郵政的網站將中文地址英譯。


(3) 接著,會要求你填信用卡資訊。除非用量超過 AWS 免費方案的限制,不然不會向你收費


(4) 然後,完成電話驗證。

如果填好電話的資訊後,一直沒有接到電話打來,可以換個電信公司的電話號碼試試看。ps. 據說台灣之星的號碼比較不容易收到。


(5) 最後,選擇基本免費方案,就可以開始使用了。

AWS 支援計畫

(6) 選完後,AWS 會問你的角色和興趣,並在下面提供一些教學影片,你可以都不理它,直接點「登入主控台」。

AWS 註冊完成

ps. 這裡有可能會要你再輸入帳密一次,重新登入,才會到 AWS 管理控制台頁面。

AWS 主控台

AWS EC2 建立與使用

EC2 就像是虛擬主機,唯一不同的點,在於一般的虛擬主機你租用什麼等級,就只能固定使用該等級,而 EC2 具擴展性,你可以隨時依照需求彈性地擴增或縮減。

這也是企業喜歡用 EC2 的緣由,有時難免因特殊情況而流量暴增,EC2 可以馬上應付突發情況,不像虛擬主機要手動更改設定;之後流量回穩降低,EC2 也能立刻調整,而虛擬主機則可能改不回來,無法降級。

選擇服務主機

進入 AWS 管理控制台後,先點擊右上方選擇要把服務掛在哪裡,如果主要服務的客群在台灣,可以選東京新加坡

AWS 主控台

建立 EC2

(1) 第一次使用要先創建虛擬機器。如果在「最近瀏覽的服務」有 EC2,可以點進去再「Launch instance」;或者,直接到下面「建置解決方案」裡點「啟動虛擬機器」,都會進到同樣的建立頁面。

AWS 建 EC2

(2) 進入正式創建虛擬主機步驟。首先,要決定選用哪一種 Linux 主機。

如果有「Free tier eligible」表示有包含免費方案可以免費使用,沒有的話就沒有免費。

Choose Amazon Machine

我們要建在 Linux 環境上,所以選 Ubuntu Server,建議選最新版本,按「Select」。

Choose Amazon Machine

(3) 接著,要選擇 instance 的類型。如果想用免費方案,基本上只有 1 個選項可選,而且裡面的其他設定其實也不太能改什麼。

選好後,若沒有其他特別想設定的,可以直接點擊「Review and Launch」,跳到最後一步「Review」;或者,點擊「Next: Configure Instance Details」。

Choose Instance Type

(4) 在”Configure Instance Details”頁面,可以看到一些基本設定。如果你只是新手初學,想試用看看,原則上這裡的設定都不用動,然後下一步。

Configure Instance

ps. 如果未來要建實際上線的 instance,可以對「Enable termination protection」勾選 Protect against accidental termination 作為一個保護措施,不會因為不小心刪掉,instance 就不見,但在測試階段容易刪減修改,就不需要特別勾選。


(5) 在”Add Storage”頁面,是關於硬碟空間的設定,預設 8 GB,免費方案最多 30 GB,多用要多收費。

硬碟空間可以動態擴充,一開始不須擔心是否夠用。你可以先用 8 GB,之後不夠用要增加,改設定就可以了,改完後只需要把 instance 關掉重開,不必砍掉重建,非常彈性。

Add Storage

(6) “Add Tags”頁面並沒有什麼要注意的地方,直接下一步。

Add Tags

(7) “Configure Security Group”這個步驟很重要,預設只打開 port 22,讓你用 SSH 連過去,其他都是鎖起來的狀態,如果有其他需求,比如架 wordpress 網站等,可以點「Add Rule」多開 port 80、443。

Configure Security Group

(8) “Review Instance Launch”會列出所有設定讓你再確認一下,如果都沒問題,就按「Launch」。

Review Instance Launch

(9) 由於 access AWS instance 沒辦法用帳號、密碼,需要使用 key pair 才能建入管理畫面,所以 launch 前會要求設定 key pair。

如果之前有建過其他 key pair,可直接選用;如果沒有,就輸入 key pair name 自己建一個,然後下載 key file

Instance Launch Set Key Pair

一定要注意下載後的檔案不能搞丟,一旦 launch 成功後離開頁面,就不能再回來重新下載!


(10) 最後,給它一點時間 launch 起來,完成後可以點「View instances」,或到 EC2 的控制頁,看到所建 instance 的一些資訊,還可以操作它、改設定 …。

AWS Instances

SSH 連到 EC2 instance

選擇 instance,點擊上面的「Connect」,會有如何連到此 instance 的方法,這裡文件寫得蠻詳細的,其實只要照做就可以了。

在 MacOS 或一般 Linux OS 操作

直接打開終端機,跟著下圖紅框框裡的步驟,下 linux 指令:

  1. cd 到 key file 的位置。
  2. cdmod 改變 key file 的權限。400 表示只有建立者可以”read“,其他人什麼事都不能做。
  3. 將 example 的 ssh 指令照貼到終端機,Enter 後就可以直接連進 instance。
AWS Connect Instance

在 Windows 操作

利用 PuTTY 連過去,可點擊”connect using PuTTY“(或點我看文件),有很完整的文件。原則上,這裡最主要的 2 個重點為:

(1) 打開 PuTTYgen,把 key file (.pem 檔) 轉成 .ppk 檔。→ 這個步驟只要有做過一次,之後若 key 不變就不需再重複做。

Covert key by PuTTYgen

(2) 打開 PuTTY。(下圖一為步驟全覽)

  1. 在 Host Name 輸入 Public DNS 或 IPv6,這裡以 Public DNS 為例,你可以從 AWS instance 的管理頁面找到(如下圖二)。
  2. 設定 SSH 的 Auth,選擇之前轉換好的 key file (.ppk 檔),然後「Open」。
PuTTY open instance
(圖一)
(圖二)

(3) 連線成功後,要輸入 user name,我們這裡用的是免費方案的 Ubuntu Server,預設是”ubuntu“。

AWS Instance login

在 EC2 上執行 Docker

建議先瞭解 docker 的基本架構與一些常用語法,比如對 image、container … 的操作指令。

安裝 Docker

最方便快速的方法就是使用 apt 安裝:

sudo apt-get install docker.io

可以把自己的使用者帳號加入 docker 群組:(這裡的使用者帳號是 ubuntu)

sudo usermod -aG docker ubuntu

ps. 記得要重新登入後才會生效。


執行應用程式

(1) 先把想要的 docker image 從 docker hub 拉下來。(點我看 docker pull 文件)

docker pull [OPTIONS] NAME[:TAG|@DIGEST]

舉例:(這裡假設要用的是 demo_account/test,其中,demo_account 是 docker hub 帳號,test 是 repository,v1 是版本號)

docker pull demo_account/test:v1


(2) 接著,下 docker run 指令,它會自己部署到 container 後執行應用程式。(點我看 docker run文件)

docker run [OPTIONS] IMAGE [COMMAND] [ARG...]

舉例:(這個例子要開的是用 flask 做的網站,需要有 host port 和 container port (分別是 80 和 5000),底層是用 python 寫的程式碼,所以要用 python 執行 app.py)

docker run -d -p 80:8050 demo_account/test:v1 python app.py


(3) 以我的例子,在 run 完後,到瀏覽器輸入我的 public DNS (下圖二),就能連到我的網站,其他人也可以連到(下圖一)。

test login
(圖一)
AWS Instance DNS
(圖二)

ps. 本文章只是大致介紹常用的 docker 語法與步驟,其他語法你可以參考 docker 文件,並且示範我的例子,你可以依自己的需求,自己拉 docker image 到 EC2 instance,然後執行應用程式。


其他注意事項

將應用程式上到 EC2,使用一段時間後,發現有些地方需要特別注意:

#1) Public IP 不是固定的,你從 instance 的管理頁面看到的 IP 和進入 server 後下”ifconfig“指令所看到的 IP 是不一樣的。

AWS Instance IP

#2) 也許是本身具備彈性增減的功能,instance 如果一段時間沒有使用,會自己死掉,需要把它”Stop”後再”Start”。

AWS Instance State

#3) 幾乎每次 instance 關掉重開後,public DNS 都會變動


使用心得

整體來說,AWS EC2 蠻好用的,只要軟體程式開發完部署上去,能夠正常運作,其他跟設備相關的東西(如伺服器流量、防火牆、網路 …)都不必考慮,真的很方便。

或者,公司的某項軟體還在研發階段,但要跟讓客戶試用,不希望連到公司自己的網域,也可以把 EC2 當作 sandbox,不必擔心研發尚未完整、可能潛在一些缺陷的東西,影響到其他正式營運的產品。

如果有興趣學習更多關於 AWS 知識,現在已經有越來越多相關的線上課程和書籍。

相關書籍
AWS實戰:快速開發、建立和部署應用程式
WordPress+AWS架設企業級雲端網站


希望大家看完這篇文章,對 AWS 有初步瞭解,並開始動手嘗試,跟我一起學習!

如果覺得這篇文章有幫助,請幫我拍手 5 下鼓勵我、支持我,讓我繼續有創作的動力!

如果有任何問題或想分享的資訊,歡迎在下方留言!

Leave a Comment

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *