Py学习  »  docker

docker compose在ecs上运行

user10121455 • 4 年前 • 424 次点击  

我一直在尝试设置Redash在ECS上运行。一般来说,我对ecs和docker比较陌生,所以我不确定我是否遗漏了一些基本的东西。

到目前为止,我已经转变了 Redash's docker-compose file AWS容器定义。

但是,根据Redash文档,我需要运行 docker-compose run --rm server create_db 首先在Postgres容器中设置表。

我如何实现这个 docker-compose run ecs上下文中的行为?

我注意到试图通过添加 setup-postgres 容器对我的容器定义有效,但这是一个黑客和不理想。

[
  {
    "name": "postgres-setup",
    "image": "redash/redash:latest",
    "cpu": 100,
    "memory": 150,
    "links": [
      "postgres",
      "redis"
    ],
    "command": [
        "create_db"
    ],
    "environment": [
      {
        "name": "PYTHONUNBUFFERED",
        "value": "0"
      },
      {
        "name": "REDASH_LOG_LEVEL",
        "value": "INFO"
      },
      {
        "name": "REDASH_REDIS_URL",
        "value": "redis://redis:6379/0"
      },
      {
        "name": "REDASH_DATABASE_URL",
        "value": "postgresql://postgres@postgres/postgres"
      },
      {
        "name": "REDASH_COOKIE_SECRET",
        "value": "veryverysecret"
      },
      {
        "name": "REDASH_WEB_WORKERS",
        "value": "1"
      }
    ],
    "essential": false
  },
  {
    "name": "nginx",
    "image": "redash/nginx:latest",
    "essential": false,
    "cpu": 100,
    "memory": 200,
    "links": [
      "server:redash"
    ],
    "portMappings": [
      {
        "containerPort": 80,
        "hostPort": 80
      }
    ]
  },
  {
    "name": "postgres",
    "image": "postgres:9.5.6-alpine",
    "essential": true,
    "cpu": 100,
    "memory": 300,
    "mountPoints": [
      {
        "sourceVolume": "mytestvol",
        "containerPath": "/var/lib/postgresql/data"
      }
    ]
  },
  {
    "name": "redis",
    "image": "redis:3.0-alpine",
    "essential": true,
    "cpu": 100,
    "memory": 400
  },
  {
    "name": "server",
    "image": "redash/redash:latest",
    "cpu": 100,
    "memory": 400,
    "links": [
      "postgres",
      "redis"
    ],
    "command": [
        "server"
    ],
    "environment": [
      {
        "name": "PYTHONUNBUFFERED",
        "value": "0"
      },
      {
        "name": "REDASH_LOG_LEVEL",
        "value": "INFO"
      },
      {
        "name": "REDASH_REDIS_URL",
        "value": "redis://redis:6379/0"
      },
      {
        "name": "REDASH_DATABASE_URL",
        "value": "postgresql://postgres@postgres/postgres"
      },
      {
        "name": "REDASH_COOKIE_SECRET",
        "value": "veryverysecret"
      },
      {
        "name": "REDASH_WEB_WORKERS",
        "value": "1"
      }
    ],
    "essential": false,
    "portMappings": [
      {
        "containerPort": 5000,
        "hostPort": 5000
      }
    ]
  },
  {
    "name": "worker",
    "image": "redash/redash:latest",
    "cpu": 100,
    "memory": 400,
    "links": [
      "postgres",
      "redis"
    ],
    "command": [
      "scheduler"
    ],
    "environment": [
      {
        "name": "PYTHONUNBUFFERED",
        "value": "0"
      },
      {
        "name": "REDASH_LOG_LEVEL",
        "value": "INFO"
      },
      {
        "name": "REDASH_REDIS_URL",
        "value": "redis://redis:6379/0"
      },
      {
        "name": "REDASH_DATABASE_URL",
        "value": "postgresql://postgres@postgres/postgres"
      },
      {
        "name": "QUEUES",
        "value": "queries,scheduled_queries,celery"
      },
      {
        "name": "WORKERS_COUNT",
        "value": "1"
      }
    ],
    "essential": false
  }
]

我知道在这样的容器中运行postgres是不理想的,稍后可能会将其转移到rds中。如果我决定这样做,数据库初始化步骤会是什么样子?创建一个ecs实例,下载 docker-compose.yml 归档并运行 docker compose run--rm server创建数据库 要在启动ECS服务之前进行一次性设置吗?

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/38063
 
424 次点击  
文章 [ 1 ]  |  最新文章 4 年前
TJ Biddle
Reply   •   1 楼
TJ Biddle    5 年前

你没有。

你看这些是错误的:

1)Docker Compose是一种开发工具,而不是生产工具。您可以使用 撰写文件 在生产中-但这将通过docker swarm使用,一些功能仅用于docker compose,而其他功能仅用于docker swarm。

2)有了这一点,ecs是一个协调器,这就是docker swarm(这是你想要的),所以在ecs上运行docker swarm是完全没有意义的。

您在这里要做的是创建一个ecs任务定义;这本质上是一个compose文件的ecs版本。您可以设置映像、端口绑定、卷、容器链接等。

因此,您可以在这里选择是要在ecs中运行,还是要设置docker swarm。

祝你好运!