Рубрики
Uncategorized

Преобразование среда разработки в яблочный кремний

Или «как я научился перестать беспокоиться и любить яблочную кремниевую бомбу» К настоящему времени, если вы … с меткой DevOps, Docker, Architecture, ARM64.

Или «как я научился перестать беспокоиться и любить яблочную кремниевую бомбу»

К настоящему времени, если вы разработчик, работающий над Mac, вы, вероятно, находитесь в процессе выяснения, сможет ли все, что у вас есть, будет работать на Apple Silicon Computer. Да, шумиха реальна, и это везде. Конечно, если вы считаете, что шумиха, чипсы рук, питающие новый Mac, могут сделать все, от того, чтобы сделать кофе без второй мысли или даже написать ваш код для вас;), чтобы быть справедливым, и это не обзор яблочного кремния Mac, я должен сказать, что машина довольно хорошая.

Реальность такова, что Apple переключится на чипсы Arm, и, как разработчики, мы должны быть подготовлены. Итак, в прошедшие выходные, столкнувшись с нехваткой профессионалов Intel MacBook для наших новых разработчиков, мы сели, чтобы все это было работать для нашего Supermetrics Разработчики.

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

Ниже приводится краткое изложение того, что мы должны были сделать в Barest от костей:

  • Подготовьтесь к немного разным путям на M1 и несколько разных библиотек
  • Получите последнюю версию Docker
  • Используйте Buildx для составления контейнеров в различных средах (Mac Intel, ARM64)

Шаг 1: подготовка к новой местной среде

Supermetrics развивается локально на как можно ближе к дубликату наших производственных систем. У каждого из наших разработчиков есть стандартная настройка и инструмент командной строки, который позволяет любому разработке начинать, останавливать и отлаживать свою локальную настройку. Инструмент также позволяет очистить кэши, манипулировать журналами и так далее. Хотя это и не идеально, это делает свое дело.

В то время как наши внутренние инструменты как бы работали «из коробки», нам сначала пришлось заставить машину M1 просто запустить все библиотеки, которые мы используем. К счастью, Homebrew уже функционален для яблочного кремния. Если у вас есть сценарии, которые предполагают, где пиво Установлен, будьте осторожны, что по умолчанию отличается от Mac Intel: /usr/local Для Mac Intel, /opt/homebrew на яблоне кремния.

Для всех наших сценариев Bash нам нужно было обнаружить как систему, так и чип. Некоторые из наших разработчиков также находятся на ящиках Linux:).

Для справки, вот тот удар, который мы использовали:

#!/usr/bin/env bash

function check_system() {

 unameOut="$(uname -s)"
 local op_sys=""
 case "${unameOut}" in
     Linux*)     op_sys=Linux;;
     Darwin*)    op_sys=Mac;;
     *)          op_sys="UNKNOWN:${unameOut}"
 esac

 echo $op_sys
}

function check_chip() {
 unameMOut="$(uname -m)"
 local op_chip=""
 case "${unameMOut}" in
     arm64*)     op_chip=Arm;;
     x86_64*)    op_chip=Intel;;
     *)          op_chip="UNKNOWN:${unameMOut}"
 esac

 echo $op_chip
}

check_system
check_chip

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

Шаг 2: Проверка Docker

По состоянию на июнь 2021 года Docker Desktop отлично работает на Apple Silicon. Так что иди, возьми это.

Следующий шаг, запустите все наши контейнеры и надеюсь, что все работает … и бум. Неа. Ну … хорошо, вроде.

Вот важная вещь, да, ваши изображения Intel AMD64 будут работать на Apple Arm64, и они сделают это в эмуляции. Но, эй, не целый смысл сделать это, чтобы попытаться избежать эмуляции.

Наши серверы — это собранные версии PHP, Python и множество других библиотек. Так что, конечно, пришло время компилировать. Но вот описание наших местных систем.

Короче говоря,

  • Redis и Redisinsight
  • MySQL (5,6, 5,7, 8,0)
  • Jwilder/nginx-proxy (Каждый магазин разработчиков должен использовать его — может быть, будущий пост в блоге!)
  • Различные пользовательские скомпилированные отладочные версии наших производственных систем

Вы можете запустить все контейнеры, указав платформу для эмуляции, но наша цель состояла в том, чтобы позволить нашим инструментам беспрепятственно звонить Docker-Compose Не беспокоясь, если они работали на Linux, Mac Intel или системе Mac Apple Silicon.

Кроме того, MySQL 5.6 и MySQL 5.7 Официальные изображения не предоставляются в виде изображений ARM64:(

Шаг 3: Скомпонент всех контейнеров

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

Чтобы все работало, вот что мы сделали (точные команды следуют):

  1. Там, где ранее мы ссылались на официальное изображение непосредственно в наших файлах с композитом Docker (например, MySQL: 5.6 ), мы теперь перекомпилируем даже официальные изображения в наш реестр контейнеров (Реестр контейнеров Google-GCR). Например, local_mysql был изображением, которое мы создали и пометили в три разные версии: 5.6 , 5.7 и 8.0 но также хранится как эмулированный ARM64.
   FROM --platform=linux/amd64 mysql:5.6
  1. Затем нам нужно было собрать версию AMD64 на машине AMD64 (Linux или Mac Intel) и версию ARM64 на Apple Silicon Mac и загрузите его в наш реестр с каждой с правильной платформой. Это важная нота, так как процесс компиляции не может быть инициирован, его необходимо выполнить на соответствующей базовой платформе.

  2. Там, где мы могли бы, мы переписывали или ссылались на правильное изображение вверх по течению. Примечание: если вы перекомпиляете что -то вроде PHP, вам нужно компилировать на правильной платформе. Таким образом, вы должны составить его на Apple Silicon для ARM64 (ящик ARM64 Linux в Google Cloud также должен работать). Это возможно То, что вы могли бы собрать его под эмуляцией на AMD64, но поскольку у меня было две машины — я использовал обе и не удосужился попробовать эмуляцию или облачный сервер ARM64.

  3. Поскольку совершенно раздражает делать это снова и снова (мы много строим наши местные изображения), мы написали внутренний инструмент, чтобы сделать для нас сборки на Apple Silicon и Intel Mac для будущего.

Использование Buildx

Хотя я надеюсь, что эта статья останется актуальной, пожалуйста, обратитесь к правильному Документация BUILDX Анкет Использовать новый Docker buildx Команды, вам нужно будет настроить строителя. Я ссылался на Реестр контейнеров Google (gcr.io), так как именно здесь мы размещаем наши контейнеры, но, конечно, ECR и другие реестры контейнеров будут работать.

Создайте свой строитель

docker buildx create --name my_local_builder --platform linux/amd64,linux/arm64
docker buildx use my_local_builder

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

docker buildx inspect --bootstrap

Строительство изображений

Строительство простое — если вы хотите создать несколько изображений на одной машине (некоторые изображения, которые вы сможете) просто добавьте все платформы (разделенные запятыми), а не единственные, используемые здесь.

# no_cache_string = --no-cache if you want to ignore the docker build cache
# build_this_platform = linux/arm64 or linux/amd64 assuming your builder is set for those
# repo_image = your repository image
# build_docker_tag = your image tag
# use_docker_file = use -f if you want to use something other than the default `Dockerfile`


docker buildx build ${no_cache_string} --platform ${build_this_platform} -t ${repo_image}:${build_docker_tag} --push -f ${use_docker_file} .

В нашем конкретном случае — чтобы держать изображения отдельными, когда мы строили их на разных платформах и подталкивались к репозиторию — мы добавили -Arm64 и -Amd64 к теге версии.

Построение манифеста

Как только вы натолкнули MY_LOCAL_DEBUG_IMAGE: 1.1-AMD64 как linux/amd64 и my_local_debug_image: 1.1-harm64 как Linux/ARM64 Вам нужно создать манифест, который указывает на обе платформы.

Когда разработчик требует my_local_debug_image: 1.1 , Реестр будет служить правильному изображению платформы.

docker buildx imagetools create -t eu.gcr.io/myproject/my_local_debug_image:1.1 eu.gcr.io/myproject/my_local_debug_image:1.1-arm64 eu.gcr.io/myproject/my_local_debug_image:1.1-amd64

Последние слова

Обратите внимание, что многое из этого, вероятно, можно сделать в эмуляции, но ваш пробег может варьироваться. My Buildx сбои в определенных компиляциях, и было проще и лучше просто использовать машину ARM64, такую как Apple Silicon Machine.

Я был от всей души разочарован тем, что конкретные библиотеки, которые мы используем, такие как снежинка ODBC или драйверы Oracle ODBC, на самом деле не имели местных библиотек ARM64. Я уверен, что к концу года это будет исправлено, но все равно разочаровывает.

Лично мне нравятся яблочные кремниевые машины, и я от всего сердца надеюсь на будущее Arm64:)

Оригинал: «https://dev.to/supermetrics/converting-dev-environments-to-apple-silicon-468i»