簡體   English   中英

在AWS ECS中使用docker-compose.yml和ecs-params.yml文件以不同的Lauch類型和卷安裝來運行多個任務定義

[英]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
  1. 我看不到您如何相互連接容器。
    depends_on只是告訴Docker Compose啟動容器時要使用的順序。
    您可能在容器內部硬編碼了實際的連接,這不好。
  2. 假設Docker Compose文件可以使您共享的容器可以使用Compose文件中的別名相互訪問。
    例如, third容器可以使用database域名訪問database容器。
    因此,如果您在容器中硬編碼了此類名稱,它將可以正常工作。 但是,通常人們在Docker Compose文件中將連接點(URL)配置為環境變量。 在這種情況下,沒有任何硬編碼。

  3. 在EC2上托管數據庫卷可能不是一個好主意。
    EC2有兩種類型的存儲映射-EBS和實例(基於S3)。 EC2實例終止時,實例存儲將被破壞。 EBS始終在EBS上保留數據。
    因此,您可以使用不適合您的EBS存儲(而不是EC2)或S3。

  4. 在容器中托管數據庫是一個非常糟糕的主意。
    您可以在Docker Hub中的許多數據庫映像的描述中找到相同的信息。
    相反,您可以使用AWS RDSMySql用作服務

  5. 您現在遇到的問題現在與AWS和ECS無關。
    當Docker Compose在本地運行良好時,您將在ECS端獲得相同的結果。

您可以在此處通過Compose文件查看配置示例。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM