【OpenShift】コンテナイメージのビルド方法について
0.はじめに
Openshift入門者向けに、「OpenShift環境におけるコンテナイメージのビルド方法」について解説します。
本記事をお読みいただくと、以下を知ることができます。
- コンテナイメージのビルド全体像
- ベースイメージの取得について
- コンテナイメージのビルド方法について
では、次の章から具体的な解説を進めます!
1.コンテナイメージのビルド全体像
まず、コンテナイメージのビルド全体像を簡単に解説します。
- ①:ベースイメージの取得
- ②:ソースコードをコンパイルしアーティファクトを作成
- ③:アーティファクトとベースイメージを組み合わせて、アプリケーションコンテナイメージを作成
- ④:アプリケーションコンテナイメージを、OpenShiftにデプロイできるようにするため、コンテナレジストリへ格納
②と④については、特段説明する内容がないため、本記事では①と③を取り扱います。
次章で、「①:ベースイメージの取得」について解説します。
2.ベースイメージの取得について
アプリケーションを格納したコンテナイメージをビルドするには、ベースイメージを事前に取得する必要があります。
DockerHubなどで公開されているコンテナイメージを利用することもできますが、信頼することのできない野良コンテナイメージの利用はリスクなので、RedHatが認定しているコンテナイメージを利用しましょう。
RedHatが提供しているコンテナイメージは以下2種類となります。
種類 | 説明 |
---|---|
Red Hat Ecosystem Catalog | RedHatおよびRedHat環境で利用することが前提の認定さたサードパーティ制のコンテナイメージが公開されている。再配布不可。 |
UBI(Universal Base Image) | RHEL7/8をベースとした、無償で入手・改変・再配布が可能なコンテナイメージとRPMパッケージ群。 |
次章で、「コンテナイメージのビルド方法」について解説します。
3.コンテナイメージのビルド方法について
ベースイメージを取得できたら、次はアプリケーションを格納したコンテナイメージ(アプリケーションコンテナイメージ)をビルドしていきます。
OpenShiftでアプリケーションコンテナイメージを作成するときに必要になるBuildConfigについて説明していきます。
3.1.BuildConfig
BuildConfigとは、OpenShift独自のAPIリソースの1つであり、ビルドプロセス全体を定義するオブジェクトです。
BuildConfigでは、以下4種類のビルド戦略を選択できます。
ビルド戦略 | 内容 |
---|---|
Docker | Dockerfileをビルドすることでコンテナイメージを作成 |
S2I(Source-to-Image) | アプリケーションのソースコードのビルドからコンテナイメージの作成まで一貫したプロセスを提供 |
Pipeline | パイプラインの定義に従いコンテナイメージを作成(パイプラインの定義次第でデプロイまで自動化可能) |
Custom | ビルドプロセス全体を担当するビルダーイメージを指定し、指定したビルダーイメージにおいてコンテナイメージを作成 |
ビルド戦略を選択するには、現状の開発プロセス、ビルドサーバの有無、ビルドサーバによって自動化されている範囲などにより、適切なビルド戦略を選択しましょう。
次項から、それぞれのビルド戦略を解説していきます。
3.2.Dockerビルド
Dockerビルドでは、Gitリポジトリやローカルから取得したDockerfileを用いて、docker build
コマンドを実行することでコンテナイメージを作成します。
- Dockerビルドを実行すると、ビルド用のコンテナが起動し、GitリポジトリからDockerfileとコンテナイメージに必要なアーティファクトを取得
- ビルド用のコンテナにて
docker build
コマンドが実行され、コンテナレジストリに格納されたベースイメージを取得し、アプリケーションコンテナイメージが作成される - 作成されたコンテナイメージは、OpenShift上にコンテナイメージをデプロイできるようにするため、コンテナレジストリに格納
3.3.S2I(Source-to-Image)ビルド
S2I(Source-to-Image)ビルドでは、Gitリポジトリに格納されたソースコードを取得し、アプリケーションコンテナイメージの作成まで一貫したプロセスを提供します。
- ビルダーイメージからビルド用のコンテナが起動し、Gitリポジトリに格納されたソースコードを取得
- ビルダーイメージに格納されたS2Iスクリプトが実行され、ソースコードのビルドが行われる
- 引き続き、S2Iスクリプトにより、コンテナレジストリに格納されたベースイメージが取得され、ソースコードをビルドして作成されたアーティファクトとベースイメージにより、アプリケーションコンテナイメージが作成される
- 作成されたコンテナイメージは、OpenShift上にコンテナイメージをデプロイできるようにするため、コンテナレジストリに格納
3.4.Pipelineビルド
Pipelineビルドでは、Jenkinsパイプラインプラグインで利用するJenkinsパイプラインを定義できます。
GitリポジトリやBuildConfigのインラインに定義されたJenkinsfileの定義内容をもとに、Jenkinsコンテナ内でJenkinsパイプラインが実行されます。
4.おわりに
今回は、OpenShift環境でのデータを保持する仕組みを理解するために、以下を学びました。
- コンテナイメージのビルド全体像(アーティファクトとベースイメージを組み合わせて、アプリケーションコンテナイメージを作成)
- ベースイメージの取得について(野良コンテナイメージではなく、公式コンテナイメージを利用する)
- コンテナイメージのビルド方法について(最適なビルド戦略を選択しビルド方法を構築する)
今後もOpenShiftについて学習&解説していきます。
おわり!
Discussion