LoginSignup
19
4

More than 3 years have passed since last update.

DockerでSwagger Specからモックサーバーを生成しホスティングする(マルチステージビルド)

Posted at

概要

  • Swagger Specからモックサーバーを自動生成し、ホスティングする
  • Swagger SpecはYAMLとJSONの両方に対応。v2とv3の両方に対応

Swaggerって何?という方には Swaggerの概要をまとめてみた。がオススメです。

やったこと

DockerHubのswagger-codegen-cliというイメージを使ってモックサーバーのファイルを生成し、それをnodeイメージでホスティングするDockerFileを作りました。

swagger-codegen-cliはモックサーバーのファイルを生成してくれますが、ホスティングまではしてくれません。
「Dockerイメージをビルド・起動したらモックサーバーが動く!」というのを実現するため、Dockerのマルチステージビルドでやってみました。

dockerfile

GitHubはこちらJSONへの対応やバージョン3系への対応についても書きました。

dockerfile
FROM swaggerapi/swagger-codegen-cli:2.4.14 as builder
WORKDIR /mock-seed
# ホストマシンのswagger.ymlをコピー
COPY ./swagger.yml ./
WORKDIR /mock-server
# モックサーバーのファイルを作成
RUN java -jar /opt/swagger-codegen-cli/swagger-codegen-cli.jar \
    generate -i /mock-seed/swagger.yml -l nodejs-server -o ./

FROM node:14.2.0-alpine3.10 as executor
WORKDIR /mock-server
# 上記で作ったモックサーバーのファイル群をコピー
COPY --from=builder /mock-server ./
# パッケージ類のインストール
RUN npm install
# 8080ポートを受ける
EXPOSE 8080
# コンテナ起動でサーバーが起動するようにする
CMD ["npm", "start"]

docker-compose.yml

合わせて作りましたが、なくても大丈夫です。(GitHub

docker-compose.yml
version: '3.3'
services:
  mock_server:
    container_name: mock_server
    build: .
    ports:
      - "8080:8080"

ビルド・起動

swagger.ymlはdockerfileと同じディレクトリに置いてください。

docker-composeを使う場合

docker-compose up --bulid

docker-composeを使わない場合

docker build . -t mock-server

docker run --rm -p 8080:8080 mock-server

ブラウザでlocalhost:8080/docsにアクセスするとSwaggerUIが表示されます。
localhost:8080/v2/pet/1等、Swagger Specで定義したURLにアクセスするとサンプルデータが表示されます。

おわりに

筆者は初学者です。間違いなどがあればコメントでご教授ください!

19
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
19
4