我有一个目前有几个容器的应用程序 - 我想构建一个隔离的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有自己的选择,所以我不需要使用这些容器。
这里有一些重大的误解,有人可以清理吗?
答案 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"
这会创建一个新的任务实例,然后配置您的服务以运行该任务。