Docker経由Swagger UIを入れてみた

はじめに

  • 目的:SwaggerUIを開発環境に入れて、Railsと組み合わせたい
  • Railsのswagger-ui gemもありますが、あれはSwaggerUIが古い。最新版のSwaggerUIを使いたい。

手動で構築するのがちょっと面倒だから、Dockerを使って入れてみた

作業

Docker HubにSwagger UIを探してこういうイメージを見つけた

https://registry.hub.docker.com/u/capoferro/swagger-ui/

capoferro / swagger-ui Simple docker container to serve the Swagger UI

インストールする方法は以下となります

  • イーメジをpullする
$ docker pull capoferro/swagger-ui
  • コンテナを起動する
$ docker run -d -p 4567:80 capoferro/swagger-ui

このコマンドはSwaggerUIコンテナの80ポートをホストマシンの4567ポートに紐付ける

  • ブラウザにboot2dockerマシンのIP(普通192.168.59.103)のポート4567をアクセスするとSwaggerの画面が出てくる

Screen Shot 2015-01-20 at 7.31.02 PM.png

これでSwaggerUIのインストールが成功した。

最後にRailsのアプリを紐付けること:

  • 動いているSwaggerコンテナのIDを確認する ( $ docker ps)

Screen Shot 2015-01-20 at 7.35.24 PM.png

今回コンテナIDは859502ad6704がわかりました。

  • SwaggerUIコンテナに入る
$ docker exec -i -t 8595 /bin/bash

(8595はコンテナIDの先頭4文字です。コンテナIDを指定するとき先頭3,4文字でも動くはず)

  • index.htmlの中にurlのところにデフォルトURLをRailsのswagger_docパスに変更する:
    viでもいいですが、キーボードがおかしかったのでsedを使いました
$ sed -i "s@http://petstore.swagger.wordnik.com/api/api-docs@http://192.168.59.103:3000/api/swagger_doc@g" index.html

終わり!

まわりの話

SwaggerUIイメージのソースコード: https://github.com/capoferro/swagger-ui-docker

Dockerfileをみてわかるように、このイメージはUbuntuベース、nginx上にSwaggerUI動くという形です。SwaggerUIは公式のgithubをプルするので最新版になっているだろう。