💽

【OpenShift】コンテナイメージのビルド方法について

2024/08/04に公開

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