繁体   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