【文献】
内田 誠悟,ビルド環境の構築とDockerイメージのビルド 本番運用を見据えたイメージの作り方,WEB+DB PRESS,日本,技術評論社,2015年05月25日,第86巻,pp.99-105.
【文献】
村井 和夫,C&C++コンパイラ/リンカ/アセンブラ/デバッガ… 全部タダでMyパソコンに! ARM用LLVM&GCC開発環境の構築,Interface,日本,CQ出版株式会社,2015年03月01日,第41巻,第3号,pp.57-64.
【文献】
中村 憲一,組み込みLinux活用技法入門:3 クロス環境での構築手法を中心とした組み込みLinuxカーネル構築の実際,Interface,日本,CQ出版株式会社,2002年03月01日,第28巻,第3号,pp.29-38.
【文献】
安田 幸弘,一度は作ってみたい! 俺流Linux[前編],Linux WORLD,日本,(株)IDGジャパン,2006年09月01日,第5巻,第9号,pp.63-94.
【文献】
菊間 一宏 他,大規模通信ソフト開発環境へのOSSツール適用の評価,電子情報通信学会技術研究報告,日本,一般社団法人電子情報通信学会,2016年11月17日,第116巻,第322号,pp.61-66.
(58)【調査した分野】(Int.Cl.,DB名)
【発明の概要】
【発明が解決しようとする課題】
【0006】
コンテナ型仮想化を用いた業務システムにおいてアプリケーションを最新の状態で動作させるためには、アプリケーションの更新が必要である。その場合、更新内容をコンテナイメージに反映し、更新されたコンテナイメージを実行環境にデプロイする必要がある。上記において、コンテナイメージとは、アプリケーションをコンテナ上で動作させるために必要なファイルを一纏めにしたイメージファイルのことである。また、デプロイは、ソフトウェアシステムを利用可能にする活動全般のことを指す。
【0007】
しかしながら、コンテナイメージの作成には手間が掛かり、かつそのビルド(たとえば、コンパイル/リンク)には時間が掛かる場合がある。
【0008】
また、コンテナイメージでは、アプリケーションの更新に伴う実行環境へのデプロイの度に、これまでのファイルシステムの差分情報(ソースファイルの差分ファイル)がレイヤとして蓄積されている。従って、アプリケーションの更新を繰り返す度に、デプロイ完了までの時間が次第に増大していく虞がある。時間の増大を回避するため、業務システムの運用者自身による定期的なメンテナンス作業(コンテナイメージの整理)が実施されているが、これは運用者にとってかなりの手間となる。
【0009】
すなわち、コンテナ型仮想化技術を用いて構築される業務システムの開発において、一般的なオンプレミス環境(自社運用環境)での業務システムの開発に比べ、アプリケーションの開発および運用(DevOps)を効率的に実施するための仕組みがあまり提案されていないのが実情である。
【0010】
本発明は、上記課題を解決するためになされたものであり、コンテナ型仮想化技術を用いて構築される業務システムにおけるアプリケーションの開発および運用を効率化させることが可能な技術を提供することを目的とする。
【課題を解決するための手段】
【0011】
本発明のアプリケーション実行装置は、コンテナ型仮想化技術を用いて構築される業務システムに含まれるアプリケーション実行装置であって、コンテナ上で動作するアプリケーションを定義するコンテナ定義ファイルの更新を検出する更新検出手段と、更新が検出された場合、前記コンテナ定義ファイルをビルドすることにより生成されるコンテナイメージのデータ量を軽減させるために、前記コンテナ定義ファイルおよび前記コンテナイメージの各内容を変更する内容変更手段と、を備える。
【0012】
本発明のアプリケーション実行方法は、コンテナ型仮想化技術を用いて構築される業務システムに含まれるアプリケーション実行装置におけるアプリケーション実行方法であって、コンテナ上で動作するアプリケーションを定義するコンテナ定義ファイルの更新を検出し、更新が検出された場合、前記コンテナ定義ファイルをビルドすることにより生成されるコンテナイメージのデータ量を軽減させるために、前記コンテナ定義ファイルおよび前記コンテナイメージの各内容を変更することを特徴とする。
【0013】
本発明の
プログラムは、コンテナ型仮想化技術を用いて構築される業務システムに含まれるアプリケーション実行装置のコンピュータに、コンテナ上で動作するアプリケーションを定義するコンテナ定義ファイルの更新を検出する更新検出処理と、更新が検出された場合、前記コンテナ定義ファイルをビルドすることにより生成されるコンテナイメージのデータ量を軽減させるために、前記コンテナ定義ファイルおよび前記コンテナイメージの各内容を変更する内容変更処理と、を
実行させる。
【発明の効果】
【0014】
本発明によれば、コンテナ型仮想化技術を用いて構築される業務システムにおけるアプリケーションの開発および運用を効率化させることができる。
【発明を実施するための形態】
【0016】
[第1の実施形態]
図1は、本発明の第1の実施形態に係るアプリケーション実行装置500の構成例を示すブロック図である。
【0017】
アプリケーション実行装置500は、コンテナ型仮想化技術を用いて構築される業務システム(
図1において不図示)に含まれる。コンテナおよびコンテナ型仮想化技術については、[背景技術]にて説明済みである。
【0018】
アプリケーション実行装置500は、更新検出部501(更新検出手段および更新検出処理の一例)と、内容変更部502(内容変更手段および内容変更処理の一例)と、を備える。
【0019】
更新検出部501は、コンテナ上で動作するアプリケーションを定義するコンテナ定義ファイルの更新を検出する。内容変更部502は、更新が検出された場合、コンテナ定義ファイルをビルドすることにより生成されるコンテナイメージのデータ量を軽減させるために、コンテナ定義ファイルおよびコンテナイメージの各内容を変更する。
【0020】
アプリケーション実行装置500は、例えば、IC(Integrated Circuit)やFPGA(Field Programmable Gate Array)等の電子回路で構成されてもよい。あるいは、アプリケーション実行装置500は、コンピュータ(たとえば、CPU(Central Processing Unit))がメモリに記憶されたプログラムを実行する構成であってもよい。もちろん、アプリケーション実行装置500は、電子回路とコンピュータの組み合わせにて構成されてもよい。
【0021】
図2は、
図1に示すアプリケーション実行装置500の動作例(アプリケーション実行方法)を説明するためのフローチャートである。
【0022】
更新検出部501は、コンテナ上で動作するアプリケーションを定義するコンテナ定義ファイルの更新を検出する(ステップS100)。
【0023】
更新が検出された場合、内容変更部502は、コンテナイメージのデータ量を軽減させるために、コンテナ定義ファイルおよびコンテナイメージの各内容を変更する(ステップS101)。
【0024】
なお、アプリケーション実行装置500の詳細な構成および動作については、第2の実施形態にて説明する。
【0025】
以上説明した第1の実施形態によれば、コンテナへのアプリケーションの反映に必要なコンテナ定義ファイルの作成や更新の度に発生する、ビルドからコンテナへのデプロイまでの作業のすべてはアプリケーション実行装置500にて自動的に実行される。従って、更新に費やされる時間の増大を回避するために、業務システムの運用者自身によって定期的に実行されるメンテナンス作業を不要とすることができる。
【0026】
さらに、第1の実施形態では、コンテナイメージを軽量化させるための処理がアプリケーション実行装置500によって自動的に実行されるので、コンテナに対するアプリケーションの更新に費やされる時間を短縮することができる。
【0027】
すなわち、以上説明した第1の実施形態によれば、コンテナ型仮想化技術を用いて構築される業務システムにおけるアプリケーションの開発および運用を効率化させることができる。
[第2の実施形態]
(構成の説明)
図3は、本発明の第2の実施形態に係る業務システム100の構成例を示すブロック図である。業務システム100は、アプリケーション実行装置1と、データストレージ200と、を備える。
【0028】
アプリケーション実行装置1は、
図1に示すアプリケーション実行装置500を基本とする構成を含み、少なくとも1つのアプリケーションを、コンテナ型仮想化技術を用いて実行する。アプリケーションで実行される業務は、例えば、商品需要予測、販売価格予測、会計管理業務、顧客管理業務、商品管理業務、生産管理業務、または給与管理業務である。もちろん、アプリケーションが実行する業務は、上記に限定されない。また、アプリケーション実行装置1は、物理マシンおよび仮想マシンのどちらであってもよい。
【0029】
アプリケーション実行装置1は、更新検出部10と、コンテナイメージ生成部20と、コンテナイメージ管理部30と、コンテナ管理部40と、記憶部50と、少なくとも1つのコンテナ60と、を備える。更新検出部10は、
図1の更新検出部501の構成を含む。また、コンテナイメージ生成部20とコンテナイメージ管理部30とコンテナ管理部40とをまとめたものは、
図1の内容変更部502の具体例に対応する。
【0030】
更新検出部10は、コンテナ60上で動作するアプリケーションを定義するコンテナ定義ファイルの更新を検出する。コンテナ定義ファイルの更新が検出された場合、更新検出部10は、コンテナイメージ生成部20に対して、更新されたコンテナ定義ファイルを用いてコンテナイメージを更新するよう指示する。
【0031】
コンテナイメージ生成部20およびコンテナ管理部40の詳細については後述する。
【0032】
コンテナイメージ管理部30は、コンテナイメージをリポジトリ形式で管理するとともに、コンテナイメージの更新を通知する。
【0033】
記憶部50は、アプリケーション実行装置1内で動作する各処理部が出力したファイルやイメージを保存する。
【0034】
コンテナ60は、少なくとも1つ設けられ、割り当てられた所定のアプリケーションを実行する。
【0035】
データストレージ200は、アプリケーションが使用する各種のファイルやデータを格納する。たとえば、データストレージ200は、コンテナ定義ファイルを格納する。
【0036】
図4は、
図3に示されるコンテナイメージ生成部20の構成例を示すブロック図である。コンテナイメージ生成部20は、
図4に示されるように、ビルド実行部21と、ビルド時間計測部22と、コンテナ定義ファイル解析部23と、コンテナ定義ファイル書替部24と、コンテナイメージ書替部25と、を備える。
【0037】
ビルド実行部21は、コンテナ定義ファイルをビルドする。ビルド時間計測部22は、ビルドに費やされた処理時間を計測する。コンテナ定義ファイル解析部23は、更新が検知されたコンテナ定義ファイルの内容を解析する。コンテナ定義ファイル書替部24は、更新されたコンテナ定義ファイルの内容を変更する。コンテナイメージ書替部25は、ビルドを実行するときにコンテナイメージの構成(たとえば、レイヤ構造)を再構築する。
【0038】
図5は、
図3に示されるコンテナ管理部40の構成例を説明するブロック図である。コンテナ管理部40は、リソース制御部41と、上限時間超過判定部42と、を備える。
【0039】
リソース制御部41は、コンテナの起動に必要なリソースを制御する。上限時間超過判定部42は、全体の処理時間(後述)が、予め決定された上限時間(後述)を超えるか否かを判定する。
【0040】
なお、
図3および
図4における各部の接続はあくまで一例である。
(動作の説明)
以下、本実施形態の業務システム100におけるデプロイ環境の更新動作について説明する。
【0041】
なお、以下の説明において、コンテナ型仮想化の一例である、例えば、Docker(登録商標)が使用される場合を想定している。また、デプロイ対象のシステム構成は、RPM(Red Hat package managerまたはRPM Package Manager)などの一般的なパッケージで構成されるものとして説明する。さらに、以下の動作が実行される前に、業務システム100の運用者により、予め、デプロイ環境が更新されるまでの上限時間が設定されているものとする。上限時間は、例えば、業務システム100に要求される性能に基づいて決定される。上限時間は、例えば、記憶部50に記憶される。
【0042】
図6は、
図3に示されるアプリケーション実行装置1の第1の動作例(アプリケーション実行方法)を説明するための図であり、詳細には、実行環境が構築されるまでの動作を説明するフローチャートである。
【0043】
更新検出部10は、データストレージ200に格納されているいずれかのコンテナ定義ファイルが更新されたか否かを検出する(ステップS1)。更新が検出されない場合(ステップS1にてNo)、ステップS1の処理が再度実行される。
【0044】
更新が検知された場合(ステップS1のYes)、更新検出部10は、コンテナイメージ生成部20に対して、ビルド(更新が検知されたコンテナ定義ファイルを用いてコンテナイメージを更新する処理)の実行を指示する。
【0045】
コンテナイメージ生成部20のコンテナ定義ファイル解析部23は、更新検出部10からの指示に応じて、更新が検知されたコンテナ定義ファイルを解析し、ビルド命令(たとえば、make、またはrpmbuild)を特定する(ステップS2)。
【0046】
コンテナイメージ生成部20のコンテナ定義ファイル書替部24は、データストレージ200内の、更新されたコンテナ定義ファイルの内容を変更する(ステップS3)。ここで、ステップS2で特定されたビルド命令に記述されたソースファイルは、デプロイ環境の更新によって実行環境が構築されるまで(すなわち、ビルド命令によりビルドが完了するまで)のいわば中間ファイルであり、実行環境の構築後は不要となるファイルである。そこで、ステップS3において、コンテナ定義ファイル書替部24は、当該ビルド命令の実行時に使用されるソースファイルをビルド命令の実行完了後に削除するための削除命令を、更新が検知されたコンテナ定義ファイルに書き加える。
【0047】
コンテナイメージ生成部20のビルド実行部21は、このように削除命令の追加によって書き替えられたコンテナ定義ファイルのビルドを、ステップS2で特定されたビルド命令に従って実行する(ステップS4)。すなわち、ビルド実行部21は、コンテナイメージ書替部25に指示し、コンテナイメージ書替部25は、データストレージ200に格納されたコンテナイメージの構成、たとえば、レイヤ構造を再構築(または、更新とも言う)する。
【0048】
コンテナ定義ファイルのビルドを実行する際、コンテナイメージ生成部20のビルド時間計測部22は、上記ビルドの処理時間であるビルド時間を計測する(ステップS5)。計測されたビルド時間は、例えば、記憶部50に格納される。更新検出部10は、ビルドの実行により更新されたコンテナイメージをコンテナイメージ管理部30に格納する。コンテナイメージ管理部30は、コンテナ管理部40に対して、コンテナイメージが更新された旨の更新通知を送信する(ステップS6)。
【0049】
図7は、ソースファイルを削除するためにコンテナ定義ファイル中のビルドの実行ステップを書き換える処理(ステップS3の処理)を説明するための図である。
図7に示すように、ステップS3で変更後の命令行には、ソースファイル(/xxx/yyy/src)を削除するための「rm」コマンドが追加される。rmコマンドを追加することで、ソースファイルがコンテナイメージに追加されるのが禁止される。
【0050】
図8は、ソースファイルの削除によりコンテナイメージが軽量化される様子を示す図である。
図8から諒解されるように、
図6に示すフローの実行により、Layer3において、ソースファイル(差分ファイル)はコンテナイメージ管理部30に格納されず、実行環境へのデプロイに必要なファイル(aaa.rpm)のみが格納されるようになる。
【0051】
図9は、
図3に示されるアプリケーション実行装置1の第2の動作例(アプリケーション実行方法)を説明するための図であり、詳細には、コンテナ起動時の動作を説明するフローチャートである。
図9のフローチャートに示される処理は、通常、
図6のフローチャートに示される処理が完了した後に実行される。
【0052】
図5に示すコンテナ管理部40のリソース制御部41は、コンテナイメージ管理部30からの更新通知を受信する(ステップS10)。リソース制御部41は、稼働中のコンテナを順次停止させ、更新された新しいコンテナイメージをコンテナイメージ管理部30から取得してコンテナ60を起動する(ステップS11)。
【0053】
コンテナ管理部40の上限時間超過判定部42は、コンテナの起動時間を計測する(ステップS12)。計測した起動時間は、例えば、記憶部50に格納される。上限時間超過判定部42は、起動時間と計測済みのビルド時間(
図4のステップS5参照)とを用いて、コンテナ定義ファイルが更新されてからその更新についてのデプロイが完了するまでの全体時間を算出する(ステップS13)。
【0054】
上限時間超過判定部42は、全体の処理時間が、予め決定された上限時間を超えるか否かを判定する(ステップS14)。全体の処理時間が上限時間を超えない場合(ステップS14のNo)、本フローは終了する。
【0055】
上限時間を超える場合(ステップS14のYes)、コンテナイメージ書替部25は、コンテナイメージ管理部30に格納されるコンテナイメージに含まれるレイヤ構造を再構築する(ステップS15)。具体的には、
図10に示されるように、コンテナイメージ書替部25は、古いレイヤ構造(
図10のLayer1〜3)を一旦取り払うとともにメタデータを排除することにより、複数のレイヤ(Layer1〜3)を1つのレイヤ(Layer1)に統合する。メタデータとは、あるデータそのものではなく、そのデータを表す属性や関連する情報を記述したデータのことである。
図10には、メタデータが排除されることにより軽量化し、且つ1つに纏められたLayer1が示されている。
(効果の説明)
以上説明した第2の実施形態によれば、コンテナへのアプリケーションの反映に必要なコンテナ定義ファイルの作成や更新の度に発生する、ビルドからコンテナへのデプロイまでの作業のすべてはアプリケーション実行装置1にて自動的に実行される。従って、更新に費やされる時間の増大を回避するために、業務システムの運用者自身によって定期的に実行されるメンテナンス作業を不要とすることができる。
【0056】
さらに、第2の実施形態では、コンテナイメージを軽量化させるための様々な処理が、アプリケーション実行装置1によって自動的に実行されるので、コンテナに対するアプリケーションの更新に費やされる時間を短縮することができる。様々な処理とは、例えば、中間ファイルであるソースファイルを削除するための削除命令を追加する処理や、メタデータを排除しレイヤを1つに統合する処理である。
【0057】
すなわち、以上説明した第2の実施形態によれば、コンテナ型仮想化技術を用いて構築される業務システム100におけるアプリケーションの開発および運用を効率化させることができる。
[第3の実施形態]
図11は、本発明の第3の実施形態に係る業務システム550の構成例を示すブロック図である。業務システム550は、マスタとして動作するマスタ側アプリケーション実行装置560と、スレーブとして動作するスレーブ側アプリケーション実行装置570と、を備える。
【0058】
マスタ側アプリケーション実行装置560とスレーブ側アプリケーション実行装置570とは、インターネット等のネットワーク580を介して接続される。
【0059】
マスタ側アプリケーション実行装置560およびスレーブ側アプリケーション実行装置570は、例えば、第1の実施形態および第2の実施形態のいずれか一方のアプリケーション実行装置とすることができる。
【0060】
以上説明した第3の実施形態のように、アプリケーション実行装置を分散配置することにより、アプリケーションの開発および運用をより一層効率的に実施することが可能となる。
[第4の実施形態]
図12は、本発明の第4の実施形態に係るアプリケーション実行装置600の構成例を示すブロック図であり、詳細には、
図1に示すアプリケーション実行装置500、または
図3に示すアプリケーション実行装置1を、コンピュータによって実現したアプリケーション実行装置600のブロック図である。
【0061】
アプリケーション実行装置600は、記憶装置602と、プロセッサ等を含む演算装置604(コンピュータ)と、を備える。記憶装置602は、コンピュータ読み取り可能な記録媒体であり、コンピュータプログラム650を記憶する。コンピュータプログラム650は、例えば、第1の実施形態で説明した動作や第2の実施形態で説明した動作を演算装置604に実行させるためのプログラムである。
【0062】
なお、演算装置604の例としては、例えば、プログラムを読み取り実行する、1つまたはそれ以上のCPUと、CPUが実行する命令を記憶するメモリを挙げることができる。また、コンピュータ読み取り可能な記録媒体は、例えば、非一時的な記憶装置である。非一時的な記憶装置の例としては、例えば、光ディスク、磁気ディスク、ROM(Read Only Memory)、不揮発性半導体メモリ等の可搬媒体、コンピュータシステムに内蔵されるハードディスクを挙げることができる。また、コンピュータ読み取り可能な記録媒体は、一時的な記憶装置であってもよい。一時的な記憶装置の例としては、例えば、インターネット等のネットワークや電話回線等の通信回線を介してプログラムを送信する場合の信号線、あるいは、コンピュータシステム内部の揮発性メモリを挙げることができる。
【0063】
以上説明した第4の実施形態によれば、第1および第2の実施形態と同様に、コンテナ型仮想化技術を用いて構築される業務システムにおけるアプリケーションの開発および運用を効率化させることができる。
【0064】
以上、各実施形態を用いて本発明を説明したが、本発明の技術的範囲は、上記各実施形態の記載に限定されない。上記各実施形態に多様な変更又は改良を加えることが可能であることは当業者にとって自明である。従って、そのような変更又は改良を加えた形態もまた本発明の技術的範囲に含まれることは説明するまでもない。また、以上説明した各実施形態において使用される、数値や各構成の名称等は例示的なものであり適宜変更可能である。
【0065】
この出願は、2018年 3月23日に出願された日本出願特願2018−055456を基礎とする優先権を主張し、その開示の全てをここに取り込む。