Плеваться-то я плевался от решения Parallels перейти на подписочную модель с вынесением нужных мне функций типа поддержки Vagrant в Pro Edition. Однако когда стал пробовать работу Docker Machine на VMWare Fusion, то столкнулся со странностями - создание виртуальной машины под Docker не доходило до конца и фейлилось. С этим разобрался в конце концов, но как-то режим headless работал не так безголово, как хотелось бы. И задумался, что в Parallels он может быть лучше, а кроме того платить за провайдер Vagrant под VMWare уже не хотелось. И всё-таки взял подписку на Parallels Desktop Pro Edition.

Взял, но навалилось работы, а к тому же появился сервер под Linux с 64 GB RAM, и стал работать с Docker там. Вот это удовольствие, скажу я вам, когда много памяти. Особенно когда основная задача — Hadoop. Скажу откровенно — я в первый раз увидел, что Cloudera не жалуется на нехватку памяти. Полный кайф.

Наконец-то разгрёбся с работой и руки снова дошли до Parallels. Что мне было неудобно в схеме с сервером - это синхронизация кода. С проектом работаю на Mac’е, он запускается на сервере. Решений, конечно, хватает:

  • git. Закоммитил изменения с Mac, стянул на сервере. Но это лишние действия, да и когда работаю с CI, то каждая правка дёргает билд в Jenkins. Можно бороться работой в feature branch’е или используя Gate commit’ы, но это идеологически неправильно — нельзя каждую строчку коммитить, это приводит к страшной истории.
  • vim на сервере. Удобно, но всё-таки большие изменения удобнее делать на Mac’е. Sublime Text с линтерами и прочими плагинами. Да, в vim/emacs это тоже делается, но…
  • sshfs. Монтирую каталог с сервера на Mac через Fuse sshfs. Хорошо, но порой вылазят бока с удалением файлов и каталогов (начинается ругань, что нельзя этого сделать), после рестарта Mac’а нужно снова перемонтировать, Time Machine на сервере нет и как-то неосознанно становится страшно за сохранность кода (если у вас не удаляли случайно виртуальный сервер, то это не значит, что вы от такого застрахованы)
  • unison. Отличная тема, синхронизация хорошо работает, но нужно настроить раз, а потом порой возникают проблемы с permissions на файлы. Всё равно мне unison нравится.
  • CIFS или NFS. Не хотел это настраивать, CentOS 6 порой преподносит сюрпризы с доступностью тривиальнейших пакетов, даже в EPEL.
  • FTP/SCP. Нет, увольте. Даже объяснять не хочу.

Если бы мне по-прежнему нужны были 64 GB RAM, то я бы продолжал использовать один из приведённых вариантов. Но сейчас мне нужны легковесные контейнеры. И вот тут вспомнил про Parallels Pro.

В нём заявлена поддержка Docker. docker-machine, конечно, своей сборки. Некошерно, но работает. Хотите узнать, почему именно так, а не плагин под существующий docker-machine? Тогда послушайте рассказ из первых уст в подкасте “DevOps Дефлопе”.

Выполнил пункты 1-5 из Integration with Docker.

Попробовал запустить машину — ошибка на стадии монтирования shared folder:

$ docker-machine create --driver=parallels prl-dev
Creating SSH key...
Creating Parallels Desktop VM...
Starting Parallels Desktop VM...
Waiting for VM to come online...
Error creating machine: Error mounting shared folder: exit status 255
You will want to check the provider to make sure the machine and associated resources were properly removed.

Пару минут покопался в Google и нашёл решение “Unable to create machine (Shared folder)”:

$ docker-machine create \
    -d parallels \
    --parallels-boot2docker-url https://github.com/boot2docker/boot2docker/releases/download/v1.8.2/boot2docker.iso \
    ctrld

Downloading boot2docker.iso from https://github.com/boot2docker/boot2docker/releases/download/v1.8.2/boot2docker.iso...
Creating SSH key...
Creating Parallels Desktop VM...
Starting Parallels Desktop VM...
Waiting for VM to come online...
To see how to connect Docker to this machine, run: docker-machine env ctrld

Запускаю:

$ eval "$(docker-machine env ctrld)"

$ docker-machine ls
NAME    ACTIVE   DRIVER      STATE     URL                        SWARM
ctrld   *        parallels   Running   tcp://10.211.55.147:2376

Машина есть. Теперь запускаю конейнер с именно той фичей, ради которой всё затевал — монтированием локального volume в “удалённый” docker:

$ ls -l
drwxr-xr-x 2 ctrld staff  68 Oct 19 14:21 iot-probe

$ docker run -it --rm -v $PWD:/data ubuntu

root@9b0c95000097:/# ls -l /data/
drwxr-xr-x  1 root root   68 Oct 19 11:21 iot-probe

Работает. Замечательно. Именно то, что хотелось — в процессе разработки я могу править код из контейнера. Понятно, что это именно DEV-вариант, потом всё будет обёрнуто в Dockerfile’е.

Насчёт стабильности и отсутстия проблем ничего сказать пока не могу, базовые операции же c volume работают нормально.

P.S. Сергей Макаренко написал подробный обзор Parallels Desktop 11, рекомендую посмотреть.