Swift のビルド環境を Docker で構築

Ubuntu をベースとした Swift のビルド環境を Docker で構築してみました。

使用したソースは http://github.com/fits/try_samples/tree/master/blog/20151207/

Docker イメージ作成

ubuntu:15.10 のイメージをベースに Swift をセットアップしました。

clang 等の必要なパッケージをインストールした後、swift-2.2-SNAPSHOT-2015-12-01-b-ubuntu15.10.tar.gz をダウンロードして解凍し、環境変数 PATH へ swift-2.2-・・・/usr/bin のパスを追加するだけです。

また、clang をインストールしただけだと swiftc の実行時に /usr/bin/ld: warning: libicuuc.so.55, needed by /swift-2.2・・・/usr/lib/swift/linux/libswiftCore.so, not found (try using -rpath or -rpath-link) のようなメッセージが出力されたので、libicu-dev もインストールするようにしています。

Dockerfile
FROM ubuntu:15.10

ENV SWIFT_PACKAGE swift-2.2-SNAPSHOT-2015-12-01-b-ubuntu15.10

RUN apt-get update
RUN apt-get -y upgrade

RUN apt-get -y install curl clang libicu-dev

# swift のパッケージをダウンロード
RUN curl https://swift.org/builds/ubuntu1510/swift-2.2-SNAPSHOT-2015-12-01-b/$SWIFT_PACKAGE.tar.gz -o $SWIFT_PACKAGE.tar.gz

RUN tar zxf $SWIFT_PACKAGE.tar.gz
RUN rm -f $SWIFT_PACKAGE.tar.gz

RUN apt-get clean

# 環境変数 PATH の設定
ENV PATH /$SWIFT_PACKAGE/usr/bin:$PATH

docker build で Docker イメージを作成します。

Docker イメージの作成
$ docker build --no-cache -t sample/swift:0.1 .

・・・
Successfully built ・・・

動作確認

作成した Docker イメージを使って以下のようなサンプルソースを実行してみます。

/vagrant/work/sample.swift
let a = 11
let b = 2

print("result = \(a * b)")

まず、sample/swift:0.1 イメージを使って Docker コンテナを起動します。

Docker コンテナの起動
$ docker run --rm -it -v /vagrant/work:/work sample/swift:0.1 bash
・・・
# cd /work

コンテナ内で sample.swift を実行します。

直接実行
# swift sample.swift

result = 22
ビルドしてから実行
# swiftc sample.swift
# ./sample

result = 22