Как происходит работа с правами доступа (chmod) в Docker-томах на MacOS? Как это влияет на производительность?

Я несколько лет работаю с Linux и сейчас планирую перейти на Mac. Я осведомлён о нюансах, связанных с образами для ARM и эмуляторами x86, так что, скорее всего, всё будет функционировать корректно. Тем не менее, меня интересуют некоторые аспекты, особенно в сравнении с Windows, поскольку с Linux всё более или менее очевидно. Могли бы вы помочь прояснить, имеются ли аналогичные проблемы на Mac? 

1) На Windows в WSL2 я сталкивался с серьёзными проблемами производительности из-за взаимодействия между файловой системой хоста и WSL. Когда проект находился в файловой системе WSL, приложения работали быстро, но IDE (например, JetBrains) тормозила из-за синхронизации файлов. Если же проект лежал на хосте и монтировался в WSL, то IDE работала хорошо, а приложение значительно замедлялось. <b>Существуют ли подобные проблемы на Mac? Я не имею в виду конкретную IDE или настройку, а говорю о контейнеризации на macOS.</b>

2) По поводу Volume. В Windows все файлы и каталоги в Docker Volume имеют права 777 внутри контейнера, что работает, но не является оптимальным вариантом. Я предпочитаю настраивать безопасную конфигурацию, указывая конкретные uid/gid и пользователя для запуска контейнеров. Для меня важно, чтобы во время деплоя на продакшн не возникли неожиданные проблемы с правами доступа, и чтобы я мог выполнять резервное копирование volumes на хосте без использования root. Я хочу, чтобы моя разработка соответствовала продакшн окружению в этом плане. Неважно, какие chmod будут на Mac; главное, чтобы я мог, например, удалять файлы из volume без необходимости использовать sudo, и чтобы в volume сохранялись chmod и владельцы файлов и каталогов, которые установил сам контейнер. 

3) У меня также есть вопрос о volumes. ChatGPT упоминает, что если данные, например, Mongo или Elasticsearch, хранятся на Mac внутри volumes, то...
  • 7 декабря 2024 г. 23:43
Ответы на вопрос 2
Работа с Docker на macOS имеет свои особенности, и я постараюсь ответить на ваши вопросы, особенно в сравнении с Linux и Windows.

### 1) Проблемы производительности из-за файловой системы

На macOS Docker использует технологию виртуализации (Docker Desktop работает на основе гипервизора), что позволяет запускать Linux-контейнеры. Однако это также означает, что при доступе к файлам на хосте (macOS) через контейнеры могут возникнуть проблемы с производительностью.

Файловая система macOS работает по-другому, чем Linux, и взаимодействие между контейнером и хостом может быть медленнее, особенно если данные монтируются из хостовой файловой системы. Docker Desktop предоставляет возможность монтирования локальных каталогов в контейнеры, но обычно это не так быстро, как работа с файлами внутри самого контейнера.

В отличие от Windows WSL2, на macOS производительность только слегка хуже, когда вы работаете с файлами на хосте. Однако в общем и целом, при работе с файлами, находящимися в контейнере (особенно если файлы кэшируются), производительность будет заметно выше.

### 2) Права доступа в Volume

В Docker на macOS (как и на Windows) все данные в Docker volumes обрабатываются на уровне хостовой файловой системы, что означает, что все файлы имеют права 777 внутри контейнера по умолчанию. Это позволяет избежать проблем с доступом, но, как вы уже заметили, это не всегда является оптимальным подходом с точки зрения безопасности.

Чтобы решить проблему с правами доступа и упростить управление пользователями, вы можете:

- Создать собственные изображения с настроенными правами доступа и пользователями.
- Настроить контейнеры так, чтобы они запускались от определенного `uid` и `gid`, что позволит сохранить права доступа на файлы.
- При создании volume вы можете задавать определенные настройки, но учтите, что они будут игнорироваться, если он монтируется в контейнер из файловой системы хоста.

Таким образом, проектирование окружения должно корректно отражать ваши требования к правам доступа и запуску.

### 3) Хранение данных в volumes

Когда вы хранили данные, такие как данные MongoDB или Elasticsearch, в Docker volumes на macOS, важно помнить, что на macOS есть свои особенности хранения данных. Файлы, сохраняемые в volumes, лучше всего хранить в volumes типе "named" или "anonymous", что позволяет Docker управлять их жизненным циклом.

Однако, как и в Windows, вы не сможете сохранять права и владельца файлов в volumes до тех пор, пока сама файловая система (в данном случае APFS на macOS) не будет поддерживать эти атрибуты. Это может повлиять на вашу конфигурацию, если вам нужно, чтобы доступ к файлам был организован так же, как на вашем продакшн окружении.

В заключение, несмотря на то, что есть свои особенности и потенциальные проблемы, работа с Docker на macOS может быть эффективной при правильной настройке. Убедитесь, что вы тщательно планируете архитектуру вашего контейнерного приложения, учитывая все аспекты, которые вы упомянули.
1) ну так и вы не не новичок. Докера под макос нет, поднимается виртуалка с линуксом, отсюда все следствия с производительностью. 

2) проду макос соответствовать не будет, однако файловые права POSIX поддерживает

Также есть OrbStack https://habr.com/ru/articles/853720/
Похожие вопросы