[英]Run multiple task-definition using docker-compose.yml and ecs-params.yml file in AWS ECS with different lauch type and volume mounting
我有4个要在ECS上运行的docker映像。 对于我的本地系统,我使用docker-compose文件,其中有多个服务。
我想在ECS上执行类似的docker compose。
我希望我的数据库映像在EC2上运行,并在fargate上放置并在EC2上托管数据库量,并确保每个容器都可以使用其名称相互通信。 如何配置docker-compose.yml和ecs-param.yml文件?
我的样本docker-compose.yml文件
version: '2.1'
services:
first:
image: first:latest
ports:
- "2222:2222"
depends_on:
database:
condition: service_healthy
second:
image: second:latest
ports:
- "8090:8090"
depends_on:
database:
condition: service_healthy
third:
image: third:latest
ports:
- "3333:3333"
database:
image: database
environment:
MYSQL_ROOT_PASSWORD: abcde
MYSQL_PASSWORD: abcde
MYSQL_USER: user
ports:
- "3306:3306"
volumes:
- ./datadir/mysql:/var/lib/mysql
healthcheck:
test: ["CMD", "mysqladmin" ,"ping", "-h", "localhost"]
timeout: 5s
retries: 5
depends_on
只是告诉Docker Compose启动容器时要使用的顺序。 假设Docker Compose文件可以使您共享的容器可以使用Compose文件中的别名相互访问。
例如, third
容器可以使用database
域名访问database
容器。
因此,如果您在容器中硬编码了此类名称,它将可以正常工作。 但是,通常人们在Docker Compose文件中将连接点(URL)配置为环境变量。 在这种情况下,没有任何硬编码。
在EC2上托管数据库卷可能不是一个好主意。
EC2有两种类型的存储映射-EBS和实例(基于S3)。 EC2实例终止时,实例存储将被破坏。 EBS始终在EBS上保留数据。
因此,您可以使用不适合您的EBS存储(而不是EC2)或S3。
在容器中托管数据库是一个非常糟糕的主意。
您可以在Docker Hub中的许多数据库映像的描述中找到相同的信息。
相反,您可以使用AWS RDS将MySql用作服务 。
您现在遇到的问题现在与AWS和ECS无关。
当Docker Compose在本地运行良好时,您将在ECS端获得相同的结果。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.