2016-04-28 88 views
0

我有一個應用程序,目前有幾個容器 - 我想建立Web容器,隔離,發送到AWS ECS。 docker-compose.yml目前包含web端口,命令,env等的信息,而我的web容器的實際dockerfile只有python版本。我可以使用docker-compose構建一個容器圖像嗎?

如果我從app/web目錄中使用docker build .,我不認爲docker-compose文件的端口設置會通過。是否有可能使用docker-compose構建web?或者我需要填寫我的web目錄中的dockerfile?至於我爲什麼要這樣做,我認爲在本地我會用redis,nginx和postgres來開發 - 但ECS有它自己的選擇,所以我贏了我的web容器鏡像到ECS

不需要使用這些容器。

這裏有一些重大的誤解,有人可以清理?

+0

碼頭構成網絡應該字。你已經嘗試過了嗎? – mayid

回答

1

端口設置可以存儲在您的泊塢窗圖像中的唯一方法是使用Dockerfile中的EXPOSE命令。這告訴碼頭,那些端口在運行時會有東西在監聽。如果您向docker run提供-P選項,Docker會使用此信息,此時它會將映像中所有端口爲EXPOSEd的端口綁定到主機上隨機的高編號端口。它還使用此信息使這些端口可供任何鏈接的容器使用,即使它們未發佈到主機。

總之一切都會在您的Dockerfile中使用EXPOSE創建並推送圖像100%正常(因爲您已經在docker-compose.yml中映射了端口),但是如果您與其他人共享生成的圖像, EXPOSE您的應用程序在Dockerfile中偵聽的所有端口都是很好的做法。

1

您可以使用ecs-cli將docker-compose文件推送到ecs。工作流是有點像這樣:

1)運行ecs-cli configure並告訴它使用的集羣

2)構建泊塢窗圖像

3)基於git的承諾或日期版本標記它或兩者

4)推搬運工圖像到ECS庫

5)運行ecs-cli compose service up

這是劇本的那種,我使用

rm ~/.ecs/config 
ecs-cli configure --region eu-central-1 --access-key AYAYAYAYAYAY1212121 --secret-key secretfaskdjfalsdfkja;sdjfalsdf --cluster "<clustername>" 


VERSION="$(git log --pretty=format:'%h' -n 1)-$(date +%Y-%m-%d-%H-%M-%S)" 
docker tag image_name:latest "123123123123.abc.def.eu-central-1.amazonaws.com/image_name:$VERSION" 
docker push "123123123123.abc.def.eu-central-1.amazonaws.com/image_name:$VERSION" 

VERSION="$VERSION" ecs-cli compose --file <path/to/docker-compose.yml> -p <service-name> service up 

泊塢窗,compose.ymp樣本:

version: '2' 
services: 
    stage-backend: 
    image: 123123123123.abc.def.eu-central-1.amazonaws.com/image_name:${VERSION} 
    cpu_shares: 750 
    mem_limit: 1000000000 
    ports: 
     - "0:8080" 
    environment: 
     FOO: "bar" 

這將創建一個任務的新實例,然後配置你的服務來運行任務。

相關問題