docker-compose запускается на ECS
Я пытался настроить Redash для работы на ECS. Я довольно новичок в ECS и Docker в целом, поэтому я не уверен, что мне не хватает чего-то фундаментального в том, что я сделал до сих пор.
Пока что я преобразовал docker-compose файл Redash в определение контейнера 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 ответ
Вы не
Вы смотрите на эти несколько неправильных путей здесь:
1) Docker Compose - это инструмент разработки, а не производства. Вы можете использовать файл compose в Production, но он будет использоваться через Docker Swarm, и некоторые функции предназначены только для docker-compose, а другие - только для Docker Swarm.
2) С учетом вышесказанного - ECS - это оркестратор, и это то, чем является Docker Swarm (а это именно то, что вам нужно) - так что запуск Docker Swarm в то время как на ECS совершенно спорен.
Здесь вы хотите создать определение задачи ECS; по сути это ECS-версия составного файла. Вы устанавливаете образ, привязки портов, тома, ссылки на контейнеры и т. Д.
Таким образом, вы можете выбрать, хотите ли вы работать в ECS или настроить Docker Swarm.
Удачи!