Solarisにはコンテナと呼ばれる仮想化技術があります。1台の物理サーバ上に、複数の仮想化サーバを構築することができます。この記事では、Solarisの仮想化についてご紹介します。

コンテナ

Solarisコンテナ は、1台の物理サーバ上に複数構成できる仮想サーバである。Solarisコンテナは SolarisゾーンとSolarisリソース管理の2つの機能から構成されている。

ゾーン

ゾーン とは、1台の物理サーバー上に複数の仮想的Solaris環境を実現する技術です。仮想的なSolaris環境は分離、独立しており、互いに影響を与えることなく動作します。

ゾーンには グローバルゾーンローカルゾーン の2種類があります。Solaris 10 をインストールした環境がグローバルゾーンとなります。グローバルゾーンは1台の物理サーバー上にひとつのみ存在します。グローバルゾーンの上に構築する仮想サーバーがローカルゾーンです。

グローバルゾーンはすべてのローカルゾーンに干渉することができますが、ローカルゾーンは他のゾーン(グローバルゾーンを含む)には、いっさい干渉できない隔離された環境です。

大域ゾーン

大域ゾーン は、システムのデフォルトのゾーンであり、システム全体の管理に使用される。大域ゾーンは1台の物理サーバー上にひとつのみ存在する。

大域ゾーンの名前とIDは常に決まっており、ゾーン名は global 、IDは 0 である。

非大域ゾーン

非大域ゾーンのインストールや管理、アンインストールは、大域ゾーンからのみ行うことができる。

非大域ゾーンにはルートディレクトリのパスが設定される。これは、大域ゾーンのルートディレクトリに対する相対パスである。

非大域ゾーンのルートファイルシステムモデルは2種類ある。

非大域ゾーンの状態は7種類ある。

非大域ゾーンの構成

システムに非大域ゾーンをインストールする前に、そのゾーンを構成する必要がある。

資源タイプの一覧を次に示す。

資源タイプ
資源タイプ 説明
ゾーン名 ゾーンの名前
zonepath ゾーンのルートのパス
autoboot ゾーンの自動起動
bootargs ゾーンのブート引数
pool 資源プールの関連付け
scheduling-class ゾーンのスケジューリングクラス
ip-type 排他的IPゾーン
fs ゾーンでマウントされるファイルシステム
inherit-pkg-dir 疎ルートゾーン
net ゾーンネットワークインタフェース
device ゾーンで構成されるデバイス
rctl ゾーン規模の資源制御の設定
attr 汎用属性

ip-type

ゾーンを排他的IPゾーンとして構成する場合は、 ip-type をexclusiveに設定する。

zonecfg:my-zone> set ip-type=exclusive

ゾーンを共有IPゾーンとして構成する場合は、 ip-type は設定しない。

inherit-pkg-dir

ゾーンを疎ルートゾーンとして構成する場合は、 inherit-pkg-dir を設定する。

zonecfg:my-zone> add inherit-pkg-dir
zonecfg:my-zone:inherit-pkg-dir> set dir=/opt/my-pkg
zonecfg:my-zone:inherit-pkg-dir> end

ゾーンを完全ルートゾーンとして構成する場合は、 inherit-pkg-dir は設定しない。

net

資源タイプnetには、3つのプロパティがある。

プロパティ
プロパティ 説明
physical 物理インタフェース
address IPアドレス
defrouter デフォルトのルータ

ゾーンを共有IPゾーンとして構成する場合は、物理インタフェースとIPアドレスを設定する。必要に応じて、デフォルトのルータを設定することもできる。

zonecfg:my-zone> add net
zonecfg:my-zone:net> set physical=hme0
zonecfg:my-zone:net> set address=192.168.0.1
zonecfg:my-zone:net> end

ゾーンを排他的IPゾーンとして構成する場合は、物理インタフェースだけを設定する。

zonecfg:my-zone> set ip-type=exclusive
zonecfg:my-zone> add net
zonecfg:my-zone:net> set physical=hme1
zonecfg:my-zone:net> end

非大域ゾーンのインストール

ゾーンをインストールするには、大域管理者になって、 zoneadm コマンドを実行する。

zoneadm -z ゾーン名 install

インストールが完了したら、 zoneadm コマンドを実行して、インストール済みのゾーンを一覧表示し、状態を確認する。

zoneadm list -iv

非大域ゾーンへのログイン

大域ゾーンから非大域ゾーンへのログイン

コンソールログイン
zlogin -C zonename

ゾーンを稼動状態にする必要はない。

ユーザーログイン
zlogin -l user zonename

リモートログイン

rlogintelnet などで、非大域ゾーンにリモートログインできる。

ゾーンへパッケージをインストール又はアンインストールする際の制約

非大域ゾーンにインストールされたソフトウェアと、大域ゾーンにインストールされたソフトウェアとの同期を維持するために、パッケージのインストールやアンインストールには制約がある。

大域ゾーンでのパッケージのインストール

パッケージが大域ゾーンにも、どの非大域ゾーンにもインストールされていない場合、パッケージを次の場所にインストールできる。

パッケージが大域ゾーンだけにインストールされている場合、すべての非大域ゾーンにパッケージをインストールできる。

パッケージが大域ゾーンと非大域ゾーンの一部だけにインストールされている場合、すべての非大域ゾーンにパッケージをインストールできる。このとき、非大域ゾーン内の既存のインスタンスは、インストールするバージョンに更新される。

操作 SUNW_PKG_THISZONE SUNW_PKG_ALLZONES 結果
pkgadd false false 大域ゾーンとすべての非大域ゾーンにパッケージをインストール
true 大域ゾーンとすべての非大域ゾーンにパッケージをインストール
true false 大域ゾーンだけにパッケージをインストール
true
pkgadd -G false false 大域ゾーンだけにパッケージをインストール
true
true false 大域ゾーンだけにパッケージをインストール
true

大域ゾーンでのパッケージのアンインストール

パッケージが大域ゾーンだけにインストールされている場合、大域ゾーンからパッケージをアンインストールできる。

パッケージが大域ゾーンと非大域ゾーンの一部だけにインストールされている場合、次の場所からパッケージをアンインストールできる。

パッケージが大域ゾーンとすべての非大域ゾーンにインストールされている場合、大域ゾーンとすべての非大域ゾーンからアンインストールできる。

非大域ゾーンでのパッケージのインストール

現在操作を行っている非大域ゾーンにパッケージがインストールされていない場合、その非大域ゾーンにパッケージをインストールできる。ただし、パッケージパラメータ SUNW_PKG_ALLZONEStrue の場合はインストールできない。

現在操作を行っている非大域ゾーンにパッケージが既にインストールされている場合、パッケージの既存のインスタンス上にパッケージをインストールできる。ただし、パッケージパラメータ SUNW_PKG_ALLZONEStrue の場合はインストールできない。

非大域ゾーンでのパッケージのアンインストール

現在操作を行っている非大域ゾーンにパッケージが既にインストールされている場合、その非大域ゾーンからパッケージをアンインストールできる。ただし、パッケージパラメータ SUNW_PKG_ALLZONEStrue の場合はアンインストールできない。

パッケージパラメータ

パッケージパラメータ
パッケージパラメータ 説明
SUNW_PKG_ALLZONES パッケージのゾーン範囲を定義する。
SUNW_PKG_HOLLOW パッケージがすべてのゾーンにインストールされ、かつすべてのゾーンで同一であることが要求される場合、そのパッケージをすべての非大域ゾーン内で可視にすべきかどうかを定義する。
SUNW_PKG_THISZONE パッケージパラメータSUNW_PKG_THISZONEは、パッケージを現在のゾーンだけにインストールする必要があるかどうかを定義する。
SUNW_PKG_ALLZONES

パッケージパラメータSUNW_PKG_ALLZONESは、パッケージのゾーン範囲を定義する。

説明
false(デフォルト)
  • パッケージをすべてのゾーンにインストールする必要はない
  • パッケージがすべてのゾーンで同一である必要はない
true
  • パッケージをすべてのゾーンにインストールする必要がある
  • パッケージがすべてのゾーンで同一である必要がある
SUNW_PKG_HOLLOW

パッケージパラメータSUNW_PKG_HOLLOWは、パッケージがすべてのゾーンにインストールされ、かつすべてのゾーンで同一であることが要求される場合、そのパッケージをすべての非大域ゾーン内で可視にすべきかどうかを定義する。

パッケージパラメータSUNW_PKG_ALLZONESがtrueに設定されている場合にのみ意味をもつ。

説明
false
(デフォルト)
  • すべての非大域ゾーンで可視でなければならない
true
  • すべての非大域ゾーンで可視であってはならない
SUNW_PKG_THISZONE

パッケージパラメータSUNW_PKG_THISZONEは、パッケージを現在のゾーンだけにインストールする必要があるかどうかを定義する。

説明
false
(デフォルト)
  • 非大域ゾーン内でpkgaddを実行する場合、パッケージは現在のゾーンだけにインストールされる。
  • 大域ゾーン内でpkgaddを実行する場合、パッケージは大域ゾーンとすべての非大域ゾーンにインストールされる。
true
  • パッケージは現在のゾーンにだけインストールされる