Я запускаю Docker-контейнеры Apache, MySQL и memcached из AWS ECR в экземпляр ECS. Инженеры могут просматривать и вносить изменения по своему усмотрению. Срок действия этих контейнеров истекает через установленный период времени, но они хотят сохранить изменения своей базы данных для использования в будущих контейнерах.
Я изучаю, есть ли решение, которое я могу автоматизировать, чтобы этот процесс происходил до завершения контейнеров, с помощью Lambda, aws-cli или какой-либо другой утилиты.
Я ищу решение, которое возьмет контейнер mysql и создаст из него новый образ. Я видел этот вопрос, и в основном это то, что мне нужно: Как создать новый образ докера из работающего контейнера на Amazon?
Но вы должны запустить docker commit
из экземпляра ECS, а также выполнить вход и нажать оттуда. Похоже, что нет способа отправить зафиксированное изображение в ECR без необходимости входа в систему с aws ecr get-login --no-include-email
и запуска вывода для докера, чтобы получить токен.
Проблема, с которой я сталкиваюсь, заключается в том, что если мы дойдем до точки, когда у нас будет запущено несколько экземпляров ECS, будет трудно узнать, из какого контейнера запущен инженер, подключиться по SSH к этому серверу и запустить docker commit
, docker tag
, aws ecr login
и docker push
команд. Мне это кажется хакерским и подверженным ошибкам.
Я перестраиваю контейнеры MySQL и отправляю их в ECR каждый час, чтобы у них были последние обновления содержимого. Для запуска контейнеров я использую комбинацию ecs-cli и aws-cli, чтобы использовать файл docker-compose.yml для создания задачи в ECS.
Есть ли какие-то функции, которые я могу использовать для фиксации работающего контейнера в ECR с новым именем / тегом?
Другой вариант, который я рассматривал, - это запуск контейнера MySQL с постоянным хранилищем (EBS / EFS), но я все еще пытаюсь проверить, выполнимо ли это, поскольку мне пришлось бы как-то пометить постоянное хранилище, чтобы оно использовалось только при запуске инженером это так. По сути, у меня был бы уникальный файл docker-compose.yml, специфичный для постоянных томов, и он либо запускал бы новый контейнер со свежими данными mysql, либо использовал бы существующий, если он существует, с заданным именем.
docker commit
в целом, как правило, не рекомендуется (что именно ваши разработчики сделали с помощьюdocker exec
в этих контейнерах и как мы можем воспроизвести это?). - person David Maze   schedule 03.05.2019