我可以使用docker-compose构建创建容器图像吗?

时间:2016-04-28 23:06:42

标签: amazon-web-services docker docker-compose dockerfile

我有一个目前有几个容器的应用程序 - 我想构建一个隔离的Web容器,以发送给AWS ECS。 docker-compose.yml目前包含web的ports,command,env等的信息,而我的web容器的实际dockerfile只有python版本。

如果我在app / web目录中使用docker build .,我认为docker-compose文件中的端口设置不会通过。是否可以使用docker-compose构建网络?或者我需要在我的网络目录中填写dockerfile吗?我想只将我的Web容器图像推送到ECS

至于为什么我这样做,我认为本地我会用redis,nginx和postgres开发 - 但是ECS有自己的选择,所以我不需要使用这些容器。

这里有一些重大的误解,有人可以清理吗?

2 个答案:

答案 0 :(得分:1)

端口设置可以存储在docker镜像中的唯一方法是使用Dockerfile中的EXPOSE命令。这告诉docker这些端口将在运行时监听它们。如果向-P提供docker run选项,Docker将使用此信息,它将图像中EXPOSE d的所有端口绑定到主机上的随机高编号端口。它还使用此信息使这些端口可用于任何链接的容器,即使它们未发布到主机。

简而言之,在Dockerfile中不使用EXPOSE(因为您已经映射了docker-compose.yml中的端口),所有内容都可以100%正常创建和推送图像,但是如果您要共享生成的图像与其他人一起,最好EXPOSE你的应用程序在Dockerfile中侦听的所有端口。

答案 1 :(得分:1)

您可以使用ecs-cli将docker-compose文件推送到ecs。工作流程有点像这样:

1)运行ecs-cli configure并告诉它使用什么集群

2)构建泊坞窗图像

3)使用基于git commit或date或两者的版本标记

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

docker-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"

这会创建一个新的任务实例,然后配置您的服务以运行该任务。