适用于 Docker 的教程 AWS Cloud9 - AWS Cloud9

AWS Cloud9 不再向新客户提供。 AWS Cloud9 的现有客户可以继续正常使用该服务。了解更多

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

适用于 Docker 的教程 AWS Cloud9

本教程向您展示如何将 AWS Cloud9 SSH开发环境连接到亚马逊中亚马逊 Linux 实例中正在运行的 Docker 容器。EC2这使您能够使用 AWS Cloud9 IDE来处理 Docker 容器内的代码和文件,并在该容器上运行命令。有关 Docker 的信息,请参阅 Docker 网站上的 Docker 是什么

按照本教程并创建此示例可能会导致您的 AWS 账户被扣款。其中包括亚马逊等服务可能产生的费用EC2。有关更多信息,请参阅 Amazon EC2 定价

先决条件

  • 你应该有一个运行亚马逊 Linux 或 Ubuntu 服务器的亚马逊EC2实例。此示例假设您的 AWS 账户中已经有一个运行亚马逊 Linux 或 Ubuntu 服务器的亚马逊EC2实例。要启动亚马逊EC2实例,请参阅启动 Linux 虚拟机。在向导的 “选择亚马逊系统映像” (AMI) 页面中,选择显示AMI名称以 Amazon Linux AMIUbuntu Server 开头的。

  • 如果 Amazon EC2 实例在亚马逊内部运行VPC,则还有其他要求。请参阅 VPC AWS Cloud9 开发环境的设置

  • Amazon EC2 实例应至少有 8 到 16 GB 的可用磁盘空间。此示例使用 3 GB 以上的 Docker 映像,并且可使用 3 GB 或更多磁盘空间的额外增量来构建映像。如果您尝试在可用空间为 8 GB 或更少的磁盘上运行此示例,我们发现,Docker 映像可能不会构建或 Docker 容器可能不会运行。要检查实例的可用磁盘空间,可以在实例上运行诸如 df -h 这样的命令(针对“用户可读格式的磁盘文件系统信息”)。要增加现有实例的磁盘大小,请参阅 Amazon EC2 用户指南中的修改卷

步骤 1:安装并运行 Docker

在此步骤中,您将检查亚马逊EC2实例上是否安装了 Docker,如果尚未安装,则安装 Docker。安装 Docker 后,在实例上运行它。

  1. 使用诸如ssh实用程序或 Pu 之类的SSH客户端连接到正在运行的 Amazon EC2 实例TTY。为此,请参阅启动 Linux 虚拟机中的“步骤 3:连接到您的实例”。

  2. 检查是否在实例上安装了 Docker。为此,请在实例上将 docker 命令与 --version 选项一起运行。

    docker --version

    如果已安装 Docker,则将显示 Docker 版本和版本号。在此情况下,请向前跳至此过程中后面的步骤 5。

  3. 安装 Docker。为此,请将 yum 命令或 apt 命令与 install 操作一起运行,并指定要安装的 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。为此,请将 service 命令与 docker 服务和 start 操作一起运行。

    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

    注意

    您可以从 AWS CodeBuild中访问经常更新的 Docker 镜像列表。有关更多信息,请参阅《AWS CodeBuild 用户指南》 CodeBuild中提供的 Docker 镜像

  3. 在实例上,创建一个包含 Docker 容器要使用的 AWS Cloud9 SSH公钥的文件。为此,请在 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. 对于环境类型,选择 Connect 并在远程服务器中运行 (SSH)

    7. 展开查看公SSH钥

    8. 选择 Copy key to clipboard(将密钥复制到剪贴板)。(这介于 “查看公SSH钥” 和 “高级” 设置之间。)

    9. 选择取消

    10. 将剪贴板的内容粘贴到 authorized_keys 文件中,然后保存此文件。例如,可以使用 vi 实用工具,如此步骤前面所述。

  5. 通过将 docker 命令与 build 操作一起运行,将标签 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. 记下亚马逊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 实例内部使用指定的端口。在此示例中,可以通过 Amazon EC2 实例9090上的端口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 控制台并创建环境。

  • 确定要连接到环境的现有云计算EC2实例(例如,您的中的 Amazon 实例 AWS 账户)或您 AWS Cloud9 自己的服务器。

  • 确保现有实例或您自己的服务器满足所有 SSH主机要求。这包括安装特定版本的 Python、Node.js 和其他组件;对于您希望的登录后 AWS Cloud9 开始目录设置特定权限;以及设置任何关联的 Amazon Virtual Private Cloud。

创建SSH环境

  1. 确保您已完成上述先决条件。

  2. 如果您尚未连接到现有实例或自己的服务器,请使用SSH客户端(如果尚未连接到该实例)。这样可以确保您可以向实例或服务器添加必要的公SSH钥值。这些内容将在此过程的稍后介绍。

    注意

    要连接到现有的 AWS Cloud 计算实例,请参阅以下一项或多项资源:

    要连接到您自己的服务器,请使用SSH。SSH已安装在 macOS 和 Linux 操作系统上。要SSH在 Windows 上使用连接到服务器,必须安装 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(创建环境)。

    欢迎页面:

    如果显示欢迎页面,则选择“Create environment(创建环境)”按钮

    或在 Your environment(您的环境)页面内:

    如果未显示欢迎页面,则选择“Create environment(创建环境)”按钮
  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实例进行交互。您可以在界面下方的 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 Cloud 计算实例,该登录名可能为 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 控制台顶部会出现一个红色的闪光条。由于您的网络浏览器、 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夹。例如,如果目录为 ~,请将 rm 命令与 -r 选项一起运行,如下所示。

sudo rm -r ~/.c9

步骤 6.3:删除实例中的 Docker 支持文件

如果您不想再在亚马逊EC2实例上保留 Docker 容器、Docker 镜像和 Docker,但又想保留该实例,则可以按如下方式删除这些 Docker 支持文件。

  1. 从实例中删除 Docker 容器。为此,请在实例上将 docker 命令与 stop rm 停止操作以及容器的用户可读名称一起运行。

    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。为此,请在实例上将 yum 命令与 remove 操作一起运行,以指定要卸载的 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:终止实例

要终止亚马逊EC2实例,请参阅亚马逊EC2用户指南中的终止您的实例