OptXの開発方法
はじめに
OptX は Newtroid 上で稼働するコンテナイメージです。 Newtroid では OptX を組み合わせてマイクロサービスアーキテクチャでシステムを構築、運用を行います。 このページでは OptX を開発し、Newtroid に登録し、実際に稼働させるまでの流れをチュートリアル形式で解説します。
まず初めに以下に CI/CD のアーキテクチャを記載します。
newtroid プラットフォームは一貫性のあるライフサイクルの開発環境を提供します。 開発した OptX は Github でソースコードを管理し、Jenkins によって OptX レジストリに登録されます。 登録された OptX は newtroid 上から起動できるようになります。
OptXとは
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!と表示されれば成功です。