Mac os docker тормозит

Обновлено: 07.07.2024

Я не загружал и не запускал приложение «Докер для Mac».

Однако, когда я пытаюсь бежать

Я уже проверил файл носка

Можно ли заставить Docker-сервис работать с помощью инструментов командной строки?

Запустите приложение Docker из панели запуска, появится диалоговое окно с запросом о том, что для запуска приложения необходимо предоставить некоторые привилегированные права для этого приложения, после чего Docker вернется в игру. В моем случае был другой пользователь, вошедший в систему, поэтому он не работал. Выйдите из системы другого пользователя и

На поддерживаемом Mac запустите:

docker Теперь вы сможете запускать команды:

Поскольку docker является пакетом системного уровня, вы не можете установить его с помощью brew install , а вместо этого должны использовать бочку.

Примечание. Это решение работает только для компьютеров Mac, процессоры которых поддерживают виртуализацию, которые могут не включать старые компьютеры Mac.

Это должен быть принятый ответ. Перейдите на панель запуска после установки и Я запустил Docker для установки brew, и приложение не было установлено до тех пор, пока не запустил команду Docker для установки brew cask. Спасибо! Что произойдет, если команда по-прежнему не работает даже после установки бочки (а кит Docker показывает, что она работает после ввода пароля)? Это решение работает только для компьютеров Mac, процессоры которых поддерживают виртуализацию. Например, он не работает на Mac Pro 2009 года. Не могли бы вы отредактировать свой ответ, чтобы включить этот важный факт? Это помогло мне, как я использовал brew install docker вначале. brew install иметь дело со службами CLI и brew cask install является расширением, которое помогает работать со службами с графическим интерфейсом пользователя.

В macOS docker бинарный файл является только клиентом, и вы не можете использовать его для запуска демона docker, потому что демон Docker использует специфичные для Linux функции ядра, поэтому вы не можете запустить Docker изначально в OS X. Поэтому вам нужно установить его docker-machine , чтобы создать ВМ и прикрепить к нему.

Установить docker-machine на macOS

Если у вас еще нет docker-machine команды, установите ее одним из следующих способов:

    Используя Brew команду: brew install docker-machine docker .

Установите Virtualbox

docker-machine полагается на установленный VirtualBox и потерпит неудачу, если это не так. Если у вас уже есть VirtualBox, вы можете пропустить этот шаг.

Вам нужно будет активно принять загрузку расширения ядра Virtualbox на панели безопасности OS X, а затем перейти к перезагрузке компьютера, чтобы следующие команды не завершились с ошибкой Error: VBoxNetAdpCtl: Error while adding new interface

Настроить docker-machine на macOS

Создайте default машину (если у вас ее нет, см . docker-machine ls :):

Затем настройте среду для клиента Docker:

Затем перепроверьте, перечислив контейнеры:

это должен быть принятый ответ. В нем четко изложены: а) почему он не работает, б) инструкции по его запуску без загрузки пользовательского интерфейса на OSX и в) справочные ссылки для дальнейшего чтения. Я также должен был установить virtualbox, чтобы заставить команды docker-machine работать: brew cask install virtualbox Чтобы начать docker-machine вход в систему, используйте brew services start docker-machine или, если вы не хотите использовать Homebrew, см. Раздел «Запуск локальных компьютеров при запуске» на этой странице (содержит инструкции для Mac). Как здесь поможет установка докера с "brew cask install docker"? Позволит ли он запускать поток демонов Docker для запуска на Mac? Как это решит ошибку «docker: невозможно подключиться к демону Docker в unix: ///var/run/docker.sock»?

У меня была такая же проблема, я решил ее в следующие шаги:

Выйдите из терминала (или iTerm2, и т. Д., И т. Д.) И перезапустите

Я также ответил здесь

У меня Mac OS, и я открываю Launchpad и выбираю docker приложение. из reset вкладки нажмите на restart .

Попробуйте сделать это по умолчанию.

это просто дало мне . docker-machine создать по умолчанию Создание CA: /Users/stens/.docker/machine/certs/ca.pem Создание сертификата клиента: /Users/stens/.docker/machine/certs/cert.pem Запуск проверки перед созданием . Ошибка проверки перед созданием: "VBoxManage не найден. Убедитесь, что VirtualBox установлен, а VBoxManage находится в пути" . что кажется неправильным, поскольку VirtualBox больше не требуется для запуска docker на osx

на OSX убедитесь, что вы запустили приложение Docker перед выдачей

или docker build . и т.д . да это кажется странным и несколько вводящим в заблуждение, что выдача

выдает версию, даже если демон docker не работает . то же самое для других версий cmds . я только что столкнулся с точно такими же симптомами . это поведение в OSX отличается от Linux

У меня такая же проблема. Докер работает, но не может получить к нему доступ через CLI.

Для меня проблема была решена с помощью «Docker Quickstart Terminal.app». Он находится в папке «/ Applications / Docker /». Пока я работаю в этом приложении терминала, Docker работает отлично. Если требуется второе окно, мне нужно еще раз запустить приложение «Быстрый старт».

У меня есть установка Docker для Mac. Поэтому я не уверен, подходит ли мое решение для установки Homebrew.

Приложение «Docker Quickstart Terminal», по-видимому, представляет собой несколько сценариев, запускающих приложение терминала, и сценарий запуска bash, который инициализирует все необходимые переменные среды.

Надеюсь, это поможет кому-то еще!

это исправило мою проблему после обновления с докера на основе виртуальной машины до установщика Mac. Он продолжал искать ВМ. используйте это, если вы видите неправильный IP-адрес в «Не

Docker для Mac устарел. И вам не нужен Homebrew для запуска Docker на Mac. Вместо этого вы, вероятно, захотите установить Docker Desktop или, если он уже установлен, убедиться, что он обновлен и работает, а затем попытаться снова подключиться к сокету.

Используйте docker-sync для настройки производительности Docker для Mac

Docker for Mac Выпуск действительно обеспечивает отличный путь для разработки под MacOS, но в конце концов, это не нативная реализация контейнеров низкого уровня, на которой работает Docker для MacHypervisor На одномHyperKit В конце концов, реализация - это реализация виртуализации с контейнерами, а не реализация на уровне ядра, поэтому эта функция определенно ограничена, например, доступ к сети не может быть реализован с помощью подсети контейнера.Полный доступ к стеку С функциональными проблемами можно мириться, но проблемы с производительностью фатальны. Например, при компиляции более крупного проекта скорость компиляции недопустимо ниже, чем в контейнере Linux.

1. Тест производительности Docker для Mac

После анализа он изначально был вызван производительностью диска, поэтому был проведен ряд тестов: использование контейнеров для записи данных на диск под Linux и MacOS, а также использование non-mount и mount для каждой платформы. ) Способ проверить.
Команда тестирования для режима без монтирования:

Тестовые команды для метода монтажа:

Результаты тестирования Linux:

Результаты теста MacOS:

2. Настройка производительности Docker для Mac

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

Давайте попрактикуемся в установке docker-sync и проведем тест производительности, чтобы увидеть, насколько улучшилась производительность.

Установка относительно проста, вы можете обратиться к Docker-SyncWiki:

После успешной установки создайте файл конфигурации docker-sync docker-sync.yml, содержимое которого может ссылаться наWiki

Затем запустите службу Docker-Sync

После успешного запуска службы используйте следующую команду для завершения теста производительности:


Видно, что разница между скоростью и режимом без монтирования не слишком велика, но время синхронизации не было проверено. В конце концов, это все еще синхронизация двух файловых систем. Если вы рассматриваете безопасность данных, использование Docker под Linux является правильным Способ открытия.

Я часто слышу шутки от всех, у кого есть среда разработки Docker на Mac: это заставляет Mac звучать как реактивный самолет при взлете? Это Docker!

Однако их коллеги-разработчики на Linux не сразу могут понять, а в чем тут шутка так как ни разу не сталкивались с этой проблемой.

Вообще говоря, оба они похожи в том, что вы запускаете «компьютеры внутри вашего компьютера». Разница в том, как это происходит.

Container vs Host

Контейнер: работа с диском

Как вы можете видеть выше, контейнеры используют вашу ОС и ее ядро и, следовательно, они «ближе к железу». Например, чтобы Контейнер мог читать/писать с жесткого диска ОС хоста, он должен:

  • Смонтировать диск в контейнере (т.е. он имеет прямой доступ к диску в ОС хоста благодаря ядру)
  • И далее работать так, как если бы он был непосредственно в ОС хоста

VM: работа с диском

Виртуальные машины запускают дополнительную операционную систему поверх вашей операционной системы, а также дополнительный уровень абстракции (называемый гипервизором) что бы «гостевая ОС» могла взаимодействовать с главной ОС. Например, чтобы виртуальная машина могла читать/писать с жесткого диска вашей ОС, она должна:

  • Смонтировать диск в гостевой ОС
  • Смонтировать диск в главной ОС на гипервизоре
  • Теперь гипервизор должен синхронизировать все изменения между обоими

Хотя Docker может называться Docker для macOS, архитектурно он отличается от Docker для Linux.

Как вы можете видеть выше, вместо прямого доступа к ОС хоста Docker для macOS должен запускать собственную виртуальную машину Linux (LinuxKit VM).

Docker может получить доступ только к ядру этой виртуальной машины, которое затем может выполнить описанные выше шаги для синхронизации дисков ваших Контейнеров и ОС хоста.

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

Типичная настройка разработки Docker обычно выглядит следующим образом:

Host OS

  • Инструменты разработчика (IDE, текстовые редакторы, линтеры и т. д.)
  • Редактирование исходного кода

Контейнер

  • Код приложения и зависимости
    • Какой-то механизм hot/live перезагрузки при изменении кода

    Вот почему вы видите, что процесс Hyperkit обычно потребляет большую часть вашего процессора даже в режиме ожидания. Вся эта синхронизирующая работа между этими слоями нетривиальна!

    Это та часть, где многие посоветовали бы вам «просто разрабатывать на Linux». Хотя это правда, что Docker в Linux имеет такую архитектуру, как и предполагалось (и, следовательно, это лучший вариант), простое переключение неприемлемо для большинства людей.

    Docker для Mac Edge Build (с Mutagen)

    На данный момент у Docker есть одобреный подход к минимизации потребления ресурсов при изменении диска с помощью чего-то под названием Mutagen. Однако вам не придется беспокоиться о деталях, поскольку они упаковывают его как часть официальной сборки Docker для Mac Edge.

    Инструкции

    1. Установите Docker for Mac Edge Build
    2. В пользовательском интерфейсе Docker перейдите в раздел Resources => File Sharing и укажите, какие папки вы хотите подключить к контейнерам Docker.

    Плюсы

    Минусы

    docker-sync

    Альтернатива, которая существует уже несколько лет, называется docker-sync.

    Инструкции

    Плюсы

    • Работает на всех платформах Docker
    • Значительно снижает CPU при hot/live перезагрузках
    • Изменения файлов выполняются значительно быстрее

    Минусы

    • Требуются изменения конфигурации
    • Потребляется больше ресурсов докера из-за дополнительных параллельных контейнеров
    • Дополнительная оркестровка, необходимая для перемещения ваших контейнеров вверх и вниз
    • Иногда возникают проблемы с синхронизацией; то есть контейнер не обновляется с изменениями ОС хоста, и его необходимо перезапустить

    Docker в основном создавался для Linux. Как оказалось, его полезность была портирована на macOS и Windows.

    Поскольку обе операционные системы сильно отличаются от Linux по своей сути, виртуализация была единственным реальным способом заставить все работать. К сожалению, это приводит к неэффективности низкого уровня, которую мы в противном случае принимаем как должное.

    Поскольку в будущем Mutagen будет входить в состав Docker для Mac, у разработчиков macOS есть надежда, что проблема «реактивного двигателя» начнет уменьшаться.

    Тем не менее, в настоящее время лучший опыт разработчиков для Docker по-прежнему остается родным Linux.

    docker - утилита, общающаяся через сокет с хостом Docker ( docker daemon ). Является клиентом.

    docker-machine - средство для управления машинами с Docker, а так же их создания. Расширярется так называемыми драйверами.

    docker-compose - утилита для определения и выполнения кросс-контейнерных приложений. Позволяет объединить и настроить связку отдельных приложений в контейнерах, например, для веб-сервера: nginx, MySQL, PHP.

    Использование MacOS машины как хоста

    Самый очевидный способ использования Docker на Mac, учитывая, что Docker может создавать контейнеры только на ядре Linux, это использование виртуальной машины. Уже самые первые Mac на платформе Intel позволяли использовать паравиртуализацию и аппаратное ускорение для запуска виртуальных машин, но родного гипервизора не было: различные производители ПО, вроде VMware и Parralells заняли нишу гипервизоров на MacOS. Конечно же, было еще и бесплатное решение от Oracle (Virtual Box), но оно не такое удобное. В любом случае эти гипервизоры были сделаны в виде расширения ядра и порой были не очень стабильны. Начиная с Yosemite Apple добавили Hypervisor.framework, представляющий из себя API для создания HVM (аппаратных виртуальных машин). Сложно назвать это средство полноценным гипервизором, но первое достаточно массовое решение на нем - xhyve и Veertu. xhyve - гипервизор, портированный с FreeBSD и позволяет запускать Linux-машины.

    До появления Hypervisor.framework и проекта xhyve предлагалось запускать Docker в виртуальной машине, используя гипервизор Virtual Box или любой другой (при помощи утилиты docker-machine у которой есть свои "драйверы", позволяющие автоматизировать создание, запуск и работу с виртуальными машинами) из предложенных. Это legacy-решение, но оно до сих пор поддерживается.

    Современное же решение – это запуск виртуальной машины с использованием встроенного в MacOS процесса виртуализации. Docker назвали его HyperKit и его кодовая база практически полностью основана на проекте xhyve.

    Старый способ (Docker Toolbox), как и драйверы для многих гипервизоров, разворачивают в стороннем гипервизоре образ ОС Boot2Docker.

    Современный способ (Docker for Mac)

    Данный способ поддерживает только Yosemite 10.10.3 и старше, но рекомендуется El Capitan и выше. Используется HyperKit, встроенная в MacOS виртуализация.

    Установка проста и описана на странице Docker for Mac. Необходимо скачать DMG-контейнер, перетащить его содержимое и запустить Docker. Будут установлены консольные утилиты (docker, docker-machine, docker-compose), а также графическая оболочка для управления виртуальной машиной, в которой запущен Docker и бета-версия официальной графической утилиты для управления контейнерами Kitematic. Сразу же после этого можно использовать Docker в полную силу.

    Старый способ (Docker Toolbox)

    Установка так же простая и описана на странице Docker Toolbox. Установщик сам установит все необходимое, в том числе и гипервизор Oracle VirtualBox. Управлять можно с приложения Kitematic и терминала. Специально сделан шорткат, который можно найти в Launchpad и который позволит подключиться к виртуальной машине. Его же необходимо будет запустить в первый раз, так как он сам сделает виртуальную машину и настроит ее. Далее можно подключаться просто с терминала, выполнив вначале eval $(docker-machine env dev) , после чего можно общаться с docker посредством команды docker .

    Рекомендуется настроить виртуальную машину Virtual Box так, чтобы она имела статический IP адрес, но была за NAT. В таком случае можно будет запускать контейнер через docker-machine или VBoxManage , либо с графического интерфейса, после чего работать с ней с обычного терминала.

    Другой гипервизор

    Для использования другого гипервизора необходимо установить комплект консольных утилит (docker, docker-mahine, docker-compose[^*]). Сделать это можно, установив Docker любым из способов, описанных выше, либо установив консольные утилиты через Homebrew. Кроме того, если уже установлен Virtual Box и Homebrew, то установив через него утилиты можно сделать виртуальные машины для Docker и управлять самим Docker.

    [^*]: Необязателен для использования, зависит от поставленной задачи.

    Чтобы создать виртуальную машину через docker-machine необходимо изучить документацию к необходимому драйверу. Для тех, что присутствуют по умолчанию, можно посмотреть в официальной документации Docker. Например, для создания виртуальной машины в VMware Fusion необходимо выполнить

    После чего для для управления через docker необходимо выполнить

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

    Использование облачных сервисов и управление через Docker API

    Другая машина (VPS, VDS, любой "соседний" ПК на Linux или ВМ)

    Чтобы управлять Docker на любой другой машине необходимо воспользоваться драйвером Generic. Он позволит добавить через SSH с ключом или паролем любую машину в реестр docker-toolbox для удобства дальнейшего подключения через утилиту docker .

    Почитать по управлению с по мощью драйвера можно в отдельной статье.

    IaaS Azure, AWS, OpenStack и прочие

    Используя необходимый драйвер в docker-machine можно создать виртуальную машину с Docker на практически любом популярном IaaS сервисе.

    Для примера разберем MS Azure в отдельной статье.

    Дополнительные драйверы для docker-machine

    Если хочется использовать Docker с xhyve или же Parallels, Vultr, то можно поставить драйверы их Homebrew.

    Автодополнение Docker для шелла

    Чтобы было наиболее удобно управлять Docker имеет смысл установить автодополнение для шела. К сожалению, в версии для Mac оно не поставляется ни в одном варианте.

    Homebrew

    Если еще не установлен менеджер пакетов brew, то стоит его установить.

    /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

    Лучше использовать шел ZSH. Он легко расширяется модулями и для него больше хороших модулей автодополнения. .

    Установить автодополнение для docker, docker-machine, docker-compose не составит труда.

    brew install docker-completion docker-machine-completion docker-compose-completion

    После установки чтобы автодополнение работало проще всего открыть новую вкладку терминала и проверить работоспособность.

    Для установки автодополнения для шела bash необходимо выполнить после установки с Homebrew.

    Только установка docker (CLI), docker-machine, docker-compose

    Используя Homebrew можно установить указанные выше утилиты для управления docker на любой виртуальной (иди другой) машине без лишних утилит. Можно добавить машину в docker-machine и легко получить к ней доступ через команду eval $(docker-machine env machinename) , после чего управлять ей через docker .

    Читайте также: