Две важные вещи, которые вам нужно сделать, это удалить объявление volumes:
, которое получает действительный код приложения из вашей локальной файловой системы, и загрузить ваш встроенный образ Docker в какой-то реестр.Поскольку в противном случае вы используете AWS, ECR - это готовый вариант;public Docker Hub тоже будет работать нормально.
В зависимости от структуры вашего приложения на Rails, возможно, имеет смысл использовать одно и то же изображение с разными командами для основного приложения и работников Sidekiq, а такжепостарайтесь просто заставить его сказать:
sidekiq:
image: production_image
command: bundle exec sidekiq
Поскольку вы в любом случае смотрите на AWS, вам также следует рассмотреть возможность использования размещенных сервисов для хранения данных (RDS для базы данных, Elasticache для Redis).Важно включить расположение этих хранилищ данных в качестве переменных среды, чтобы вы могли изменить их позже (возможно, они будут иметь значение по умолчанию localhost
для использования разработчиком, но всегда будут отличаться при развертывании).
Вы также заметите, что мои примеры не имеют links:
.Docker предоставляет внутреннюю службу DNS для контейнеров, чтобы найти друг друга, а Docker Compose организует поиск контейнеров через их служебный ключ в файле YAML.
Наконец, вы должны иметь возможность проверить эту настройку локально перед развертываниемэто к EC2.Запустите docker build
и docker-compose up
при необходимости;отладки;и если он работает, то docker push
изображений и запустите его на Amazon.
version: '3'
volumes: *volumes_from_the_question
services:
db: *db_from_the_question
redis: *redis_from_the_question
sidekiq:
image: 123456789012.dkr.ecr.us-east-1.amazonaws.com/myapp/sidekiq:1.0
environment:
- PGHOST: db
- REDIS_HOST: redis
app:
image: 123456789012.dkr.ecr.us-east-1.amazonaws.com/myapp/app:1.0
ports:
- "80:80"
environment:
- PGHOST: db
- REDIS_HOST: redis