Изучение концепций на основе Linux для контейнеризации вашей разработки Swift

Требуется ли Mac для запуска Swift? Нет. Swift — это язык программирования, предназначенный для работы с экосистемой Apple. Тем не менее, он может работать в Linux. Он написан не только для продуктов Apple.

Давайте воспользуемся Docker для создания среды, подходящей для запуска Swift и выполнения его инструкций:

curl -O https://swift.org/builds/swift-5.2.4-release/amazonlinux2/swift-5.2.4-RELEASE/swift-5.2.4-RELEASE-amazonlinux2.tar.gz
tar -xf swift-5.2.4-RELEASE-amazonlinux2.tar.gz
sudo cp -R ./swift-5.2.4-RELEASE-amazonlinux2 /usr/local/bin/

Здорово! Похоже, мы можем запустить команду swift и двигаться дальше.

Не так быстро… нам нужно, чтобы swift был доступен из любого места.

На данный момент, из-за расположения бинарного файла, единственный способ запустить swift — выполнить прямо из пути /usr/local/bin/swift-5.2.4-RELEASE-amazonlinux2/local/bin/swift.

Запуск Swift из любого места на вашем компьютере

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

Bash не может активно использовать двоичный файл, пока где-то в сеансе bash не будет системной ссылки на двоичный файл. Чтобы включить эту ссылку, export путь из двоичного файла, который мы только что разархивировали выше, и свяжите его с текущим сеансом bash с помощью :${PATH}.

PATH — это переменная, связанная с местоположением файла, которая эквивалентна использованию /usr/sbin:/usr/bin:/sbin:/bin в Ubuntu. В macOSx это будет эквивалентно использованию /usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin.

Давайте теперь сделаем ярлык к бинарнику с помощью функции export:

export PATH="/usr/local/bin/swift-5.2.4-RELEASE-amazonlinux2/usr/bin/:${PATH}"

Здесь вы можете видеть, что export — это команда, которая помечает переменные среды для экспорта в качестве дочерних процессов.

Давайте проверим, изменились ли мы с помощью этой команды swift --version:

bash-4.2# swift --version

Успех! Мы установили общесистемный язык компиляции, обычно используемый в продуктах Apple, внутри Linux и запустили его в первый раз.

Давайте очистим оставшиеся файлы:

sudo rm -rf ./swift-5.2.4-RELEASE-amazonlinux2
sudo rm -rf ./swift-5.2.4-RELEASE-amazonlinux2.tar.gz

Докеризация Swift

Включение скомпилированного языка — это следующий шаг к изоляции проектов, кода и системных процессов. Образ Amazon Linux 2 Docker, предоставленный DockerHub, хорошо поддерживается и обеспечивает очистку пакетов и простую установку пакетов.

Давайте попробуем запустить нашу программу Swift в среде на базе Linux, аналогичной экземпляру AWS ec2 linux2. Amazon Linux 2 — это образ машины Amazon, использующий Amazon EC2 и Amazon ECS (услуги, предоставляемые AWS).

Вот пример файла Docker:

FROM amazonlinux:2

# Install -- See https://hub.docker.com/_/amazonlinux
RUN yum -y update; yum clean all

# Install requirements.
RUN yum makecache fast \
 && yum -y install deltarpm epel-release initscripts \
 && yum -y update \
 && yum -y install \
      binutils \
      gcc \
      git \
      glibc-static \
      gzip \
      libbsd \
      libcurl \
      libedit \
      libicu \
      libsqlite \
      libstdc++-static \
      libuuid \
      libxml2 \
      tzdata \
      tar \
      sudo \
      nano \
      which \
      python-pip \
 && yum clean all

RUN curl -O https://swift.org/builds/swift-5.2.4-release/amazonlinux2/swift-5.2.4-RELEASE/swift-5.2.4-RELEASE-amazonlinux2.tar.gz
RUN tar -xf swift-5.2.4-RELEASE-amazonlinux2.tar.gz
RUN sudo cp -R ./swift-5.2.4-RELEASE-amazonlinux2 /usr/local/bin/
ENV PATH="/usr/local/bin/swift-5.2.4-RELEASE-amazonlinux2/usr/bin/:${PATH}"
RUN sudo rm -rf ./swift-5.2.4-RELEASE-amazonlinux2
RUN sudo rm -rf ./swift-5.2.4-RELEASE-amazonlinux2.tar.gz

RUN cd ./home && export PATH=/usr/local/bin/swift-5.2.4-RELEASE-amazonlinux2/usr/bin/:"${PATH}" && swift package init --type="executable" && swift package update && swift build && swift run

CMD ["/bin/ping","localhost"]

Давайте проиллюстрируем, как построить этот .dockerfile:

docker build -t swiftamazon .

Вы можете видеть, что команда build предварительно настроит Swift и инициализирует проект Swift с типом, установленным на executable:

swift package init --type="executable"

Он создаст пример проекта уже из коробки.

Запуск Swift в Linux

Давайте запустим! Включите CONTAINER ID после команды Docker:

docker run <CONTAINER ID>

Или помеченное имя образа сборки, изначально заданное аргументом -t в вашей команде сборки Docker:

docker run swiftamazon:latest

Теперь мы запускаем образ Docker на основе Linux в качестве контейнера с двоичным кодом ping, вызывающим localhost, который поддерживает этот контейнер в рабочем состоянии.

Это позволит нам exec команд контейнеру.

Давайте используем аргумент -it в сочетании с запуском программы /bin/bash для работы в среде на основе Linux с уже предварительно загруженным Swift:

docker exec -it <CONTAINER ID> /bin/bash

Вот работающий экземпляр amazonlinux:2 с инициализированным Swift, который может работать внутри контейнера.

Окончательные результаты

Вот как заставить Swift работать в изолированной среде контейнера Linux. Swift запускается из предварительно созданного бинарного файла и может быть вызван напрямую из любого места внутри контейнера. Теперь разработка на Swift может быть контейнеризирована и развернута на AWS с помощью нескольких настроек.

В этой статье мы рассмотрели несколько концепций на основе Linux и показали, как использовать рабочий процесс разработчика, не свойственный для Mac.

Удачного кодирования!