Swift WebフレームワークKituraをDocker on Amazon EC2で動かしてみた

kitura-eyecatch

ども、大瀧です。 本日公開されたIBM製Swift WebフレームワークKituraを、AWSでしかもDockerで動作させてみたのでご紹介します。

KituraはLinuxで動く

Bluemixのページでは当然KituraをIBM Bluemixで動作させる様子が全面に紹介されていますが、Swift自体はLinuxで動作することが知られているのでAmazon EC2やDockerで動作させることも出来るのでは?と思い立った次第です。

GitHubの手順に従うよう、Dockerfileを作成しました。

FROM ubuntu:wily

RUN apt-get update && apt-get install -y \
  git \
  libhttp-parser-dev libcurl4-openssl-dev libhiredis-dev \
  clang libicu-dev \
  dh-autoreconf pkg-config libkqueue0 libkqueue-dev libbsd-dev libblocksruntime-dev \
  wget \
  && rm -rf /var/lib/apt/lists/*

RUN wget https://swift.org/builds/development/ubuntu1510/swift-DEVELOPMENT-SNAPSHOT-2016-02-08-a/swift-DEVELOPMENT-SNAPSHOT-2016-02-08-a-ubuntu15.10.tar.gz && \
  tar zxf swift-DEVELOPMENT-SNAPSHOT-2016-02-08-a-ubuntu15.10.tar.gz && \
  mkdir -p /opt/swift && \
  mv swift-DEVELOPMENT-SNAPSHOT-2016-02-08-a-ubuntu15.10/usr/ /opt/swift/

ENV PATH /opt/swift/usr/bin:$PATH

RUN git clone -b opaque-pointer git://github.com/seabaylea/swift-corelibs-libdispatch && \
 cd swift-corelibs-libdispatch && sh ./autogen.sh && ./configure && make && make install

ENV LD_LIBRARY_PATH /usr/local/lib:$LD_LIBRARY_PATH

RUN wget https://github.com/IBM-Swift/Kitura/raw/master/Sources/Modulemaps/module.modulemap -O /usr/local/include/dispatch/module.modulemap

RUN wget http://ftp.exim.org/pub/pcre/pcre2-10.20.tar.gz && \
  tar zxf pcre2-10.20.tar.gz && \
  cd pcre2-10.20/ && \
  ./configure && make && make install

RUN git clone https://github.com/IBM-Swift/Kitura.git && \
  cd Kitura/ && \
  swift build ; \
  make

CMD ./Kitura/.build/debug/KituraSample

動作確認

  • AMI : ubuntu-wily-15.10-amd64-server-20160217.1 (ami-552a2b3b) (東京リージョン)
  • Docker : バージョン 1.10.2, build c3959b1

上記Dockerfileを保存し、Dockerイメージの作成、実行するだけです。サンプルアプリケーションKituraSampleは8090ポートをListenするのでポートをアサインし、curlでアクセスしています。

$ sudo docker build -t takipone/kitura .
  : (略)
$ sudo docker run -d -p 8090:8090 takipone/kitura
$ curl localhost:8090
You're running Kitura
$

動きました!

まとめ

IBMが作った!Bluemixで動く!というので話題になっていますが、シンプルなSwiftのAPサーバーと捉えると、Dockerとの相性は実はとてもいいんじゃないか?と思った次第です。

これから育っていくフレームワークだと思いますが、Swiftの先進的な言語設計が様々な環境で活用できるのであれば、広く受け入れられる仕組みになるかもしれないですね!