我可以使用docker-compose构build一个容器图像吗?

我有一个应用程序,目前有几个容器 – 我想build立Web容器,孤立,发送到AWS ECS。 docker-compose.yml目前包含web端口,命令,env等的信息,而我的web容器的实际dockerfile只有python版本。

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

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

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

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

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

2)build立docker形象

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

4)将docker镜像推送到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" 

这将创build一个任务的新实例,然后configuration您的服务来运行该任务。

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

简而言之,所有的东西都可以在你的Dockerfile中无需使用EXPOSE而创build并推送一个图片(因为你已经在docker-compose.yml中映射了端口),但是如果你和其他人共享这个图片,练习EXPOSE将您的应用程序在Dockerfile中侦听的所有端口。