iT邦幫忙

第 12 屆 iT 邦幫忙鐵人賽

DAY 1
0
自我挑戰組

AWS架構應用系列 第 20

Amazon Elastic Container Service (Amazon ECS) - Day20

Amazon Elastic Container Service (Amazon ECS) - Day20

Docker 是一種軟體平台,可讓您快速地建立、測試和部署應用程式,它將軟體封裝到容器 (Container) 的標準化單位,其中包含程式庫、系統工具、程式碼和執行時間等執行軟體所需的所有項目,使用者可以將應用程式快速地部署到各種環境並加以擴展,而且知道程式碼可以執行。從下圖可以看出,Container 比 VM 來的更輕量,更節省資源。

Container 與 VM 的差別
圖 01、Container 與 VM 的差別

建立 Amazon EC2

關於如何安裝 EC2 可以參考 Amazon Elastic Compute Cloud (EC2) - Day08

進入 EC2 主控台,注意是否是 1. 在新加坡地區(必須要跟先前規劃的 VPC 所在區域相同), 2. 按下左手邊的執行個體後, 3. 在按下右手邊的 Launch Instance

啟動 Amazon EC2 實例
圖 02、啟動 Amazon EC2 實例

啟動 Amazon EC2 實例需要有七個步驟,分別是:

  1. Choose AMI: 可以在不同的市集中選擇適合的作業系統、適用的 CPU 架構(X86/arm)、適合的套件等等,要注意的是有些 AMI 是要收費的,還有 AMI 會跟接下來的 Instance Type與 Storage 有相關性,因為有些AMI需要較高的性能才有辦法執行。預設選 Amazon Linux 2 AMI (HVM), SSD Volume Type - ami-0b1e534a4ff9019e0 (64-bit x86)

AMI 選擇畫面
圖 03、AMI 選擇畫面

  1. Choose Instance Type: 這跟計算能力有關,所以也反映到收費上,要求的計算能力越高,收費越高。預設選 t2.micro

  2. Configure Instance: 主要就是設定 EC2 實例的內容,有很多細部設定,就不一一說明,主要就是把這個實例放到公有子網 ithome public subnet 1 中,以下是需要修改的部分,其它的欄位就保持預設值即可,如下圖。

Network : vpc-0bb7004b67556d0da | ithomeVPC
Subnet : subnet-0f1df807467b642f6 | ithome public subnet 1 | ap-southeast-1a
Auto-assign Public IP : Enable

EC2實例組態設定
圖 04、EC2實例組態設定

  1. Add Storage: 這相當於選擇硬碟大小,因為是安裝 Amazon Linux ,所需空間不大,保持預設值即可。 8

  2. Add Tags: 可加可不加,通常是用在Cloud watch觀察比較方便,我們先不加。

  3. Configure Security Group: 為提供安全保障,限制進來的連線,因為我們是建置 Web 伺服器,所以打開埠號 22 與 80。

Assign a security group: Create a new security group
Security group name: ithome_web_SG
Description: ITHOME Web server Security Group
Type: SSH, HTTP
Source: Anywhere, Anywhere

EC2安全組設定
圖 05、EC2安全組設定

  1. Review: 看一下前述的所有設定,確定無誤後就直接按下 Launch

  2. Key pair 設定: 因為安全考量,AWS要求使用者務必要用密鑰對( key pair )的方式來進行連線,因此在啟動 EC2 前會要求建立或選擇密鑰對,下載下來的密鑰對鑰一定要好好保存,遺失後是沒辦法再重新下載的。

Create a new key pair
Key pair name: ithome

EC2 key pair 下載
圖 06、EC2 key pair 下載

連線到 Amazon EC2 (Windows)

請參考 AWS 的參考手冊使用 PuTTY 從 Windows 連線至您的 Linux 執行個體,完成下列兩件事:

  1. 下載並安裝 PuTTY。
  2. 將剛下載的 EC2 key pair - ithome.pem 檔案轉換為 Putty 程式讀取的可以 .ppk 檔案

回到 EC2 主控台 選擇執行個體,就可以看到剛剛啟動的 Amazon EC2,找到 IPv4 Public IP 這個欄位,作為 Putty 連線之用,從圖九我們可以再次確認這個 EC 2所在的 VPC, Subnet, IPv4 Public IP, Availability zone, Security groups等資訊是否正確。

EC2 實例內容
圖 07、EC2 實例內容

有 putty 遠端連線軟體、Amazon EC2、公有 IP 、以及密鑰,接著要完成的就是進行從本地端登入到雲端的 Amazon EC2,打開Putty,輸入以下資料:

Host Name( or IP address): ec2-user@13.250.62.21 (前面是登入帳號,@後面是公有IP)
Saved Sessions: ithome

PuTTy 組態設定
圖 08、PuTTy 組態設定

接著選擇 Connection -> SSH -> Auth 選項,輸入連線設定

Private key file for Authentication: 請選擇剛剛轉換好的 .ppk 檔

PuTTy 安全連線設定
圖 09、PuTTy 安全連線設定

設定完畢後再選 Session 選項,記得先按 Save 存檔,再按 Open 去進行連線,連線成功後會顯示 PuTTy 的連線警告,按下 Yes 後就可以順利連線。

PuTTy 連線警告
圖 10、PuTTy 連線警告

Amazon EC2 上安裝 Docker

在 Amazon EC2 執行個體上安裝 Docker

# 更新已安裝的套裝服務
sudo yum update -y
# 安裝最新的 Docker Community Edition
sudo amazon-linux-extras install -y docker
# 啟動 Docker 服務
sudo service docker start
# 設定 Docker 服務會自動啟動
sudo systemctl enable docker
# 將 ec2-user 新增至 docker 群組,讓您可以在不使用 sudo 的情況下執行 Docker 命令。
sudo usermod -a -G docker ec2-user
# Log out and log back in again
login ec2-user
# 驗證 ec2-user 可以執行 Docker 命令
docker info

如果上述指令操作無誤的話應該會出現以下畫面

Docker 安裝且啟動成功
圖 11、Docker 安裝且啟動成功

建立 Docker 影像

透過 PuTTy 編輯 Dockerfile,也可以在 Windows 編輯完後,透過 FileZilla 上傳到 EC2,內容如下,特別要注意的是 wget 這一行,務必要完成 S3 物件的上傳,而得到物件 URL

FROM amazonlinux:2

# 安裝相關套件
RUN yum install -y \
    wget \
    httpd \
    php \
 && ln -s /usr/sbin/httpd /usr/sbin/apache2

# Install app
RUN rm -rf /var/www/html/* && mkdir -p /var/www/html
# 昨天放在 S3 上的檔案,務必要修改正確
RUN wget https://bucket-name.s3-ap-southeast-1.amazonaws.com/index.php
ADD index.php /var/www/html

# Configure apache
RUN chown -R apache:apache /var/www
ENV APACHE_RUN_USER apache
ENV APACHE_RUN_GROUP apache
ENV APACHE_LOG_DIR /var/log/apache2

EXPOSE 80
CMD ["/usr/sbin/apache2", "-D", "FOREGROUND"]

接下來透過 PuTTy 在 EC2 命令列中輸入以下指令

# 從 Dockerfile 建置 Docker 影像,務必跟 Dockerfile 在相同目錄下
docker build -t ithome-container .
# 執行 docker images,驗證映像已正確建立。
docker images --filter reference=ithome-container
# 檢查伺服器的網頁伺服器是否開啟
sudo service httpd status
# 關閉伺服器的網頁伺服器
sudo service httpd stop
# 執行新建置的映像,第 1 個 80 是容器的埠號,第 2 個 80 是主機的埠號
docker run -t -i -p 80:80 ithome-container

Docker 影像檔建置並啟動
圖 12、Docker 影像檔建置並啟動

開啟瀏覽器,然後指向執行 Docker 並託管容器的伺服器,應該會看到這個網頁內容

Container內的網頁
圖 13、Container內的網頁

References


上一篇
Amazon Simple Storage Service (Amazon S3) - Day19
下一篇
Amazon Elastic Container Registry (ECR) - Day21
系列文
AWS架構應用24

尚未有邦友留言

立即登入留言