eCloudtureeCloudture
  • 雲端培訓
    • 雲端學習地圖
    • 雲端培訓課程
    • 專業證照培訓
    • eCloudture 智慧製造雲端應用 解決方案培訓
  • 人才培育
    • eCloudture 無人車體驗營
    • 新北市教育局 – DeepRacer Evo 雲端 x AI 無人自走車冬令營隊
  • 雲端資源
    • 部落格
    • 考試中心
  • eCloudture
    • 關於eCloudture
    • 學員心得分享
    • 聯絡我們
  • English
    • 雲端培訓
      • 雲端學習地圖
      • 雲端培訓課程
      • 專業證照培訓
      • eCloudture 智慧製造雲端應用 解決方案培訓
    • 人才培育
      • eCloudture 無人車體驗營
      • 新北市教育局 – DeepRacer Evo 雲端 x AI 無人自走車冬令營隊
    • 雲端資源
      • 部落格
      • 考試中心
    • eCloudture
      • 關於eCloudture
      • 學員心得分享
      • 聯絡我們
    • English
    • 目錄
    • 全部文章
    • 利用AWS Cloud9 開始學習使用Docker容器

    利用AWS Cloud9 開始學習使用Docker容器

    • Posted by Shelly Yu
    • 課程類別 全部文章, 容器服務
    • Date 21/06/2019
    • Comments 0 comment

    前言

    容器化技術(Containerization)並不是一個新的名詞,最早Linux就提出了LXC(Linux Container)的想法,只是到了Docker問世後,容器技術才又被拿出來討論。容器化技術是指將應用程式(application)、運行環境(running environment)、函式庫(library)…等,這些執行應用程式中必要的東西,全部包在一起。正如同android studio將開發環境打包成apk般。而與虛擬機技術相比,容器化技術將可以省去開發者安裝每個Guest OS的時間與空間,這表示相較於虛擬機器,你可以在指定的硬體上執行更多容器,也比較不會有效能大幅下降的詬病。

    Docker是一項開源(open source)的專案,主要提供容器化應用程式的部署與自動化的管理,使開發者能夠在開發專案的同時,也能快速且方便的打包及部署服務。Docker有三大重要的基本概念,分別是 Docker 映像檔(images)、Docker 容器(Container)以及 Docker 倉庫(registries),我們將在下方一一說明:

    • Docker 映像檔(images) : Docker 映像檔為 Docker 容器被啟動時,所執行的應用程式環境。與虛擬機的映像檔相似,虛擬機透過映像檔啟動作業系統,而 Docker 則是將檔案系統的狀態儲存於映像檔中。其中 Docker 映像檔是唯讀的模板。

    • Docker 容器(Container): Docker 容器是應用程式執行的實例。開發者透過映像檔啟動容器,就可在容器上運行服務。

      建議不要在同一個容器中執行過多程序。

    • Docker 倉庫(registries) : Docker 倉庫是儲存映像檔的地方,開發者可以將自己的映像檔上傳至倉庫上,供別人下載使用。也可透過 Docker 倉庫讓映像檔在不同裝置上輕鬆的搬移。

    情境

    在此示範中,你將學習如何使用 AWS Cloud9 在 Docker 容器上運行簡單的 “Hello World” 網頁。

    步驟

    設定 AWS Cloud9 環境

    首先,我們可以按照以下步驟操作,用以建立 Cloud9 環境。我們便能在 AWS Cloud9 上操作 EC2 主機,進而部署 Docker 服務。

    • 在服務目錄底下,選取 Cloud9,並按下 Create environment。

    • 在Name Environment 頁面,你可以在 Name 欄位中為你的環境資料夾命名(你也可以在Description欄位中敘述你的環境用途),然後跳至下一步。

    • 在 Configure settings 的頁面 :

      Environment type : 選取 Create a new instance for environment (EC2)。

      Instance type : 選取 t2.micro (1 GiB RAM + 1 vCPU)。

      • 你可以選擇性的在 Configure settings 頁面中的 Cost-saving setting 選項裡,自由調整在 多少時間後 停止閒置的 EC2 主機,以防你忘記在工作結束後停止 EC2 主機,造成不必要的開銷。

    • 保持其他設定為初始設定, 並跳至下一步。

    • 在 Review 頁面, 按下 Create environment 按鈕以建立環境。創建環境可能需要 30 〜 60 秒的時間。

    建立 Docker 映像檔

    在 EC2 主機及 Cloud9 環境架設完畢後,我們需要先建立 Docker 映像檔,才能利用它啟動 Docker 容器的服務。在本環節中,我們將建立一個用來執行簡易 web 應用程序的 Docker 映像檔, 並在 EC2 主機上啟動容器以進行測試。

    • 讓我們稍微介紹一下 AWS Cloud9 ,下圖是 Cloud9 的介面

    1. 預設的上方部分為終端機或文字編輯器。
    2. 預設的下方部分也是終端機或文字編輯器。

      兩區塊皆能在 EC2 環境中新增新的終端機工作,並在其中下指令碼,或者在區塊中進行文字編輯的工作。

    3. EC2主機環境中的檔案總管。

    4. 工具面板,合作者,功能插件,除錯系統。

    • 在工作面板出現之後,按下 Create File 來在環境下新增一個新的檔案.

    • 在新增的檔案中,貼上下方的程式碼,程式將在建構 Docker 映像檔及設置 Apache 網路伺服器時被執行。在網頁的檔案及容器建置完成後,我們將在網頁上看到 “Hello World!” 的字樣。

      FROM php:7.2-apache

      RUN echo “Hello World!” > /var/www/html/index.html

    • 按下CTRL+S(Mac使用者請按CMD+S)來儲存檔案,並將其重新命名為 Dockerfile。

    你可以將 Dockerfile 想成一份清單,用於描述要新建的 Docker 映像檔是基於哪個初始映像檔,並且定義我們想要對該初始映像檔做出的安裝行為及運行內容。

    • 在 Cloud9的介面中,我們可以利用下方的區域執行終端機指令。

    • 透過執行docker version,我們可以驗證 Docker 是否已經安裝在 AWS Cloud9 環境中。 一般來說,Cloud9 環境預設是內建 Docker 的,因此我們不需要再自行安裝一次。結果應該如下方所示: 

      若沒有安裝 Docker,下圖Server端會顯示找不到 Docker 的錯誤。此時則需在終端機指令區中,執行 $ sudo yum install -y docker。

      $ docker version
      Client: Version: 18.06.1-ce
      API version: 1.38
      Go version: go1.10.3
      Git commit: e68fc7a215d7133c34aa18e3b72b4a21fd0c6136
      Built: Fri Oct 26 23:38:19 2018
      OS/Arch: linux/amd64
      Experimental: false

      Server:
      Engine:
      Version: 18.06.1-ce
      API version: 1.38 (minimum version 1.12)
      Go version: go1.10.3
      Git commit: e68fc7a/18.06.1-ce
      Built: Fri Oct 26 23:39:46 2018
      OS/Arch: linux/amd64
      Experimental: false

      • 透過 Dockerfile 建立 Docker 映像檔。

      注意: 請將 <your-image-name> 替換為你要為 docker 映像檔REPOSITORY 加的標籤名稱 ,而最後方的 . 則代表著 Dockerfile 存放的路徑可能是在任何地方。Docker 將根據你的 Dockerfile 創建映像檔。

      $docker build -t .
      Sending build context to Docker daemon 18.43kB
      Step 1/2 : FROM php:7.2-apache
      7.2-apache: Pulling from library/php
      5e6ec7f28fb7: Pull complete
      cf165947b5b7: Pull complete
      7bd37682846d: Pull complete
      99daf8e838e1: Pull complete
      ae320713efba: Pull complete
      ebcb99c48d8c: Pull complete
      9867e71b4ab6: Pull complete
      936eb418164a: Pull complete
      5d9617dfb66b: Pull complete
      8dd7afaae109: Pull complete
      8f207844da7e: Pull complete
      adb3ae5e4987: Pull complete
      44d7d07029db: Pull complete
      fb91064652b0: Pull complete
      Digest: sha256:b840f37df10893e6dd4f722bf40032ae072e6f63352e2e6c14370a79057fa2c9
      Status: Downloaded newer image for php:7.2-apache
      —> e2834342b873
      Step 2/2 : RUN echo “Hello World!” > /var/www/html/index.html
      —> Running in 6d3f2ea3aa85
      Removing intermediate container 6d3f2ea3aa85
      —> bf7eda5138c7
      Successfully built bf7eda5138c7
      Successfully tagged
      :latest

    • 列出 docker 映像檔來檢測你新建的映像檔是否被正確的建立。我們應該要在執行下列指令碼後,看到其中一項映像檔REPOSITORY 的標籤名稱為 <your-image-name>。

      $ docker images
      REPOSITORY TAG IMAGE ID CREATED SIZE
      latest bf7eda5138c7 About a minute ago 378MB
      php 7.2-apache e2834342b873 2 days ago 378MB
      lambci/lambda nodejs4.3 4f521df1e2d3 7 weeks ago 940MB
      lambci/lambda python3.6 4a6785b2780d 7 weeks ago 1.07GB
      lambci/lambda python2.7 9e29188f3f15 7 weeks ago 946MB
      lambci/lambda nodejs6.10 fec3cfdc31b4 7 weeks ago 991MB

    啟動 Docker 容器

    • 透過新建的映像檔啟動容器(Container),其中 -p 8080:80 會將容器上公開的連接埠 80 對應至主機系統上的連接埠 8080。(連接埠8080為 Cloud9 預設的連接埠)

      注意:<your-container-name> 是你要為啟動的 Docker 容器取的名字。

      $docker run –name -d -p 8080:80
      2e3cdb60da3b1476ba0f7009504b0a5ed06abeabe5ca4beae27e048f437bbfbf

      輸出的結果為容器的ID,每一個 Docker 容器皆有屬於自己的容器ID。

    • 使用 docker ps -a 列出容器的清單,一旦容器被正確的啟動,你將能在清單中找到一筆容器的 CONTAINER NAME 為自己新啟動的容器名稱。

      $ docker ps -a
      CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
      2e3cdb60da3b “docker-php-entrypoi…” About a minute ago Up About a minute 0.0.0.0:8080->80/tcp

    觀察執行結果

    • 點選頁面上方的 Preview 按鈕,然後按下 Preview Running Application,你將不用另外打開網頁,便能預覽你的執行結果。

    • 執行結果應如下圖所示:
      >若你按下上方的網址列:/,你就能看到指向 Cloud9 連接阜8080 的端點位址,而不是單純的:/,看起來會是這樣子:https://<your-container-ID>.vfs.cloud9.us-east-1.amazonaws.com/

    • 最後你可以使用docker top,來觀察容器正在執行中的程序:

      $ docker top
      UID PID PPID C STIME TTY TIME CMD
      root 5128 5109 0 02:23 ? 00:00:00 apache2 -DFOREGROUND
      33 5203 5128 0 02:23 ? 00:00:00 apache2 -DFOREGROUND
      33 5204 5128 0 02:23 ? 00:00:00 apache2 -DFOREGROUND
      33 5205 5128 0 02:23 ? 00:00:00 apache2 -DFOREGROUND
      33 5206 5128 0 02:23 ? 00:00:00 apache2 -DFOREGROUND
      33 5207 5128 0 02:23 ? 00:00:00 apache2 -DFOREGROUND

    結論

    現在你已經學會了如何在 Docker 容器上顯示簡單的網頁。對於想要學習 Docker 容器的初學者來說,這只是一個簡單的入門教學。然而,Docker 還能做到更多的事情,你甚至可以從 Docker hub 上面,自行下載映像檔來練習,進行更進一步的實作。

    參考資料

    • Docker基礎介紹

    • 30分鐘的Docker中文教學

    • Cloud9 官方介紹

    Tag:AWS, AWS Cloud9, Container, Containerization, Docker, Ec2

    • Share:
    Shelly Yu

    Previous post

    AWS Serverless Application Model
    21/06/2019

    Next post

    創建讀寫分離的 AWS RDS 資料庫
    21/06/2019

    You may also like

    新聞封面-12
    【焦點新聞|Microsoft Build 2022】
    2 6 月, 2022
    新聞封面-11
    【焦點新聞】0428-0511 AWS 服務更新
    13 5 月, 2022
    新聞封面429-10-10-10
    【焦點新聞】0421-0427 AWS 服務更新
    29 4 月, 2022

    給我們的意見 取消回覆

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

    搜尋文章

    分類

    • AWS re:Invent 特輯
    • Microsoft Ignite 特輯
    • 人工智慧/機器學習
    • 全部文章
    • 基本概念
    • 大數據
    • 容器服務
    • 新聞
    • 無伺服器
    • 物聯網
    • 維運
    • 資訊安全

    最新文章

    【焦點新聞|Microsoft Build 2022】
    026 月2022
    【焦點新聞】0512-0525 AWS 服務更新
    275 月2022
    【焦點新聞】0428-0511 AWS 服務更新
    135 月2022
    【焦點新聞】0421-0427 AWS 服務更新
    294 月2022
    Phone : +886 2 22801777
    Mail : info@ecloudture.com

    雲端培訓

    • 雲端學習地圖
    • 雲端培訓課程
    • 專業證照培訓

    人才招募

    • 2020 eCloudture AIoT 雲端夏令營

    雲端資源

    • 部落格
    • 考試中心

    eCloudture

    • 關於eCloudture
    • 學員心得分享
    • 聯絡我們

    • Privacy
    • Terms
    • Sitemap