Docker: multi-stage builds

В Docker 17.05 добавили приятную функциональность под названием multi-stage builds. Заключается она в том, что теперь можно объединить несколько Dockerfile в один, так сказать, «многоступенчатый» Dockerfile с возможностью копирования файлов между стадиями.

Полезно это тогда, когда в процессе сборки образа нужно больше софта, чем для последующего запуска. Типичный пример — компиляция в контейнерах. Нужна куча всяких SDK, библиотек, тулов, а кроме того генерируется масса промежуточных артефактов.

Давайте рассмотрим пару примеров.

Читать далее ▸

Docker теперь Moby

На прошлой неделе на Гитхабе произошло событие, по степени бурления сопоставимое с историей отказа от project.json в .NET Core.

Репозиторий docker/docker переименовали в moby/moby.

Говорят, что даже GitHub прилёг, когда весь мир пошёл читать этот pull request.

Я пробежал глазами официальный блог и послушал мнения экспертов из Radio-T и GolangShow. Вот небольшое резюме.

Читать далее ▸

Traktor Kontrol S5 — Pitch Faders

One important thing that latest Native Instruments S5, S8 and D2 controllers lack badly is the pitch/tempo fader.

Strange enough! Those faders wouldn’t have occupied much space, but without them users are forced to use the SYNC button, even if they want to beat-match manually.

Traktor Kontrol S5

Luckily, it’s quite easy to re-map deck C and D volume faders to act as pitch!

A little bit of hacking is needed. Find the Mixer.qml file on disk.

  • On Windows: C:\Program Files\Native Instruments\Traktor 2\Resources64\qml\CSI\S5

  • On Mac: /Applications/Native Instruments/Traktor 2/Traktor.app, right click, «Show Package Contents», and then Contents/Resources/qml/CSI/S5

Open it in a text editor, and right before the last closing brace insert the following lines:

  // pitch fader start

  AppProperty { id: hack_aTempo; path: "app.traktor.decks.1.tempo.adjust" }
  AppProperty { id: hack_bTempo; path: "app.traktor.decks.2.tempo.adjust" }

  AppProperty { id: hack_aSync;  path: "app.traktor.decks.1.sync.enabled" }
  AppProperty { id: hack_bSync;  path: "app.traktor.decks.2.sync.enabled" }

  AppProperty {
    path: "app.traktor.mixer.channels.3.volume";
    onValueChanged: {
      if(!hack_aSync.value)
        hack_aTempo.value = 1 - 2 * value;
    }
  }

  AppProperty {
    path: "app.traktor.mixer.channels.4.volume";
    onValueChanged: {
      if(!hack_bSync.value)
        hack_bTempo.value = 1 - 2 * value;
    }
  }

  // pitch fader end

Restart Traktor.

Now, when SYNC is off, volume faders C and D will adjust tempo of decks A and B respectively.

Turn off Snap. Turn off Quantize. Cover BPM and phase indicators with tape stickers. And beat-match by ear as a real DJ!

P.S. It was fun to know that controller mappings are done in JavaScript!

Docker: Windows и Linux в контейнерах на одной машине

На странице Docker for Windows я заметил очень интересную фразу:

You can install Docker for Windows, which allows you to develop and run Windows containers natively, or develop and run Linux containers using Hyper-V. This is the best of both worlds.

То есть утверждается, что можно запускать контейнеры как с Linux, так и с Windows внутри.

С Линуксом всё понятно. Для тех кто не в курсе, Docker for Windows (как и его предшественник Docker Toolbox) поднимает контейнеры на Linux внутри виртуальной машины Hyper-V и дополнительно использует различные ухищрения для интеграции с внешней ОС.

А как же запустить контейнер с Windows?

Оказалось, имеется в виду вот что. Рядом с Docker for Windows можно установить так называемый Windows-native Docker Engine и, манипулируя переменной окружения DOCKER_HOST, использовать один и тот же Docker-клиент для управления обоими демонами.

Читать далее ▸

Docker: containerd, runC, runV и в общем про архитектуру

Сначала Docker был монолитом. И это преподносилось как преимущество. Например, в знаменитом «Introduction to Docker» на 20-й минуте Соломон Хайкс рассказывает как здорово, что Docker — это один файл. Кладешь его в систему, и готово! Позже, однако, монолитность была названа одной из причин размолвки между Docker и CoreOS и последовавшего за этим бурления на Hacker News:

Docker process model — where everything runs through a central daemon — is fundamentally flawed. To «fix» Docker would essentially mean a rewrite of the project…

Но всё, что ни делается — к лучшему. Резонанс утих, а сообщество разработчиков договорилось о необходимости разрабатывать открытые стандарты и делать декомпозицию. Появился проект ​Open Container Initiative (OCI) и разные интересные названия: containerd, runC, runV, runZ

Читать далее ▸