メインコンテンツまでスキップ
バージョン: 2.0.0

OptXの開発方法

はじめに

OptX は Newtroid 上で稼働するコンテナイメージです。 Newtroid では OptX を組み合わせてマイクロサービスアーキテクチャでシステムを構築、運用を行います。 このページでは OptX を開発し、Newtroid に登録し、実際に稼働させるまでの流れをチュートリアル形式で解説します。

まず初めに以下に CI/CD のアーキテクチャを記載します。

newtroid-cicd-architecture

newtroid プラットフォームは一貫性のあるライフサイクルの開発環境を提供します。 開発した OptX は Github でソースコードを管理し、Jenkins によって OptX レジストリに登録されます。 登録された OptX は newtroid 上から起動できるようになります。

OptXとは

newtroid-cicd-architecture

OptXはNewtroidで扱うコンテナイメージの単位です。 通常のコンテナイメージと画面から操作するための設定情報が記載されたoptx-conf.json で構成されます。

OptXの開発方法はDockerイメージを開発する手順と同じです。

optx-conf.jsonとは

optx-conf.jsonはNewtroid特有のファイルとなります。

optx-conf.jsonのサンプルを以下に示します。

{
"version": 1, // optx-conf.jsonのバージョン
"environments": ["API_KEY", "DB_PASSWORD"], // コンテナの起動時に設定可能な環境変数を定義するとGUIで設定可能になrます。
"io": [{
"input": {
"name": "rest",
"portInside": 3000,
"type": "http"
}],
"output": [{
"name": "db",
"type":"http"
}]
}
}

optx-conf.jsonの詳細については"OptXの登録方法"ページで詳しく解説しているのでそちらも合わせて参照ください。

OptX の開発の流れ

Step1: リポジトリの準備
OptXはコンテナイメージとoptx-conf.jsonで構成されます。 コンテナイメージを補完するためにレジストリが必要です。 レジストリはDockerHubなどのクラウドサービスを利用するか、自身でDockerRegistryをセルフホスティングする必要があります。 DockerHubは有料プランを使用すればプライベートなイメージも利用できます。AWSのECRなども利用可能です。 セルフホスティングの場合は無料ですが、レジストリの運用が必要になります。 用途に合わせて使用するレジストリは選定してください。

Step2: OptX の開発
OptXを開発します。OptXはコンテナイメージとしてレジストリに登録します。
開発にはDockerが必要です。
またOptXの設定ファイルoptx-conf.jsonを作成します。

Step3: OptX の登録とリリース
開発したOptXをNewtroidに登録します。この工程は 以下のような流れになります。

  • 3.1: NewtroidコンソールでOptX を新規作成する
  • 3.2: レジストリにコンテナイメージをアップロードする。
  • 3.3: optx-conf.jsonをNewtroidコンソールに登録する。 ここでは0から OptX を作成する流れを説明します。 OptX を開発する方法は、詳細な手順は順を追って次に解説していきます。 このチュートリアルでは例として、typescript のコンテナイメージを作成します。

以下より、具体的な手順を説明します。

予約された環境変数

リポジトリの準備

OptXのコンテナイメージはDockerレジストリに保管します。
NewtroidはDockerレジストリからコンテナイメージを起動します。
ここではいくつかのDockerレジストリの準備方法を紹介します。 いずれかの方法でDockerレジストリを用意してください。

方法①:プライベートレジストリを使用する

ステップ1: Dockerレジストリのセットアップ Dockerは公式のレジストリイメージを提供しています。これを使ってプライベートレジストリを簡単に立ち上げることができます。

1.1 Dockerレジストリコンテナの起動

Dockerレジストリの使用方法

Dockerレジストリをダウンロードし、起動して、イメージを登録するまでの手順です。

以下のコマンドを実行して、Dockerレジストリを起動します。

docker run -d -p 5000:5000 --name registry registry:2

これで、プライベートレジストリがhttp://localhost:5000で動作します。

ステップ2: Dockerイメージのプッシュとプル プライベートレジストリにイメージをプッシュして、そこからプルする方法を説明します。

2.1 イメージのタグ付け プライベートレジストリにプッシュする前に、イメージにタグを付ける必要があります。例えば、my-imageという名前のローカルイメージがあるとします。

docker tag my-image localhost:5000/my-image

2.2 イメージのプッシュ タグを付けたイメージをプライベートレジストリにプッシュします。

docker push localhost:5000/my-image

2.3 イメージのプル 別のホストまたは同じホストからプライベートレジストリからイメージをプルします。

docker pull localhost:5000/my-image

以上です。ここまででDockerレジストリをダウンロードし、構築、実際にイメージの登録(push)とダウンロード(pull)を しました。 例としてローカルに構築する手順を示しましたが、実際には組織内で共有できるサーバーに構築をしてください。

ソースコードはゼロから作成しても構いませんがテンプレートを容易してますので、まずはそちらを使用することをおすすめします。 以下のコマンドで typescript のテンプレートをダウンロードできます。

方法②:サービス(DockerHub等)を利用する

Dockerレジストリを準備するもう一つの方法はクラウドサービスを利用することです。
クラウドサービスのレジストリにはDockerHubのほか、AWSのECR、 Azure Container Registry (ACR)、 Google Container Registry (GCR) などがあります。

ここではDockerHubを使ってコンテナイメージを登録する手順を説明します。

ステップ1: Docker Hubにサインアップ/ログイン
まず、Docker Hubにサインアップするか、既にアカウントを持っている場合はログインします。

ステップ2: ローカルでDockerイメージをビルドする
DockerイメージをビルドするためのDockerfileが必要です。ここでは簡単な例として、Node.jsアプリケーションのイメージをビルドします。

2.1 Dockerfileの作成

# Use an official Node.js runtime as a parent image
FROM node:14

# Set the working directory
WORKDIR /usr/src/app

# Copy package.json and package-lock.json
COPY package*.json ./

# Install dependencies
RUN npm install

# Copy the rest of the application
COPY . .

# Expose the port the app runs on
EXPOSE 8080

# Define the command to run the app
CMD [ "node", "app.js" ]

2.2 イメージのビルド 次に、Dockerイメージをビルドします。

docker build -t my-node-app .

ステップ3: Docker Hubにログイン
Docker Hubにログインするために、以下のコマンドを使用します。

docker login

プロンプトが表示されたら、Docker Hubのユーザー名とパスワードを入力します。

ステップ4: イメージにタグを付ける
Docker Hubにプッシュするためには、イメージに正しいタグを付ける必要があります。タグの形式は、<Docker Hub ユーザー名>/<リポジトリ名>:<タグ>です。

docker tag my-node-app <Docker Hub ユーザー名>/my-node-app:latest

例えば、ユーザー名がmyusernameの場合、次のようになります。


docker tag my-node-app myusername/my-node-app:latest

ステップ5: イメージをDocker Hubにプッシュする

タグ付けしたイメージをDocker Hubにプッシュします。

docker push myusername/my-node-app:latest

これで、イメージがDocker Hubにプッシュされます。

ステップ6: Docker Hubからイメージをプルする

別のホストや環境で、Docker Hubからイメージをプルするには、以下のコマンドを使用します。

docker pull myusername/my-node-app:latest

プルしたイメージを実行するには、以下のコマンドを使用します。

docker run -p 8080:8080 myusername/my-node-app:latest

以上で、Docker Hubにイメージをプッシュし、そこからプルする基本的な手順が完了しました。

OptX の開発

Node.jsでウェブサーバーを作ります。 OptX として開発するのに特別なことはほとんど必要ありません。 通常、Docker イメージの開発と同様に行うことができます。 以下ので順ではNodeJSで簡単なWebサーバーのDockerイメージを作成する手順を説明します。

ステップ1: Node.jsアプリケーションの作成
まず、Node.jsアプリケーションのディレクトリを作成し、その中に必要なファイルを追加します。

1.1 プロジェクトディレクトリの作成

mkdir node-docker-sample
cd node-docker-sample

1.2 package.jsonの作成 以下の内容でpackage.jsonを作成します。

{
"name": "node-docker-sample",
"version": "1.0.0",
"description": "A simple Node.js web server running in Docker",
"main": "server.js",
"scripts": {
"start": "node server.js"
},
"dependencies": {
"express": "^4.17.1"
}
}

1.3 server.jsの作成 以下の内容でserver.jsを作成します。これはシンプルなExpressベースのWebサーバーです。


const express = require('express');
const app = express();
const port = 3000;

app.get('/', (req, res) => {
res.send('Hello, World!');
});

app.listen(port, () => {
console.log(`Server is running on http://localhost:${port}`);
});

1.4 依存関係のインストール プロジェクトディレクトリで依存関係をインストールします。

npm install

ステップ2: Dockerファイルの作成
次に、Node.jsアプリケーションをコンテナ化するためのDockerfileを作成します。

2.1 Dockerfileの作成
以下の内容でDockerfileを作成します。

# Use the official Node.js 14 image as the base image
FROM node:14

# Set the working directory inside the container
WORKDIR /usr/src/app

# Copy package.json and package-lock.json to the working directory
COPY package*.json ./

# Install the dependencies
RUN npm install

# Copy the rest of the application code to the working directory
COPY . .

# Expose the port the app runs on
EXPOSE 3000

# Define the command to run the application
CMD [ "npm", "start" ]

ステップ3: Dockerイメージのビルドと実行
3.1 Dockerイメージのビルド
以下のコマンドを実行して、Dockerイメージをビルドします。

docker build -t node-docker-sample .

3.2 Dockerコンテナの実行
以下のコマンドを実行して、ビルドしたイメージからコンテナを起動します。

docker run -p 3000:3000 node-docker-sample

このコマンドにより、Node.jsアプリケーションがDockerコンテナ内で実行され、ホストのポート3000でアクセス可能になります。

ステップ4: 動作確認
ブラウザを開いてhttp://localhost:3000にアクセスします。Hello, World!と表示されれば成功です。