2017-06-06 114 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