2017-06-06 117 views
2

我是一名微服务的初学者,已经花了几个小时处理AWS今天最微小的痛苦事情,希望任何专家的建议,因为我怀疑下一步是非常小的,但是否则可能需要数小时才能完成。在未登录的情况下在AWS EC2实例上部署Docker容器

所以我部署了一个纳米实例,然后ssh到它。必须实际重做它来修复安全组,但无论如何,它最终会奏效。使用scp将我的码头图像按照说明here,在摘要docker save,使本地的图像.tar和docker load在等待15分钟后等待15分钟,以便上传。然后在命令提示符下键入docker run。

在过去3天内已经采取了这些(linux)终端措施,并且已经两次尝试过,并且未能通过AWS控制台执行此操作,因为它已上传但不会运行。

当我输入docker run my_image时,它的运行非常奇妙,我可以在这里看到它与docker imagesdocker ps -a这两个命令!

但是,我的AWS实例上的命令提示符在运行时很忙。如果关闭终端窗口,它肯定会死机。现在我知道它在那里工作了,我该如何'部署'它,即让它运行并继续运行一个月或直到另行通知?我认为它可能需要某种称为“任务定义”的json文件,但不知道下一步该做什么。此任务定义和所有其余任务是否可以在登录到实例的终端中完成?

+1

@nathanpeck的-d标志答案正是你想从你的最后一段描述 – NHol

回答

2

我看到几件事情错了:

  • 您应该使用的,而不是SCPing图像的码头工人注册服务。在AWS上有EC2容器注册表,或者您也可以使用Docker Hub。这将使您更容易将图像放到您的实例上。

  • 我不确定你为什么不能使用控制台启动你的容器。我假设您正在使用AWS ECS?你可以试试troubleshooting guide来帮助你找出你的任务没有运行的原因。

  • 这听起来像你在前台(连接到你的shell)而不是在后台启动docker容器。尝试将the -d flag添加到docker run命令以在后台运行容器,以便关闭SSH会话。请注意,如果容器内的应用程序进程崩溃,容器仍将停止。这是使用AWS ECS等编排器来定义试图始终运行一定数量的任务的服务的原因之一。 ECS还有助于将Docker容器放到实例上并自动在后台为您启动。

+0

谢谢! '-d'标志起作用。可以在终端启动它,并将其放在后台而不是前台。然后我退出,关闭了终端,关闭了AWS控制台,服务仍然运行良好,必须重新登录并使用docker stop来停止它。 “Orchestrator AWS ECS”能否以某种方式从此实例的终端完成?听起来可能不够健壮,否则,如果进程崩溃容器停止。 – cardamom

+1

AWS ECS使用在实例上运行的代理在外部控制您的实例。您不必手动重启任何内容,因为AWS ECS会自动重启您的容器。它还允许您对AWS ECS进行简单的API调用,并且它将更新您的容器。当您拥有多个实例时,真正的威力将来到,因为AWS ECS将为您控制整个实例,并代表您以高级指令的形式启动和停止容器,例如“启动分布在可用区域的五个容器并保留它们运行“ – nathanpeck

+0

谢谢,好消息是它已经完全运行了大约一周,由ECS管理(我学会了如何使用)不再登录到实例来管理它或在此处输入任何命令。您说过对AWS ECS的简单API调用,它将更新您的container_每当我更新(重新推送)我的容器时,我都会去更新任务和集群。也许这不是必要的,怀疑重新推送容器可能会让它继续前进,而无需登录AWS或触摸任务或群集。 – cardamom