第1章 Red Hat Container Development Kit について

Red Hat Container Development Kit (CDK) は、開発者が Red Hat Enterprise Linux プラットフォームでコンテナー化されたアプリケーションの開発およびテスト環境をすばやくかつ簡単にセットアップできる一連のツールです。Red Hat CDK は Microsoft Windows、Mac OS X、および Linux オペレーティングシステムで利用できるため、開発者は Red Hat Enterprise Linux エコシステムにデプロイするアプリケーションを作成する際に、それぞれが選択するプラットフォームを使用することができます。

Red Hat CDK は Red Hat Developers プログラムの一部です。これは、Red Hat ソリューションおよび製品を使用してローカルとクラウドの両方でアプリケーションを作成する開発者に対し、各種ツール、リソースおよびサポートを提供します。詳細情報を参照するには、またこのプログラムへの登録および参加を行うには、developers.redhat.com にアクセスしてください。

使用ガイドでは、Red Hat CDK を構成するそれぞれのコンポーネントについて説明し、次にそれらのコンポーネントの取得、インストールおよび設定方法を説明します。作成される環境を使用してコンテナーとの対話およびコンテナー化されたアプリケーションの開発を開始することができます。

サポートされるプラットフォーム (Microsoft Windows、Mac OS X、および Linux) のそれぞれに Red Hat CDK をセットアップするためのインストール方法の詳細は、『CDK Installation Guide』を参照してください。 Kubernetes または OpenShift を使用した複数コンテナーアプリケーションの開発およびコンテナーのオーケストレーションなどの詳細トピックを含む実際的な使用例については、『Container Development Guide』(CDK の GA に発行予定) を参照してください。

1.1. コンテナーについて

コンテナーは、オペレーティングシステムレベルの仮想化の形態です。コンテナーは共有されるホストシステムのカーネルをベースとし、複数のユーザー空間インスタンス (ソフトウェアコンテナー) を提供します。コンテナーは、ハードウェアレベルの仮想マシンよりも構築し、初期化するのが簡単なため、仮想環境を迅速にデプロイしたり、多数の仮想環境をデプロイしたりする必要がある場合に役立ちます。仮想ソフトウェアコンテナー内で実行されるアプリケーションはホストシステムから分離された状態に保たれます。

1.2. Red Hat CDK について

Red Hat CDK は、開発ワークステーションで使用するオペレーティングシステムの種類によらず、Red Hat Enterprise Linux のコンテナーの開発を可能にします。開発環境の核となるのは、Vagrant によって管理される Red Hat Enterprise Linux の仮想化インスタンスです。Vagrant は軽量で、ポータブルかつ一貫性のある開発環境を使用するためのオープンソースツールであり、インストール済みの Red Hat CDK ソフトウェアコンポーネントと共に事前に構築された Red Hat Enterprise Linux 仮想マシンを起動するために使用されます。Vagrant で使用するためにパッケージ化された仮想マシンは box と呼ばれています。

Red Hat CDK ソフトウェアコンポーネントをインストールすると、Docker を使用して Linux コンテナー開発に着手できます。Docker はソフトウェアコンテナー内でアプリケーションのデプロイメントを自動化するオープンソースプロジェクトです。Docker は、リソースの使用量を制御した状態でコンテナーを分離し、セキュアに保つための各種機能を持つ数多くの主要な Linux テクノロジーに基づいて構築されています。さらに Red Hat CDK は、コンテナー化されたアプリケーションの実際のデプロイメントおよびオーケストレーション向けに Kubernetes と PaaS (Platform-as-a-Service) 製品の OpenShift を提供します。OpenShift は、基礎となるサービスを維持し、必要に応じて実行中のアプリケーションをスケーリングするために使用できます。

以下は、Red Hat CDK をインストールすることによりコンテナー開発で利用できる一連のテクノロジーです。

レイヤーの種類テクノロジー

コンテナー

コンテナーで実行されるアプリケーション

コンテナー管理

Docker サービス

開発 VM

Red Hat Enterprise Linux Server 7

VM 管理

Vagrant

仮想化プロバイダー

Virtualbox または libvirt/KVM

ホストマシン OS

Microsoft Windows、Mac OS X、または Red Hat Enterprise Linux 7

1.3. Vagrant について

Vagrant は、各種の開発環境をパッケージ化し、配布するためのデファクト標準です。これらの開発環境は、 Windows、Mac OS X、および Linux 上で一般に使用される大半の仮想化プラットフォームを使って実行され、また OpenStack、Amazon Web Services (AWS) およびその他の環境のプラグインを使用してクラウドで実行されます。

Vagrant は、開発環境を記述するために Vagrantfile という単一設定ファイルを使用します。Vagrantfile と Vagrant box としてパッケージ化される仮想マシンイメージを使用すると、単一コマンドの vagrant up は、ネットワーク設定と、コード、データまたは設定の移動のためにホスト OS と共有されるフォルダーのサポートを含む一貫した開発環境を起動します。

Red Hat CDK には、コンテナーを簡単に開発できる環境を提供するために事前に設定された Red Hat Enterprise Linux システムを使用する Vagrant box が含まれます。提供される Vagrant box は、仮想化プラットフォームとして VirtualBox または KVM (および libvirt) のいずれかを使用してデプロイできます。さらに Red Hat CDK には、box 用にソフトウェアをインストールし、ソフトウェアリポジトリーを設定するための Vagrant のプロビジョニングに使用する数多くの Vagrantfile も含まれます。

vagrant ssh コマンドを使用して Vagrant box にログインします。ネットワーク設定および SSH キーの設定の詳細は Vagrant が自動的に処理します。

1.3.1. Vagrant 設定の概要

Vagrant のポータブルで再現可能な環境を作成し、配布する機能は、ターゲット環境を記述する単一ファイル (Vagrantfile) を使用して利用できます。Vagrantfile は、仮想マシンのイメージ、ネットワーク設定およびプロビジョニング手順などで必要なリソースを定義します。それぞれのターゲット環境には Vagrantfile を含む別々のディレクトリーが使用されます。

1.3.1.1. Vagrantfile の管理

Vagrant コマンドは特定の環境で動作しますが、Vagrant コマンドを使って環境の ID を指定するか (環境がすでに初期化されている場合)、またはこのコマンドを環境の Vagrantfile を含むディレクトリーで実行する必要があります。このディレクトリーは所定環境の「root」ディレクトリーを構成します。Vagrant は、この「root」ディレクトリーの .vagrant サブディレクトリーに環境の状態情報を保存します。

Red Hat CDK では、数多くのサンプル Vagrantfile が別々のディレクトリーに組み込まれています。各ディレクトリーには README ファイルがあります。ディレクトリーに移動して README および Vagrantfile ファイルを確認してから vagrant up コマンドで環境を起動して開始します。

注記

ファイルシステムパスで使用されるチルダ文字 (~) は、Mac OS X または Linux などの Unix ベースのオペレーティングシステムにあるユーザーのホームディレクトリーを表します。これは、Windows システムの %USERPROFILE%\.vagrant.d に対応します。

環境別の設定ディレクトリーおよび状態ディレクトリーのほかにも、Vagrant は ~/.vagrant.d ディレクトリーを使用し、所定ユーザーが実行するすべての Vagrant 環境に適用されるデータを保存します。Vagrant box が追加されるか、またはプラグインがインストールされると、それらは ~/.vagrant.d に追加されます。つまり、vagrant box add コマンドを実行すると、box の Vagrantfile はユーザー別の Vagrant ディレクトリー ~/.vagrant.d/boxes/ にインストールされます。このファイルはユーザーのホームディレクトリーに保存されるため、各ユーザーは完全に独立しており、他のユーザーがインストールした Vagrant box またはプラグインを見ることはできません。

注記

Vagrant にはシステム全体の設定という概念がないため、Vagrant を root (管理者) として実行する場合でも変更は root のホームディレクトリー内でしか行われず、これらの変更は通常のユーザーには表示されません。

ダウンロードするか、または構築する各 Vagrant box には、その box の基本的な設定を含むそれぞれの Vagrantfile があります。Vagrant box が追加されると、それに含まれている Vagrantfile はユーザー別の ~/.vagrant.d ディレクトリーにコピーされます。box の Vagrantfile の設定は環境別の Vagrantfile で無効にされる場合があります。

最後に、ユーザーの Vagrant 環境のすべてに利用できる設定用のユーザー別 Vagrantfile が ~/.vagrant.d にあります。このファイルはデフォルトでは作成されません。

1.3.2. Vagrant の同期フォルダー

box が起動すると、Vagrant は、Vagrantfile と同じディレクトリーにあるホストマシンのファイルを共有するか、またはこれを仮想マシン上の /vagrant ディレクトリーにコピーします。これは、コード、データおよび設定をホストマシンから Vagrant box に移動する際の便利な自動化メソッドです。

フォルダーの共有およびコピーを行うために利用できるメソッドは、rsync または NFS、あるいは VirtualBox 共有フォルダーなど多数あります。使用されるメソッドは、ホスト OS、仮想化プラットフォームおよびインストールされたソフトウェアなどの数多くの要因によって異なります。Vagrant は最初に rsync または VirtualBox 共有フォルダーの使用を試みます。それらが利用できない場合は、NFS にフォールバックします。rsync を使用すると、Vagrant はホストから Vagrant box へのオンデマンドの一方向のコピーのみを行います。Microsoft Windows では、rsync はサードパーティーのソースからインストールされる必要があります。

それぞれの共有フォルダーに使用される同期タイプは、Vagrantfile の共有フォルダーの定義に設定できます (config.vm.synced_folder オプション) 。共有フォルダーの定義は、Vagrant box に同梱される Vagrantfile に含まれている場合もあります。共有フォルダーを完全に無効にしたり、データ共有に使用されるメソッドを変更したりする場合には、この点に留意してください。

ファイルの双方向の同期が必要な場合、Red Hat Enterprise Linux については NFS が推奨されます。NFS をセットアップするには、『Red Hat Enterprise Linux 7 ストレージ管理ガイド』のNFS についての章を参照してください。NFS が利用可能にした後に、Vagrantfile で同期フォルダーのタイプを変更するか、または単に type 属性を config.vm.synced_folder オプションから削除します。