Swift WebフレームワークKituraをDocker on Amazon EC2で動かしてみた
ども、大瀧です。 本日公開された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の先進的な言語設計が様々な環境で活用できるのであれば、広く受け入れられる仕組みになるかもしれないですね!