[英]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.