2016-04-28 90 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" 

这将创建一个任务的新实例,然后配置你的服务来运行任务。

相关问题