Изучение концепций на основе 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.
Удачного кодирования!