docker-compose запускается на ECS - PullRequest
0 голосов
/ 11 сентября 2018

Я пытался настроить Redash для работы на ECS.Я довольно новичок в ECS и Docker в целом, поэтому я не уверен, что упускаю что-то фундаментальное из того, что я сделал до сих пор.

Пока что я конвертировал Redash'sфайл docker-compose для определения контейнера 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 create_db, чтобы выполнить однократную настройку перед запуском службы ECS?

1 Ответ

0 голосов
/ 11 сентября 2018

Вы не.

Здесь вы видите несколько неправильных путей:

1) Docker Compose - это инструмент разработки, а не производства. Вы можете использовать compose file в Production - но это будет использоваться через Docker Swarm, и некоторые функции предназначены только для docker-compose, а другие только для Docker Swarm.

2) С учетом вышесказанного - ECS - это оркестратор, то есть то, чем является Docker Swarm (что вам и нужно) - так что запуск Docker Swarm в то время как на ECS совершенно спорный.

Здесь вы хотите создать определение задачи ECS; по сути это ECS-версия составного файла. Вы устанавливаете образ, привязки портов, тома, ссылки на контейнеры и т. Д.

Таким образом, у вас есть выбор, чтобы решить, хотите ли вы работать в ECS или хотите настроить Docker Swarm.

Удачи!

...