Upgrade to Pro — share decks privately, control downloads, hide ads and more …

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

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

従来の環境にミドルウェアをインストールしてnodejsのアプリを立ち上げる場合とどんな違いがあるのでしょうか? @ Kabanero Meetup Tokyo

Daisuke Hiraoka

March 29, 2020

More Decks by Daisuke Hiraoka

Other Decks in Technology


  1. Daisuke Hiraoka(平岡 大祐) • IBM Champion for Cloud 2019-2020 •

    2013年からオンプレミスシステムからIBM Cloudへの移行を支援 • 2016年からIBM CloudでOpenShift/Kubernetes/Dockerの運用を開 始 Twitter: @HiraokaDaisuke Linkedin: @Daisuke Hiraoka
  2. 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 > [email protected] start /home/dai/ws/kf94maskmap > node app.js To view your app, open this link in your browser: http://localhost:3000
  3. 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/
  4. 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コマンドを実行すると次のような出力が表示されます。
  5. 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の列は使用可能なテンプレートのリストです。
  6. 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の関係を図で表すと。。。
  7. 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
  8. 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: [email protected] 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: [email protected] github-id: ianpartridge - name: David Jones email: [email protected] 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
  9. 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: [email protected] github-id: sam-github default-template: simple requirements: docker-version: ">= 17.09.0" appsody-version: ">= 0.2.7"
  10. 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
  11. 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を指定して実行します。
  12. 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] > [email protected] 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 [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 コマンドを実行してデモアプリを起動
  13. 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>3000/tcp,>9229/tcp docker psコマンドを実行するとDockerコンテナが起動していることが確認できる
  14. まとめ ・ 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を構成するコンポーネントは どんどん機能追加されています。