SlideShare a Scribd company logo
でnodejsのアプリ
を立ち上げよう!
Daisuke Hiraoka(平岡 大祐)
• IBM Champion for Cloud 2019-2020
• 2013年からオンプレミスシステムからIBM Cloudへの移行を支援
• 2016年からIBM CloudでOpenShift/Kubernetes/Dockerの運用を開
始
Twitter: @HiraokaDaisuke
Linkedin: @Daisuke Hiraoka
今回の内容
Node.jsのデモアプリを以下の2つのパターンで立ち上げて違いを確認してみよう
1. Node.jsをローカル環境にインストールしてデモアプリを立ち上げる。
2. appsodyでデモアプリを立ち上げる
今回使用するデモノードアプリ
韓国で実際に使われているマスクの在庫アプリをデプロイします。
事前準備
事前にデモアプリをgithubからCloneします。
$ git clone https://github.com/daihiraoka/kf94maskmap
$ cd kf94maskmap/
$ ls
LICENSE README.md api app.js images manifest.yml package-lock.json
package.json static
1.Nodejsをローカル環境にインストール
して立ち上げる。
node.jsのインストール
$ curl -sL https://rpm.nodesource.com/setup_13.x | sudo bash -
$ sudo yum install nodejs
$ npm install <- ノードの依存関係をインストールするために実行
added 58 packages from 49 contributors and audited 166 packages in 1.785s
found 0 vulnerabilities
$ npm audit fix <-監査の問題を修正するために実行します
up to date in 0.457s
fixed 0 of 0 vulnerabilities in 166 scanned packages
ローカル環境で実行する
$ npm start
> kf94maskmap@0.1.1 start /home/dai/ws/kf94maskmap
> node app.js
To view your app, open this link in your browser: http://localhost:3000
ブラウザでhttp://localhost:3000にアクセスしてアプリの起動を確認
2. Appsodyでデモアプリを立ち上げる
今回の範囲
事前準備(Appsodyのインストール)
Appsodyのドキュメントのインストール手順を利用してセットアップ
Installing Appsody
https://appsody.dev/docs/installing/installing-appsody
Appsodyのインストール
評価した環境 CentOS7
前提: Dockerがインストールされていること
1. dockerグループにAppsodyを実行するユーザーを追加
sudo usermod -aG docker <Linuxユーザー名>
2. Appsodyのrpmをダウンロード
curl –LO https://github.com/appsody/appsody/releases/download/0.5.9/appsody-0.5.9-1.x86_64.rpm
3. Appsodyのrpmをインストール
sudo yum install appsody-0.5.9-1.x86_64.rpm
Installing on RHEL
https://appsody.dev/docs/installing/rhel/
Appsody はじめの1歩
% appsody
The Appsody command-line tool (CLI) enables the rapid development of cloud native applications.
Complete documentation is available at https://appsody.dev
Usage:
appsody [command]
Available Commands:
build Build a local container image of your Appsody project.
completion Generate tab completions
debug Debug your Appsody project.
deploy Build and deploy your Appsody project to Kubernetes.
extract Extract your Appsody project to a local directory.
help Help about any command
init Initialize an Appsody project.
list List the available Appsody stacks.
operator Install or uninstall the Appsody operator from your Kubernetes cluster.
ps List the Appsody containers running in the local Docker environment.
repo Manage your Appsody repositories
run Run your Appsody project in a containerized development environment.
stack Tools to help create and test Appsody stacks
stop Stop the local, running Appsody container.
test Test your project in the local Appsody environment.
version Show the version of the Appsody CLI.
Flags:
--config string The absolute path to the Appsody config file. Use this option when you want to specify your own, customized config file (default '$HOME/.appsody/.appsody.yaml')
--dryrun Shows the commands that are called by this command, without running them.
-h, --help help for appsody
-v, --verbose Prints more detailed log output, to the console and to a file in $HOME/.appsody/logs
appsodyコマンドを実行すると次のような出力が表示されます。
Appsodyリポジトリー、スタック、テンプレート
appsody list コマンドを実行すると次のような出力が表示されます。
$ appsody list
REPO ID VERSION TEMPLATES DESCRIPTION
experimental go-modules 0.1.0 *default Runtime for Go using Go 1.11+ modules for dependencies
experimental java-spring-boot2-liberty 0.1.11 *default Spring Boot on Open Liberty & OpenJ9 using
Maven
experimental nodejs-functions 0.2.0 *simple Serverless runtime for Node.js functions
experimental quarkus 0.2.3 *default Quarkus runtime for running Java applications
experimental rocket 0.1.0 *simple Rocket web framework for Rust
experimental rust 0.1.6 *simple Runtime for Rust applications
experimental vertx 0.1.4 *default Eclipse Vert.x runtime for running Java applications
*incubator node-red 0.1.2 *simple Node-RED runtime for running flows
*incubator nodejs 0.3.5 *simple Runtime for Node.js applications
*incubator nodejs-express 0.4.6 scaffold, *simple Express web framework for Node.js
*incubator nodejs-loopback 0.2.3 *scaffold LoopBack 4 API Framework for Node.js
*incubator python-flask 0.2.2 *simple Flask web Framework for Python
*incubator starter 0.1.2 *simple Runnable starter stack, copy to create a new stack
*incubator swift 0.2.5 *simple Appsody runtime for Swift applications
REPO列はリポジトリー、IDの列はスタック名、VERSIONの列はスタックのバージョン、
TEMPLATEの列は使用可能なテンプレートのリストです。
Appsodyリポジトリー、スタック、テンプレート
appsody init incubator/nodejs simple
appsody init Reposity名/Stack名 Template名を実行して
アプリ作成用のスケルトンを作成
*コードを生成するのでコマンドを実行するフォルダは空である必要がある
*既存のソースコードを使用する場合は、Template名をnoneして実行する
Appsody Repository
incubator
java-spring-boot2 stack
simple
template
default
template
simple
template
nodejs stack
AppsodyのRepository、Stack、 Templateの関係を図で表すと。。。
Appsodyリポジトリー、スタック、テンプレート
リポジトリ、スタック、テンプレートの構成を少し深掘りしてみます。
まずはリポジトリーの一覧を出力します。
$ appsody repo list
NAME URL
*incubator https://github.com/appsody/stacks/releases/latest/download/incubator-index.yaml
appsodyhub030 https://github.com/appsody/stacks/releases/download/nodejs-express-v0.3.0/incubator-index.yaml
experimental https://github.com/appsody/stacks/releases/latest/download/experimental-index.yaml
incubatorリポジトリのincubator-index.yamlの構成
apiVersion: v2
stacks:
- id: nodejs
name: Node.js
version: 0.3.5
description: Runtime for Node.js applications
license: Apache-2.0
language: nodejs
maintainers:
- name: Sam Roberts
email: vieuxtech@gmail.com
github-id: sam-github
default-template: simple
src: https://github.com/appsody/stacks/releases/download/nodejs-v0.3.5/incubator.nodejs.v0.3.5.source.tar.gz
templates:
- id: simple
url: https://github.com/appsody/stacks/releases/download/nodejs-v0.3.5/incubator.nodejs.v0.3.5.templates.simple.tar.gz
requirements:
docker-version: '>= 17.09.0'
appsody-version: '>= 0.2.7'
image: docker.io/appsody/nodejs:0.3.5
- id: kitura
name: Kitura
version: 0.2.6
description: Runtime for Kitura applications
license: Apache-2.0
language: swift
maintainers:
- name: Ian Partridge
email: i.partridge@uk.ibm.com
github-id: ianpartridge
- name: David Jones
email: djones6@uk.ibm.com
github-id: djones6
default-template: default
src: https://github.com/appsody/stacks/releases/download/kitura-v0.2.6/incubator.kitura.v0.2.6.source.tar.gz
incubator.nodejs.v0.3.5.source.tar.gzの構成
$ ls
README.md stack.yaml templates
$ ls -l ./templates/
合計 0
drwxrwxr-x. 4 dai dai 95 3月 13 01:15 image
drwxrwxr-x. 3 dai dai 98 3月 13 01:15 simple
$ ls -l ./templates/image/
合計 16
-rw-rw-r--. 1 dai dai 982 3月 13 01:15 Dockerfile-stack
-rw-rw-r--. 1 dai dai 11356 3月 13 01:15 LICENSE
drwxrwxr-x. 2 dai dai 29 3月 28 00:42 config
drwxrwxr-x. 2 dai dai 65 3月 28 00:42 project
$ ls -l ./templates/image/config/
合計 4
-rw-rw-r--. 1 dai dai 272 3月 13 01:15 app-deploy.yaml
$ ls -l ./templates/image/project/
合計 8
-rw-rw-r--. 1 dai dai 879 3月 28 00:42 Dockerfile
-rw-rw-r--. 1 dai dai 335 3月 13 01:15 package.json
$ ls
README.md stack.yaml templates
$ cat stack.yaml
name: Node.js
version: 0.3.5
description: Runtime for Node.js applications
license: Apache-2.0
language: nodejs
maintainers:
- name: Sam Roberts
email: vieuxtech@gmail.com
github-id: sam-github
default-template: simple
requirements:
docker-version: ">= 17.09.0"
appsody-version: ">= 0.2.7"
incubator.nodejs.v0.3.5.templates.simple.tar.gz
の構成
$ ls -la
合計 20
drwxrwxr-x. 3 dai dai 126 3月 28 00:41 .
drwxrwxr-x. 4 dai dai 164 3月 28 02:16 ..
-rw-rw-r--. 1 dai dai 35 3月 13 01:16 .appsody-config.yaml
-rw-rw-r--. 1 dai dai 1316 3月 13 01:15 .gitignore
drwxrwxr-x. 2 dai dai 43 3月 13 01:15 .vscode
-rw-rw-r--. 1 dai dai 37 3月 13 01:15 app.js
-rw-rw-r--. 1 dai dai 76 3月 13 01:15 package-lock.json
-rw-rw-r--. 1 dai dai 358 3月 13 01:15 package.json
Appsodyで新しいプロジェクトを作成する
$ appsody init incubator/nodejs none
No stack requirements set. Skipping...
Running appsody init...
Downloading nodejs-express template project from https://github.com/appsody/stacks/releases/download/nodejs-
express-v0.3.0/incubator.nodejs-express.v0.3.0.templates.simple.tar.gz
Download complete. Do not unzip the template project. Only extracting .appsody-config.yaml file from
/home/dai/ws/kf94maskmap/nodejs-express.tar.gz
Setting up the development environment
Your Appsody project name has been set to kf94maskmap
Pulling docker image docker.io/appsody/nodejs-express:0.3
Running command: docker pull docker.io/appsody/nodejs-express:0.3
0.3: Pulling from appsody/nodejs-express
Digest: sha256:3558c07499dbb9df5bbccf417e57b82019eeb2d2995d7edea314903372f53568
Status: Image is up to date for appsody/nodejs-express:0.3
docker.io/appsody/nodejs-express:0.3
Running command: docker run --rm --entrypoint /bin/bash docker.io/appsody/nodejs-express:0.3 -c "find /project -type f
-name .appsody-init.sh"
Successfully initialized Appsody project with the appsodyhub030/nodejs-express stack and no template.
appsody initコマンドを使って新しいプロジェクトを作成します。
例えば、incubatorリポジトリのnodejsスタックを使って、
ソースコードは既にあるソースコード(kf94maskmap)を使うので templateは使わない
noneを指定して実行します。
Appsodyを使ってデモアプリを立ち上げる
$ appsody run
Running development environment...
Pulling docker image docker.io/appsody/nodejs:0.3
Running command: docker pull docker.io/appsody/nodejs:0.3
0.3: Pulling from appsody/nodejs
Digest: sha256:c0bc3aef3a2d5a631acfebc8fc33e2dfc230c37a0783d5ae2b6d61f93af1fe39
Status: Image is up to date for appsody/nodejs:0.3
docker.io/appsody/nodejs:0.3
Running command: docker run --rm -p 3000:3000 -p 9229:9229 --name kf94maskmap-dev -v /home/dai/ws/kf94maskmap/:/pro
[Container] Running APPSODY_PREP command: npm install
audited 166 packages in 1.01s
[Container] found 0 vulnerabilities
[Container]
Running command: npm start --node-options --require=appmetrics-dash/attach
[Container]
[Container] > kf94maskmap@0.1.1 start /project/user-app
[Container] > node app.js
[Container]
[Container] [Fri Mar 27 14:59:36 2020] com.ibm.diagnostics.healthcenter.loader INFO: Node Application Metrics 5.1.1.202003121
[Container] [Fri Mar 27 14:59:37 2020] com.ibm.diagnostics.healthcenter.mqtt INFO: Connecting to broker localhost:1883
[Container] To view your app, open this link in your browser: http://localhost:3000
appsody run コマンドを実行してデモアプリを起動
Appsodyを使ってデモアプリを立ち上げる
ブラウザでhttp://localhost:3000にアクセスしてアプリの起動を確認
Appsodyを使ってデモアプリを立ち上げる
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
0baf731a99a2 appsody/nodejs:0.3 "/.appsody/appsody-c…" 3 minutes ago Up 3 minutes 0.0.0.0:3000->3000/tcp, 0.0.0.0:9229->9229/tcp
docker psコマンドを実行するとDockerコンテナが起動していることが確認できる
デモ
まとめ
・ Appsodyを使うとゼロから始めるのではなく、nodejs、java、springなど特定のユースケースに
合わせて最適化されたスタックとテンプレートをベースにアプリケーションを作ることができます。
・Appsodyはベースとなるスタックとテンプレートは分離されているため開発者はソースコードを書く、
運用者・アーキテクトはスタックとテンプレートの管理を行うと、役割を分離されているので
DevOpsが推進しやすい思想になってます。
・Appsodyはコンテナを使った開発に必要なスキル、例えばdocker コマンドなど抽象化しているので
学習コストが低くなってます。今回説明していない appsody deployコマンドでローカル環境、
Kubernetes、OpenShiftと複数の環境にデプロイすることができます。
・Appsodyで作られたアプリケーションはコンテナ化されるので、従来の各環境に
ミドルウェアをインストールしていた時に比べると環境差異は少なくなるかほぼ無くなります。
環境依存が大きいサービスのアプリケーションの利用に向いてます。
・Appsody(Kabanero)は IBM が今、重要視している製品 IBM Cloud Pak for Applicationsの
コンポーメントの1つのOSSのプロジェクトです。
そのため、開発に勢いがあり、Appsodyに限らずTektonなどKabaneroを構成するコンポーネントは
どんどん機能追加されています。

More Related Content

PDF
Niigata.pm #1
PDF
はてなにおける継続的デプロイメントの現状と Docker の導入
PDF
Dockerと継続的インテグレーション
PDF
Docker Swarm入門
PDF
NDS#31
PDF
アプリ屋もDockerをドカドカ使おう ~ Docker入門
PDF
【dots. IT勉強会】開発環境のDocker化
PPTX
開発環境をVagrantからdockerに移行してみた
Niigata.pm #1
はてなにおける継続的デプロイメントの現状と Docker の導入
Dockerと継続的インテグレーション
Docker Swarm入門
NDS#31
アプリ屋もDockerをドカドカ使おう ~ Docker入門
【dots. IT勉強会】開発環境のDocker化
開発環境をVagrantからdockerに移行してみた

What's hot (20)

PPTX
Ansibleを使ってdockerコンテナをプロビジョニングする
PDF
はじめてのコンテナーDocker & Windows & Linux
PPTX
Docker & Kubernetes基礎
PDF
Dockerで遊んでみよっかー YAPC::Asia Tokyo 2014
PDF
ECS-CLI in Action
PDF
Drone.io のご紹介
PDF
Vagrant & Dockerによるイマドキの開発環境構築
PDF
2015-07-27 Docker Introduction 〜Dockerの基礎とユースケースに関する考察〜
PDF
Rancher command line interface
PDF
Re: 運用に自動化を求めるのは間違っているだろうか
PDF
静的サイトどこにする?
PDF
Circle ci and docker+serverspec
PDF
Dockerは2016年の秋現在どのような状況なのか~忙しい人の5分で分かるDocker~
PDF
cf-containers-broker を使ってローカル環境もサービスの恩恵をうける
PPTX
ネットワークエンジニアのための Puppet / Chef
PPTX
IBM Log Analysis with LogDNAを評価した話
PDF
BOSH-lite で 1VM Cloud Foundry
PDF
Dockerハンズオン
PDF
Apache Auroraの始めかた
Ansibleを使ってdockerコンテナをプロビジョニングする
はじめてのコンテナーDocker & Windows & Linux
Docker & Kubernetes基礎
Dockerで遊んでみよっかー YAPC::Asia Tokyo 2014
ECS-CLI in Action
Drone.io のご紹介
Vagrant & Dockerによるイマドキの開発環境構築
2015-07-27 Docker Introduction 〜Dockerの基礎とユースケースに関する考察〜
Rancher command line interface
Re: 運用に自動化を求めるのは間違っているだろうか
静的サイトどこにする?
Circle ci and docker+serverspec
Dockerは2016年の秋現在どのような状況なのか~忙しい人の5分で分かるDocker~
cf-containers-broker を使ってローカル環境もサービスの恩恵をうける
ネットワークエンジニアのための Puppet / Chef
IBM Log Analysis with LogDNAを評価した話
BOSH-lite で 1VM Cloud Foundry
Dockerハンズオン
Apache Auroraの始めかた
Ad

Similar to Appsody でnodejsのアプリを立ち上げよう! (20)

PPTX
13016 n分で作るtype scriptでnodejs
PDF
Dockerfileを改善するためのBest Practice 2019年版
PDF
Driverについて
PDF
ScalaでAndroidアプリ開発
PDF
SDLoader SeasarCon 2009 Whire
PDF
Ansible2.0と実用例
PDF
TDD勉強会キックオフ for Java
PDF
React Native GUIDE
PDF
scala-kaigi1-sbt
PDF
Netラボ2012年6月勉強会 マイクロソフトのオープンソース戦略を考える
PDF
Application Deployment on AWS
PDF
Railsの開発環境作るぞ
PDF
Play framework 2.0のちょっとした紹介
PDF
PhoneGap勉強会 - 実践編 -
PDF
Docker for Windows & Web Apps for Containers 実践活用技法
PPTX
App extensionでテストコードを書く
ODP
Nseg20120929
PDF
20131227_appium+rspec
PDF
成長を加速する minne の技術基盤戦略
PDF
Android Studioの魅力
13016 n分で作るtype scriptでnodejs
Dockerfileを改善するためのBest Practice 2019年版
Driverについて
ScalaでAndroidアプリ開発
SDLoader SeasarCon 2009 Whire
Ansible2.0と実用例
TDD勉強会キックオフ for Java
React Native GUIDE
scala-kaigi1-sbt
Netラボ2012年6月勉強会 マイクロソフトのオープンソース戦略を考える
Application Deployment on AWS
Railsの開発環境作るぞ
Play framework 2.0のちょっとした紹介
PhoneGap勉強会 - 実践編 -
Docker for Windows & Web Apps for Containers 実践活用技法
App extensionでテストコードを書く
Nseg20120929
20131227_appium+rspec
成長を加速する minne の技術基盤戦略
Android Studioの魅力
Ad

Appsody でnodejsのアプリを立ち上げよう!

Editor's Notes

  • #13: これらのコマンドの大部分は、Stackの操作用です:ビルド、デバッグ、実行停止、テスト、抽出、リスト。
  • #14: これらのコマンドの大部分は、Stackの操作用です:ビルド、デバッグ、実行停止、テスト、抽出、リスト。
  • #15: これらのコマンドの大部分は、Stackの操作用です:ビルド、デバッグ、実行停止、テスト、抽出、リスト。
  • #16: これらのコマンドの大部分は、Stackの操作用です:ビルド、デバッグ、実行停止、テスト、抽出、リスト。
  • #17: これらのコマンドの大部分は、Stackの操作用です:ビルド、デバッグ、実行停止、テスト、抽出、リスト。
  • #18: これらのコマンドの大部分は、Stackの操作用です:ビルド、デバッグ、実行停止、テスト、抽出、リスト。