的 Docker 教學課程 AWS Cloud9 - AWS Cloud9

AWS Cloud9 不再提供給新客戶。的現有客戶 AWS Cloud9 可以繼續正常使用服務。進一步了解

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

的 Docker 教學課程 AWS Cloud9

本教學課程示範如何將開發環境連接至 AWS Cloud9 SSH Amazon 中 Amazon Linux 執行個體內部執行中的 Docker 容器EC2。這可讓您使用 AWS Cloud9 IDE來使用 Docker 容器內的程式碼和檔案,以及在該容器上執行命令。如需有關 Docker 的詳細資訊,請參閱 Docker 網站上的什麼是 Docker

遵循本教學課程並建立此範例可能會導致 AWS 您的帳戶產生費用。這包括 Amazon 等服務的可能費用EC2。如需詳細資訊,請參閱 Amazon EC2 Pricing

必要條件

  • 您應該有執行 Amazon Linux 或 Ubuntu Server 的 Amazon EC2執行個體。此範例假設您的帳戶中已有執行 Amazon Linux 或 Ubuntu Server 的 Amazon EC2執行個體 AWS 。若要啟動 Amazon EC2執行個體,請參閱啟動 Linux Virtual Machine 。在精靈的選擇 Amazon Machine Image (AMI) 頁面中,選擇AMI其顯示名稱以 Amazon Linux AMIUbuntu Server 開頭的

  • 如果 Amazon EC2執行個體在 Amazon 內執行VPC,則有其他要求。請參閱 VPC AWS Cloud9 開發環境的設定

  • Amazon EC2執行個體應至少有 8 到 16 GB 的可用磁碟空間。此範例使用大小超過 3 GB 的 Docker 映像和可以使用 3 GB 或更多磁碟空間的額外增量來建置映像。如果您在可用空間為 8 GB 或更少的磁碟上嘗試執行此範例,我們發現 Docker 映像可能不會建置或者 Docker 容器可能不會執行。若要確認執行個體的可用磁碟空間,您可以在執行個體上執行 df -h 之類的命令 (適用於以人類可讀取格式的磁碟檔案系統資訊)。若要增加現有執行個體的磁碟大小,請參閱 Amazon EC2使用者指南 中的修改磁碟區

步驟 1:安裝和執行 Docker

在此步驟中,您會檢查 Docker 是否已安裝在 Amazon EC2執行個體上,如果尚未安裝 Docker,請安裝 Docker。在安裝 Docker 後,您會在執行個體上執行它。

  1. 使用ssh公用程式或 Pu 等SSH用戶端連線至執行中的 Amazon EC2執行個體TTY。若要這樣做,請參閱啟動 Linux 虛擬機器中的「步驟 3:連接到執行個體」。

  2. 檢查在執行個體上是否已安裝 Docker。若要這樣做,請在執行個體上執行 docker 命令並使用 --version 選項。

    docker --version

    如果 Docker 已安裝,即會顯示 Docker 版本和建置號碼。在這種情況下,請直接跳到此程序中稍後的步驟 5。

  3. 安裝 Docker. 若要這樣做,請以 install 動作執行 yum apt 命令,並指定要安裝的 docker docker.io 套件。

    針對 Amazon Linux:

    sudo yum install -y docker

    針對 Ubuntu Server:

    sudo apt install -y docker.io
  4. 確認 Docker 已安裝。若要進行這項動作,請重新執行 docker --version 指令。即會顯示 Docker 版本和建置號碼。

  5. 執行 Docker。若要這樣做,請使用 docker 服務和 start 動作執行 service 命令。

    sudo service docker start
  6. 確認 Docker 正在執行中。若要這樣做,請執行 docker 命令與 info 動作。

    sudo docker info

    如果 Docker 正在執行中,即會顯示 Docker 的相關訊息。

步驟 2:建置影像

在此步驟中,您使用 Dockerfile 建置 Docker 影像到該執行個體。這個範例使用映像,其中包含 Node.js 和範例聊天伺服器應用程式。

  1. 在執行個體上建立 Dockerfile。若要這麼做,在SSH用戶端仍連接至執行個體的情況下,在執行個體的 /tmp 目錄中建立名為 的檔案Dockerfile。例如,執行 touch 命令,如下所示。

    sudo touch /tmp/Dockerfile
  2. 將下列內容新增至 Dockerfile 檔案:

    # Build a Docker image based on the Amazon Linux 2 Docker image. FROM amazonlinux:2 # install common tools RUN yum install -y https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm RUN yum update -y RUN yum install -y sudo bash curl wget git man-db nano vim bash-completion tmux gcc gcc-c++ make tar # Enable the Docker container to communicate with AWS Cloud9 by # installing SSH. RUN yum install -y openssh-server # Ensure that Node.js is installed. RUN yum install -y nodejs # Create user and enable root access RUN useradd --uid 1000 --shell /bin/bash -m --home-dir /home/ubuntu ubuntu && \ sed -i 's/%wheel\s.*/%wheel ALL=NOPASSWD:ALL/' /etc/sudoers && \ usermod -a -G wheel ubuntu # Add the AWS Cloud9 SSH public key to the Docker container. # This assumes a file named authorized_keys containing the # AWS Cloud9 SSH public key already exists in the same # directory as the Dockerfile. RUN mkdir -p /home/ubuntu/.ssh ADD ./authorized_keys /home/ubuntu/.ssh/authorized_keys RUN chown -R ubuntu /home/ubuntu/.ssh /home/ubuntu/.ssh/authorized_keys && \ chmod 700 /home/ubuntu/.ssh && \ chmod 600 /home/ubuntu/.ssh/authorized_keys # Update the password to a random one for the user ubuntu. RUN echo "ubuntu:$(cat /dev/urandom | tr -dc 'a-zA-Z0-9' | fold -w 32 | head -n 1)" | chpasswd # pre-install Cloud9 dependencies USER ubuntu RUN curl https://d2j6vhu5uywtq3.cloudfront.net/static/c9-install.sh | bash USER root # Start SSH in the Docker container. CMD ssh-keygen -A && /usr/sbin/sshd -D

    若要將上述內容新增至 Dockerfile 檔案,您可以使用執行個體上的 vi 公用程式,如下所示。

    1. 使用 AWS Cloud9 開啟和編輯/tmp/Dockerfile檔案。

      sudo vi /tmp/Dockerfile
    2. 將上述內容貼到 Dockerfile 檔案。如果您不確定如何執行此操作,請參閱SSH用戶端的文件。

    3. 切換至命令模式。若要執行此操作,請按 Esc 鍵 (-- INSERT -- 從視窗底部消失)。

    4. 輸入 :wq (寫入 /tmp/Dockerfile 檔案、儲存檔案,然後結束 vi ),然後按下 Enter

    注意

    您可以從 存取經常更新的 Docker 映像清單 AWS CodeBuild。如需詳細資訊,請參閱 AWS CodeBuild 使用者指南 中的 Docker 映像 CodeBuild

  3. 在執行個體上,建立包含 AWS Cloud9 SSH公有金鑰的檔案,以供 Docker 容器使用。若要這樣做,舉例來說,可以透過執行 Dockerfile authorized_keys 命令,在與 touch 檔案所在的相同目錄中,建立名為 的檔案。

    sudo touch /tmp/authorized_keys
  4. 將 AWS Cloud9 SSH公有金鑰新增至 authorized_keys 檔案。若要取得公有 AWS Cloud9 SSH金鑰,請執行下列動作:

    1. 在 開啟 AWS Cloud9 主控台https://console.aws.amazon.com/cloud9/

    2. 在 AWS 導覽列的 AWS 區域選取器中,選擇您要在此主題稍後建立 AWS Cloud9 開發環境的 AWS 區域。

    3. 如果顯示歡迎頁面,針對新 AWS Cloud9 環境 ,選擇建立環境 。否則,請選擇 Create environment (建立環境)。

    4. Name environment (為環境命名) 頁面的 Name (名稱) 內,輸入環境的名稱。(此處的名稱並不重要。您稍後還會選擇不同的名稱。)

    5. 選擇 下一個步驟

    6. 對於環境類型 ,選擇連線並在遠端伺服器 (SSH) 中執行

    7. 展開檢視公有SSH金鑰

    8. 選擇 Copy key to clipboard (複製金鑰至剪貼簿)。(這介於檢視公有SSH金鑰進階設定 之間。)

    9. 選擇取消

    10. 將剪貼簿的內容貼到 authorized_keys 檔案,然後儲存檔案。例如,您可以使用 vi 公用程式,如此步驟稍早所述。

  5. build 動作執行 docker 命令,並將標籤 cloud9-image:latest 新增到影像,並指定要使用的 Dockerfile 檔案路徑,藉此建置影像。

    sudo docker build -t cloud9-image:latest /tmp

    如果成功,建置輸出的最後兩行會顯示 Successfully builtSuccessfully tagged

    若要確認 Docker 是否順利建置映像,執行 docker 命令並搭配 image ls 動作。

    sudo docker image ls

    若成功,輸出會顯示一個項目,其中 REPOSITORY 欄位設為 cloud9-imageTAG 欄位設為 latest

  6. 記下 Amazon EC2執行個體的公有 IP 地址。您在步驟 4:建立環境時會需要此資訊。如果您不確定執行個體的公有 IP 地址為何,您可以對該執行個體執行以下命令,來取得此資訊。

    curl http://169.254.169.254/latest/meta-data/public-ipv4

步驟 3:執行容器

在此步驟中,您在執行個體上執行 Docker 容器。此容器是根據您在之前步驟所建的映像。

  1. 若要執行 Docker 容器,在執行個體上執行的 docker 命令搭配 run 動作和以下選項。

    sudo docker run -d -it --expose 9090 -p 0.0.0.0:9090:22 --name cloud9 cloud9-image:latest
    • -d 會以分離模式執行容器,每當用來執行容器的根程序 (在此範例中為SSH用戶端) 結束時即會結束。

    • -it 會使用配置的虛擬執行TTY容器,即使容器未連接,也會保持STDIN開啟。

    • --expose 讓使用者能夠從容器使用指定的連接埠 (在這個範例中,連接埠 9090)。

    • -p 透過指定的 IP 地址和連接埠,讓指定的連接埠在內部可供 Amazon EC2執行個體使用。在此範例中,容器9090上的連接埠可以透過 Amazon EC2執行個體22上的連接埠在內部存取。

    • --name 是容器之可供人類讀取的名稱 (在此範例中,cloud9)。

    • cloud9-image:latest 要用來執行容器的建置映像之可供人類讀取的名稱。

    若要確認 Docker 是否順利執行容器,執行 docker 命令並搭配 container ls 動作。

    sudo docker container ls

    若成功,輸出會顯示一個項目,其中 IMAGE 欄位設為 cloud9-image:latestNAMES 欄位設為 cloud9

  2. 登入執行中容器。若要這樣做,請執行 docker 命令並使用 exec 動作和下列選項。

    sudo docker exec -it cloud9 bash
    • -it 會使用配置的虛擬執行TTY容器,即使容器未連接,也會保持STDIN開啟。

    • cloud9 是執行中容器之可供人類讀取的名稱。

    • bash 在執行中容器中開始標準 shell。

    如果成功,終端提示變更會顯示容器的登入使用者名稱和容器 ID。

    注意

    如果您想要登出執行中的容器,執行 exit 命令。終端機提示會變回,以顯示執行個體的登入使用者名稱和執行個體DNS的私有名稱。容器仍應執行中。

  3. 對於您要在容器登入後從中 AWS Cloud9 開始的執行中容器上的目錄,將其存取權限設定為 rwxr-xr-x 。這表示 read-write-execute擁有者的許可、群組的讀取執行檔許可,以及其他人的讀取執行檔許可。例如,如果目錄的路徑是 ~,您可以在執行中容器中執行 chmod 命令,以在目錄上設定這些許可,如下所示。

    sudo chmod u=rwx,g=rx,o=rx ~
  4. 請記下在包含 Node.js 二進位執行容器上的目錄路徑,因為您在步驟 4:建立環境時會需要此資訊。如果您不確定此路徑為何,對執行中容器執行以下命令來取得此資訊。

    which node

步驟 4:建立環境

在此步驟中,您可以使用 AWS Cloud9 來 AWS Cloud9 SSH建立開發環境,並將其連接至執行中的 Docker 容器。 AWS Cloud9 建立環境後,它會顯示 AWS Cloud9 IDE ,以便您可以開始使用容器中的檔案和程式碼。

您可以使用 AWS Cloud9 主控台建立 AWS Cloud9 SSH開發環境。您無法使用 建立SSH環境CLI。

必要條件

  • 先確定您已完成 設定 AWS Cloud9 中的步驟。您就能登入 AWS Cloud9 主控台並建立環境。

  • 識別您要 AWS Cloud9 連線到環境的現有雲端運算執行個體 (例如 中的 Amazon EC2執行個體 AWS 帳戶) 或您自己的伺服器。

  • 確保現有的執行個體或您自己的伺服器符合所有 SSH主機要求。這些條件包括擁有 Python、Node.js 和其他已安裝元件的特定版本;在您想要 AWS Cloud9 於登入之後從中啟動的目錄上設定特定許可;以及設定任何相關聯的 Amazon Virtual Private Cloud。

建立SSH環境

  1. 請確認您已完成前述必要條件。

  2. 如果您尚未連線到現有執行個體或您自己的伺服器,請使用SSH用戶端來連線至該執行個體或您自己的伺服器。這可確保您可以將必要的公有SSH金鑰值新增至執行個體或伺服器。此程序稍後會再進一步說明。

    注意

    若要連線至現有的 AWS 雲端 運算執行個體,請參閱下列一或多個資源:

    若要連線至您自己的伺服器,請使用 SSH。SSH 已安裝在 macOS 和 Linux 作業系統上。若要在 Windows SSH 上使用 連線到伺服器,您必須安裝 Pu TTY

  3. 在 登入 AWS Cloud9 主控台https://console.aws.amazon.com/cloud9/

  4. 登入 AWS Cloud9 主控台後,在頂端導覽列中選擇要在其中 AWS 區域 建立環境的 。如需可用 的清單 AWS 區域,請參閱AWS Cloud9中的 AWS 一般參考

    AWS Cloud9 主控台中的區域選取器
  5. 如果這是您第一次建立開發環境,畫面會顯示歡迎頁面。在新 AWS Cloud9 環境面板中,選擇建立環境

    如果您先前已建立開發環境,也可以展開畫面左側的窗格。選擇 Your environments (您的環境),然後選擇 Create environment (建立環境)。

    welcome (歡迎) 頁面中:

    如顯示歡迎頁面,請選擇建立環境按鈕

    或者在 Your environments (您的環境) 頁面中:

    如未顯示歡迎頁面,請選擇建立環境按鈕
  6. Create environment (建立環境) 頁面上,輸入環境的名稱。

  7. Description (描述) 中,輸入環境的相關資訊。在本教學中,使用 This environment is for the AWS Cloud9 tutorial.

  8. 針對 Environment type (環境類型),請從下列選項中選擇 Existing Compute (現有運算):

    • 新EC2執行個體 – 啟動 AWS Cloud9 可直接透過 連線至 的 Amazon EC2執行個體SSH。

    • 現有運算 – 啟動不需要任何開放傳入連接埠的 Amazon EC2執行個體。透過 AWS Cloud9 連線至執行個體AWS Systems Manager

      • 如果您選取現有的運算選項,則會建立服務角色和IAM執行個體設定檔,以允許 Systems Manager 代表您與EC2執行個體互動。您可以在界面中繼續往下拉到 Service role and instance profile for Systems Manager access (Systems Manager 存取的服務角色和執行個體描述檔) 區塊檢視兩者的名稱。如需詳細資訊,請參閱使用 存取無輸入EC2執行個體 AWS Systems Manager

    警告

    為您的環境建立EC2執行個體可能會向 Amazon AWS 帳戶 的 收取費用EC2。使用 Systems Manager 管理EC2執行個體的連線無需額外費用。

    警告

    AWS Cloud9 使用SSH公有金鑰安全地連線至您的伺服器。若要建立安全連線,請將公有金鑰新增到您的 ~/.ssh/authorized_keys 檔案中,並提供以下步驟中的登入憑證。選擇將金鑰複製到剪貼簿以複製SSH金鑰,或選擇檢視公有SSH金鑰以顯示金鑰。

  9. Existing compute (現有運算) 面板上,針對 User (使用者),輸入您稍早在此程序中,用來連線至執行個體或伺服器的登入名稱。例如,針對 AWS 雲端 運算執行個體,它可能是 ec2-userubunturoot

    注意

    建議將登入名稱與執行個體或伺服器上的管理許可或管理員使用者建立關聯。尤其,建議這個登入名稱擁有執行個體或伺服器上的 Node.js 安裝。若要加以確認,請從執行個體或伺服器的終端機中執行命令 ls -l $(which node) (如果您使用 nvm,也可以執行 ls -l $(nvm which node))。此命令會顯示 Node.js 安裝的擁有者名稱。同時也會顯示安裝的許可、群組名稱和位置。

  10. 針對 Host (主機),輸入執行個體或伺服器的公有 IP 地址 (偏好) 或主機名稱。

  11. 針對連接埠 ,輸入 AWS Cloud9 您要用來嘗試連線至執行個體或伺服器的連接埠。或者,也可以保留預設連接埠。

  12. 選擇其他詳細資訊 - 可選用以顯示環境路徑、Node.js 二進位檔路徑和SSH跳轉主機資訊。

  13. 對於環境路徑 ,輸入 AWS Cloud9 您要從中啟動的執行個體或伺服器上目錄的路徑。您會在此程序稍早的先決條件中指定此路徑。如果您將此空白,則 AWS Cloud9 會在登入之後使用您的執行個體或伺服器一般用來啟動的目錄。這通常是家用或預設目錄。

  14. 針對 Path to Node.js binary path (node.js 二進位檔路徑),請輸入路徑資訊,以指定執行個體或伺服器上的 Node.js 二進位檔路徑。若要取得路徑,您可以在執行個體或伺服器上執行命令 which node (如果您使用 nvm,也可以執行 nvm which node)。例如,路徑可能是 /usr/bin/node。如果您保留空白,則 AWS Cloud9 會在嘗試連線 Node.js 二進位檔時嘗試猜測其所在的位置。

  15. 針對SSH跳轉主機 ,輸入執行個體或伺服器使用的跳轉主機相關資訊。使用格式 USER_NAME@HOSTNAME:PORT_NUMBER (例如 ec2-user@:ip-192-0-2-0:22)。

    跳接主機必須符合下列要求:

    • 必須使用 才能透過公有網際網路連線SSH。

    • 它必須允許使用任何 IP 地址透過指定的連接埠傳入存取。

    • 複製到現有執行個體或伺服器上~/.ssh/authorized_keys檔案的公有SSH金鑰值也必須複製到跳轉主機上的~/.ssh/authorized_keys檔案中。

    • 必須安裝 Netcat。

  16. 藉由為每個標籤提供一個索引鍵和一個,最多新增 50 個標籤。選取 Add new tag (新增標籤) 來執行此操作。這些標籤作為資源標籤連接至 AWS Cloud9 環境,並傳播至下列基礎資源: AWS CloudFormation 堆疊、Amazon EC2執行個體和 Amazon EC2安全群組。若要進一步了解標籤,請參閱 IAM 使用者指南中的使用 AWS 資源標籤控制存取,以及本指南中標籤的進階資訊

    警告

    如果您在建立這些標籤之後予以更新,這些變更不會傳播至基礎資源。如需詳細資訊,請參閱標籤相關進階資訊中的 將標籤更新傳播至基礎資源

  17. 選擇 Create (建立) 以建立您的環境,然後系統會將您重新導向至首頁。成功建立帳戶時, AWS Cloud9 主控台頂端會出現綠色閃爍列。您可以選取新的環境,然後選擇在 Cloud9 中開啟以啟動 IDE。

    AWS Cloud9 IDE AWS Cloud9 主控台中的選取器

    若無法建立帳戶, AWS Cloud9 主控台上方會出現紅色閃爍列。由於 Web 瀏覽器、 AWS 您的存取許可、執行個體或關聯的網路發生問題,您的帳戶可能無法建立 。您可以在 AWS Cloud9 疑難排解區段找到可行修正方法,解決造成帳戶無法使用的問題。

注意

如果您的環境使用代理來存取網際網路,您必須將代理詳細資訊提供給 , AWS Cloud9 以便安裝相依性。如需詳細資訊,請參閱無法安裝相依性

步驟 5:執行程式碼

在此步驟中,您可以使用 AWS Cloud9 IDE,在執行中的 Docker 容器內執行範例應用程式。

  1. 使用為執行中的容器顯示的 AWS Cloud9 IDE,啟動範例聊天伺服器。若要這麼做,在 Environment (環境) 視窗中,以滑鼠右鍵按一下範例 workspace/server.js 檔案,然後選擇 Run (執行)

  2. 預覽範例應用程式。若要執行此操作,請從 Environment (環境) 視窗開啟 workspace/client/index.html 檔案。然後,在功能表列中,選擇 Tools, Preview, Preview Running Application (工具、預覽、預覽執行應用程式)

  3. 在應用程式預覽索引標籤上,對於 Your Name (您的姓名),輸入名稱。對於 Message (訊息),請輸入訊息。然後選擇 Send (傳送)。聊天伺服器會將您的名稱和訊息新增至清單。

步驟 6:清除

在此步驟中,您會刪除環境,並從 Amazon EC2執行個體中移除 AWS Cloud9 和 Docker 支援檔案。此外,為了避免在您完成使用此範例後持續向 AWS 您的帳戶收取費用,您應該終止執行 Docker 的 Amazon EC2執行個體。

步驟 6.1:刪除環境

若要刪除環境,請參閱刪除 AWS Cloud9 中的環境

步驟 6.2:從容器移除 AWS Cloud9 支援檔案

刪除環境後,有些 AWS Cloud9 支援檔案仍會保留在容器中。如果您想要繼續使用容器,但不再需要這些支援檔案,請從您指定 AWS Cloud9 從其登入後開始的容器上的目錄中刪除.c9資料夾。例如,如果目錄是 ~,請以 -r 選項執行 rm 命令,如下所示。

sudo rm -r ~/.c9

步驟 6.3:從執行個體移除 Docker 支援檔案

如果您不想再將 Docker 容器、Docker 映像和 Docker 保留在 Amazon EC2執行個體上,但想要保留執行個體,您可以移除這些 Docker 支援檔案,如下所示。

  1. 將 Docker 容器從執行個體中移除。若要這樣做,請以 stop rm 在執行個體上執行 docker 命令,停止動作和容器的人類可識讀名稱。

    sudo docker stop cloud9 sudo docker rm cloud9
  2. 將 Docker 映像從執行個體中移除。若要這樣做,請在執行個體上執行 docker 命令並使用 image rm 動作和映像的標籤。

    sudo docker image rm cloud9-image:latest
  3. 移除任何可能仍然結束的額外 Docker 支援檔案。若要這樣做,請在執行個體上執行 docker 命令並使用 system prune 動作。

    sudo docker system prune -a
  4. 取消安裝 Docker。若要這樣做,請以 remove 動作在執行個體上執行 yum 命令,並指定要取消安裝的 docker 套件。

    針對 Amazon Linux:

    sudo yum -y remove docker

    針對 Ubuntu Server:

    sudo apt -y remove docker

    您也可以移除您先前建立的 Dockerfileauthorized_keys 檔案。例如,在執行個體上執行 rm 命令。

    sudo rm /tmp/Dockerfile sudo rm /tmp/authorized_keys

步驟 6.4:終止執行個體

若要終止 Amazon EC2執行個體,請參閱 Amazon EC2使用者指南 中的終止執行個體