Node.jsとDockerをつかってマイクロサービスを立ち上げてみました。
参考:https://www.youtube.com/watch?v=PJ95WY2DqXo
この動画では、Macを使っているので、Expressのファイルの編集や動作テストなどコンテナの外でやっていますが、ここではWindowsを使うためコンテナ内で完結させるようにしています。
環境:DockerToolbox-1.11.2.exe / Windows 10
インストール後”C:\Program Files\Docker Toolbox\start.sh”を起動
まずUbuntuをインストールして起動
winpty docker run -it ubuntu bash
Ubuntuにnode.js, express, vimをインストール
apt-get update
apt-get install nodejs
apt-get install nodejs-legacy
apt-get install npm
apt-get install express-generator
apt-get install vim
Expressを使ってアプリを作成
express microservice
cd microservice
npm install
npm start
exit
今立ち上げていたDockerプロセスの確認
$ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
fc3726a8e324 ubuntu “bash” 22 minutes ago Exited (130) 10 seconds ago
コンテナの変更をコミット
$ docker commit -a kei fc3 node-microservice:0.1
sha256:5e789dd8663b02f6204db7454127717189c3856657661c41d28746e904a231d2
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
node-microservice 0.1 5e789dd8663b Less than a second ago 467.6 MB
ubuntu latest 0f192147631d 9 days ago 132.8 MB
マイクロサービスを立ち上げる。コンテナの外と中でポートマッピングする。
docker run -d -w /microservice -p 9000:3000 node-microservice:0.1 npm start
ここまでで、デフォルト画面が起動できたことを確認できたので、次は任意のページを作ってみます。
/microservie/routesの下に以下ファイルを追加します。
api.js
1 2 3 4 5 6 7 8 |
var express = require('express'); var router = express.Router(); router.get('/hello', function(req, res, next) { res.send('<h3>Hello!</h3>'); }); module.exports = router; |
/microservie/app.jsに以下を同様の記述をしてあるところにそれぞれ追加します。
var api = require(‘./routes/api’);
app.use(‘/api’, api);
コンテナに変更を加えたので、上と同様にコミットして立ち上げます。
アタッチすることによって標準出力を表示させることもできます。
アプリケーションの実行環境をマシン(OS)丸ごとコンテナに閉じ込めるので、複数の環境を組み合わせて使いたいとき、それぞの管理が独立してできるというメリットはとても大きいと思います。よくあるバージョン違いによる不整合などの不具合はこれで防げます。コマンドライン一行で仮想マシンを起動したり停止させたりできるので、サービスの保守、セキュリティ対策にもいろんな可能性を秘めています。
しかしながら、このテストで一番感じたのは、WindowsのDockerって結構できるんだ、です。WindowsにBashを導入したいのもわかる気がします。