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 AMI 或 Ubuntu 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 后,在实例上运行它。
-
使用诸如
ssh
实用程序或 Pu 之类的SSH客户端连接到正在运行的 Amazon EC2 实例TTY。为此,请参阅启动 Linux 虚拟机中的“步骤 3:连接到您的实例”。 -
检查是否在实例上安装了 Docker。为此,请在实例上将
docker
命令与--version
选项一起运行。docker --version
如果已安装 Docker,则将显示 Docker 版本和版本号。在此情况下,请向前跳至此过程中后面的步骤 5。
-
安装 Docker。为此,请将
yum
命令或apt
命令与install
操作一起运行,并指定要安装的docker
或docker.io
程序包。对于 Amazon Linux:
sudo yum install -y docker
对于 Ubuntu Server:
sudo apt install -y docker.io
-
确认已安装 Docker。为此,请再次运行
docker --version
命令。将显示 Docker 版本和版本号。 -
运行 Docker。为此,请将
service
命令与docker
服务和start
操作一起运行。sudo service docker start
-
确认 Docker 正在运行。为此,请将
docker
命令与info
操作一起运行。sudo docker info
如果 Docker 正在运行,则将显示有关 Docker 的信息。
步骤 2:构建镜像
在此步骤中,您使用 Dockerfile 在实例上构建一个 Docker 映像。此示例使用包括 Node.js 和示例聊天服务器应用程序的映像。
-
在实例上,创建 Dockerfile。为此,在SSH客户端仍连接到实例的情况下,在实例上的
/tmp
目录中创建一个名为的文件Dockerfile
。例如,运行touch
命令,如下所示。sudo touch /tmp/Dockerfile
-
将以下内容添加到
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
实用工具,如下所示。-
使用 AWS Cloud9 打开和编辑
/tmp/Dockerfile
文件。sudo vi /tmp/Dockerfile
-
将上述内容粘贴到
Dockerfile
文件。如果您不确定如何执行此操作,请参阅SSH客户的文档。 -
切换到命令模式。要执行此操作,请按
Esc
键。(-- INSERT --
将从窗口底部消失。) -
键入
:wq
(以写入/tmp/Dockerfile
文件,保存此文件,然后退出vi
),然后按Enter
。
注意
您可以从 AWS CodeBuild中访问经常更新的 Docker 镜像列表。有关更多信息,请参阅《AWS CodeBuild 用户指南》 CodeBuild中提供的 Docker 镜像。
-
-
在实例上,创建一个包含 Docker 容器要使用的 AWS Cloud9 SSH公钥的文件。为此,请在
Dockerfile
文件所在的目录中,创建一个名为authorized_keys
的文件,例如,通过运行touch
命令。sudo touch /tmp/authorized_keys
-
将 AWS Cloud9 SSH公钥添加到
authorized_keys
文件中。要获取 AWS Cloud9 SSH公钥,请执行以下操作:-
打开 AWS Cloud9 控制台,网址为https://console.aws.amazon.com/cloud9/
。 -
在 AWS 导航栏的 AWS 区域选择器中,选择您要在本主题后面创建 AWS Cloud9 开发环境的 AWS 区域。
-
如果显示欢迎页面,请在 “新建 AWS Cloud9 环境” 中选择 “创建环境”。如未显示,则选择 Create environment(创建环境)。
-
在 Name environment(命名环境)页面上,为 Name(名称)键入环境的名称。(在这里键入的名称不重要。稍后您将选择其他名称。)
-
选择下一步。
-
对于环境类型,选择 Connect 并在远程服务器中运行 (SSH)。
-
展开查看公SSH钥。
-
选择 Copy key to clipboard(将密钥复制到剪贴板)。(这介于 “查看公SSH钥” 和 “高级” 设置之间。)
-
选择取消。
-
将剪贴板的内容粘贴到
authorized_keys
文件中,然后保存此文件。例如,可以使用vi
实用工具,如此步骤前面所述。
-
-
通过将
docker
命令与build
操作一起运行,将标签cloud9-image:latest
添加到镜像并指定要使用的Dockerfile
文件的路径来构建镜像。sudo docker build -t cloud9-image:latest /tmp
如果成功,生成输出的最后两行将显示
Successfully built
和Successfully tagged
。要确认 Docker 已成功构建映像,请将
docker
命令与image ls
操作一起运行。sudo docker image ls
如果成功,输出将显示一个条目(其中,
REPOSITORY
字段设置为cloud9-image
,TAG
字段设置为latest
)。 -
记下亚马逊EC2实例的公有 IP 地址。您将在步骤 4:创建环境中需要它。如果您不确定实例的公有 IP 地址,则可在实例上运行以下命令来获取此地址。
curl http://169.254.169.254/latest/meta-data/public-ipv4
步骤 3:运行容器
在此步骤中,在实例上运行 Docker 容器。此容器基于在上一步中构建的映像。
-
要运行 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:latest
,NAMES
字段设置为cloud9
)。 -
-
登录运行的容器。为此,请将
docker
命令与exec
操作和以下选项一起运行。sudo docker exec -it cloud9 bash
-
-it
使用分配的伪容器运行容器TTY并保持STDIN打开状态,即使未连接容器也是如此。 -
cloud9
是运行的容器的用户可读名称。 -
bash
在运行的容器中启动标准 Shell。
如果成功,则终端提示符将更改为显示登录用户的容器名称和容器 ID。
注意
如果您需要从运行的容器注销,请运行
exit
命令。终端提示符变回来显示该实例的登录用户名和该实例DNS的私有用户名。容器应仍在运行中。 -
-
对于正在运行的容器上 AWS Cloud9 要在登录后启动的目录,请将其访问权限设置为
rwxr-xr-x
。这意味着所有者的 read-write-execute权限、群组的读取执行权限以及其他人的读取执行权限。例如,如果目录的路径为~
,则可以通过在运行的容器中运行chmod
命令来设置对应目录的这些权限,如下所示。sudo chmod u=rwx,g=rx,o=rx ~
-
记下运行的容器上包含 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环境
-
确保您已完成上述先决条件。
-
如果您尚未连接到现有实例或自己的服务器,请使用SSH客户端(如果尚未连接到该实例)。这样可以确保您可以向实例或服务器添加必要的公SSH钥值。这些内容将在此过程的稍后介绍。
注意
要连接到现有的 AWS Cloud 计算实例,请参阅以下一项或多项资源:
-
对于亚马逊EC2,请参阅《亚马逊EC2用户指南》中的 “连接到您的 Linux 实例”。
-
有关 Amazon Lightsail,请参阅 Amazon Lightsail 文档
中的连接到基于 Linux/Unix 的 Lightsail 实例。 -
有关信息 AWS Elastic Beanstalk,请参阅《AWS Elastic Beanstalk 开发人员指南》中的列出和连接到服务器实例。
-
有关信息 AWS OpsWorks,请参阅《AWS OpsWorks 用户指南》中的 “使用SSH登录 Linux 实例”。
-
有关其他 AWS 服务,请参阅该特定服务的文档。
要连接到您自己的服务器,请使用SSH。SSH已安装在 macOS 和 Linux 操作系统上。要SSH在 Windows 上使用连接到服务器,必须安装 Pu TTY
。 -
-
登录 AWS Cloud9 控制台,网址为https://console.aws.amazon.com/cloud9/
。 -
登录 AWS Cloud9 控制台后,在顶部导航栏中选择一个 AWS 区域 来创建环境。有关可用列表 AWS 区域,请参阅AWS Cloud9中的AWS 一般参考。
-
如果您是第一次创建开发环境,则将显示欢迎页面。在 “新建 AWS Cloud9 环境” 面板中,选择 “创建环境”。
如果您之前创建过开发环境,您也可以展开屏幕左侧的窗格。选择 Your environments(您的环境),然后选择 Create environment(创建环境)。
在欢迎页面:
或在 Your environment(您的环境)页面内:
-
在 Create environment(创建环境)页面上,输入环境的名称。
-
在 Description(描述)中输入对环境的描述。在本教程中,请使用
This environment is for the AWS Cloud9 tutorial.
-
对于 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钥” 将其显示。 -
-
在 Existing compute(现有计算)面板上,对于 User(用户),请输入您在此过程中之前连接到实例或服务器时使用的登录名。例如,对于 AWS Cloud 计算实例,该登录名可能为
ec2-user
、ubuntu
或root
。注意
我们建议将登录名与实例或服务器上的管理权限或管理员用户关联。更具体地说,我们建议此登录名应在实例或服务器上拥有 Node.js 安装。要进行此检查,请在实例或服务器的终端上运行命令
ls -l $(which node)
(如果您使用的是nvm
,请运行ls -l $(nvm which node)
)。此命令会显示 Node.js 安装的拥有者名称。它还会显示安装的权限、组名称和位置。 -
对于 Host(主机),请输入公有 IP 地址(首选)或者实例或服务器的主机名。
-
在 “端口” 中,输入您 AWS Cloud9 要用来尝试连接到实例或服务器的端口。您也可保留默认端口。
-
选择 “其他详细信息-可选” 以显示环境路径、node.js 二进制文件路径和SSH跳转主机信息。
-
在环境路径中,输入您要 AWS Cloud9 从中启动的实例或服务器上的目录路径。您之前在此步骤的先决条件中确定了这一点。如果将此项留空, AWS Cloud9 将使用实例或服务器在登录之后通常开始使用的目录。这通常为主目录或默认目录。
-
对于 Path to Node.js binary path(Node.js 二进制文件路径),请输入路径信息以指定实例或服务器上指向 Node.js 二进制文件的路径。要获取路径,您可以在实例或服务器上运行命令
which node
(在使用nvm
时为nvm which node
)。例如,路径可能为/usr/bin/node
。如果将此项留空, AWS Cloud9 在尝试连接时,将尝试猜测 Node.js 二进制文件所在的位置。 -
对于SSH跳转主机,请输入有关实例或服务器使用的跳转主机的信息。使用格式
USER_NAME@HOSTNAME:PORT_NUMBER
(例如ec2-user@:ip-192-0-2-0:22
)。跳转主机必须满足以下要求:
-
它必须能够通过公共互联网访问SSH。
-
它必须允许任意 IP 地址通过指定端口的入站访问。
-
复制到现有实例或服务器上的
~/.ssh/authorized_keys
文件中的公SSH钥值也必须复制到跳转主机上的~/.ssh/authorized_keys
文件中。 -
必须安装有 Netcat。
-
-
通过为每个标签提供键和值,添加最多 50 个标签。要执行此操作,请选择 Add new tag(添加新标签)。这些标签作为资源标签附加到 AWS Cloud9 环境,并传播到以下底层资源: AWS CloudFormation 堆栈、Amazon EC2 实例和 Amazon EC2 安全组。要了解有关标签的更多信息,请参阅IAM用户指南中的使用 AWS 资源标签控制访问权限以及本指南中有关标签的高级信息。
警告
如果您在创建标签后更新这些标签,则更改不会传播到底层资源。有关更多信息,请参阅标签高级信息中的 将标签更新传播到底层资源。
-
选择 Create(创建)以创建您的环境,然后系统会将您重定向到主页。成功创建帐户后, AWS Cloud9 控制台顶部会出现一个绿色的闪光条。您可以选择新环境,然后选择 “在 Cloud9 中打开” 来启动。IDE
如果未能创建账户,则 AWS Cloud9 控制台顶部会出现一个红色的闪光条。由于您的网络浏览器、 AWS 访问权限、实例或关联网络存在问题,您的账户可能无法创建。您可以在 AWS Cloud9 故障排除部分找到有关可能修复导致账户失败问题的信息。
注意
如果您的环境使用代理访问互联网,则必须向其提供代理详细信息, AWS Cloud9 这样它才能安装依赖关系。有关更多信息,请参阅 无法安装依赖项。
步骤 5:运行代码
在此步骤中,您将使用在 AWS Cloud9 IDE正在运行的 Docker 容器中运行示例应用程序。
-
AWS Cloud9 IDE显示正在运行的容器后,启动示例聊天服务器。为此,请在 Environment (环境) 窗口中,右键单击示例
workspace/server.js
文件,然后选择 Run (运行)。 -
预览示例应用程序。为此,请在 Environment (环境) 窗口中,打开
workspace/client/index.html
文件。然后,在菜单栏上,依次选择 Tools (工具)、Preview (预览)、Preview Running Application (预览运行的应用程序)。 -
在应用程序预览标签页上,对于 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 支持文件。
-
从实例中删除 Docker 容器。为此,请在实例上将
docker
命令与stop
和rm
停止操作以及容器的用户可读名称一起运行。sudo docker stop cloud9 sudo docker rm cloud9
-
从实例中删除 Docker 映像。为此,请在实例上将
docker
命令与image rm
操作和映像的标签一起运行。sudo docker image rm cloud9-image:latest
-
删除可能仍存在的任何其他 Docker 支持文件。为此,请在实例上将
docker
命令与system prune
操作一起运行。sudo docker system prune -a
-
卸载 Docker。为此,请在实例上将
yum
命令与remove
操作一起运行,以指定要卸载的docker
程序包。对于 Amazon Linux:
sudo yum -y remove docker
对于 Ubuntu Server:
sudo apt -y remove docker
还可以删除之前创建的
Dockerfile
和authorized_keys
文件。例如,在实例上运行rm
命令。sudo rm /tmp/Dockerfile sudo rm /tmp/authorized_keys
步骤 6.4:终止实例
要终止亚马逊EC2实例,请参阅亚马逊EC2用户指南中的终止您的实例。