m_shige1979のささやかな抵抗と欲望の日々

プログラムの勉強をしながら学習したことや経験したことをぼそぼそと書いていきます

Github(変なおっさんの顔でるので気をつけてね)

https://github.com/mshige1979

docker-composeで簡易的なスタブサーバを作成

普段、簡易サーバを用意する場合って

毎回、nodejsとかphpとかでデモを一から用意するんですよね… まあ、それでも良いのですが ちょっとだけ楽したいってことがあります。

よく使うの

github.com

使い方の参考リンク

Node.js の mocky を使用し スタブREST API を作成してみる、その1 - Qiita

mocky を使ってちょっと賢いスタブAPIサーバを作る - Qiita

dockerでやりたい

最終的にはnginxとか使いたいけどとりあえず、docker~composeでの試作版を用意する

docker版

ディレクトリ構成

.
├── LICENSE
├── README.md
├── docker-compose.yml
└── dockers
    └── mocky
        ├── Dockerfile
        ├── README.md
        └── app
            ├── api
            │   ├── api.js
            │   └── user.js
            ├── index.js
            ├── package-lock.json
            └── package.json

dockers/mocky/app/package.json

{
  "name": "mocky",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "type": "module",
  "scripts": {
    "start": "nodemon --exec node --experimental-modules index.js",
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "keywords": [],
  "author": "",
  "license": "ISC",
  "devDependencies": {
    "mocky": "^0.1.11",
    "nodemon": "^2.0.7"
  },
  "dependencies": {
    "canvas": "^2.6.1",
    "html-pdf": "^2.2.0"
  }
}

dockers/mocky/app/index.js

import mocky from "mocky";
import Api from "./api/api.js";

mocky.createServer([Api.getUser, Api.getUsers]).listen(4321);

※各APIのコードはgithubに記載

docker-compose.yml

version: "3"

services:
  # スタブサーバ用
  mocky:
    # コンテナ名
    container_name: mocky
    # Dockerfile場所
    build: ./dockers/mocky
    # コンテナに入るようにできる
    tty: true
    # ボリューム
    volumes:
      - "./dockers/mocky/app:/usr/src/app"
    # ポート
    ports:
      - "4321:4321"
    # 作業ディレクトリ
    working_dir: /usr/src/app
    # 実行コマンド
    entrypoint: npm start

dockers/mocky/Dockerfile

# ベースイメージ
FROM node:12

# 作業ディレクトリ
WORKDIR /usr/src

# package.jsonをコピー
# ホスト側はDockerfileの場所からの相対パス
COPY ./app/package*.json ./

# パッケージインストール
RUN npm install --no-optional && npm cache clean --force
ENV PATH /usr/src/node_modules/.bin:$PATH

# 作業ディレクトリ
WORKDIR /usr/src/app

# ホスト側はDockerfileの場所からの相対パス
COPY ./app/. ./

# 実行
CMD ["npm", "start"]

起動

 % docker-compose up -d
Creating network "mocky_default" with the default driver
Creating mocky ... done
%

 % curl http://localhost:4321/api/v01/users | jq

  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100    42    0    42    0     0  14000      0 --:--:-- --:--:-- --:--:-- 14000
{
  "users": [
    {
      "name": "hoge"
    },
    {
      "name": "foo"
    }
  ]
}
%

参考情報

Dockerでmockyを使ったスタブサーバを立ち上げる - Qiita

DockerでNode.jsアプリをイイ感じに保つ4つの方法 #docker - クリエーションライン株式会社

Github

https://github.com/mshige1979/mocky_docker_sample