Docker на Mac может потреблять много ресурсов, но не обязательно

Если вы переместили среду разработки на Docker и работаете на Mac, вы могли заметить, что стеки ваших веб-приложений работают медленнее, чем другая собственная среда, к которой вы привыкли. Дело в том, что Docker для Mac имеет ужасно низкую производительность ввода-вывода по сравнению с машинами Linux.

Разработка с помощью docker под OSX / Windows - огромная боль, поскольку совместное использование кода в контейнерах замедляет выполнение кода. Чтобы решить проблему с производительностью, мы можем использовать docker-sync . Чтобы показать, как настроить docker-sync с нашим приложением, возьмем пример приложения Rails.

В моем приложении rails у меня есть docker-compose.yml следующей конфигурации:

Во-первых, вам нужно установить docker-sync gem:

sudo gem install docker-sync

Затем вам нужно создать docker-sync.yml. Он будет иметь следующую конфигурацию с точкой входа src, которая будет использоваться в качестве внешнего тома в docker-compose.yml:

После создания docker-sync.yml вам необходимо обновить файл docker-compose.yml:

Итак, весь docker-compose.yml файл будет выглядеть так:

Чтобы запустить контейнер, вы можете использовать docker-sync-stack start - эта команда запустит ваш процесс синхронизации, а также сервер.

Если вы хотите сначала запустить процесс синхронизации, а затем запускать контейнеры по отдельности, вы можете сделать это с помощью следующих команд:

docker-sync clean
docker-sync start
docker-compose up

После настройки docker-sync вы можете столкнуться с проблемой, что ваш основной контейнер приложения пытается запустить и запустить до того, как контейнер базы данных раскрутится. Если это произойдет, ваш основной контейнер приложения не запустится. Чтобы предотвратить это, мы можем внести следующие изменения в ваш docker-compose.yml file.

command: bash -c "while !</dev/tcp/db/5432; do sleep 1; done; rm -f tmp/pids/server.pid && bundle exec rails s -p 3000 -b '0.0.0.0'"

Эта конфигурация не является обязательной - все зависит от того, как вы настроили зависимые контейнеры в вашем docker-compose.yml файле. При использовании этой конфигурации основной контейнер приложения не запустится, пока не будет запущен контейнер базы данных.

Эта установка работает для нас очень хорошо и позволяет нам запускать Docker на Mac, как шарм!