Solaris 11 Zone(コンテナ)作成と削除

ディスクフォーマットはZFSを前提にしています。
確認方法は以下の通りです。

ZFSの管理状況を確認する (zfs list / zpool status)

Solarisにおいて「ZFSであること」をより詳細に、構造的に確認するための専用コマンドです。

ZFSデータセットの一覧を表示
# zfs list

これでリストが表示されれば、それらはすべてZFSです。

物理ディスク(プール)の状態を表示
# zpool status

ZFSがどの物理ディスク(スライス)を使用して構成されているかを確認できます


1. Solaris Zone の構造と概念

Solarisをインストールした直後のOS環境が「親」であり、その中に「子」を作っていくイメージです。

  • Global Zone(グローバルゾーン): Solaris OSをインストールした本体そのもの。すべての物理リソースを管理する。
  • Non-global Zone(ノンプリミティブ・ゾーン): 今回作成したい「コンテナ環境」。グローバルゾーン上で分離された仮想OS空間。
  • 作成のメリット: アプリケーションごとにOS環境を隔離でき、パッチ適用や再起動の影響を限定できる。

2. 作成手順のまとめ(Native Zoneの場合)

グローバルゾーンにログインした状態で、以下のコマンドフローで作成します。

STEP 1: 構成定義 (zonecfg)

ゾーンの名前やネットワーク、リソースを定義します。

# zonecfg -z <ゾーン名>
> create                     # テンプレートから作成
> set zonepath=/zones/myzone # データの格納先を指定
> set autoboot=true          # 本体起動時に自動起動
> add anet                   # 仮想ネットワーク(VNIC)の追加
> commit                     # 設定の確定
> exit

2つ目のゾーンを作成する時などでadd anetからcommitするとエラーになる場合があります(zonecfg の「リソース編集モード(サブスコープ)」の中に閉じ込められている可能性があります。)。
解決方法
end と入力して、一度メインのスコープに戻ってから commit を実行してください。
zonecfg:new-zone:anet> end <– これでサブスコープを抜ける
zonecfg:new-zone> verify <– ここで実行
zonecfg:new-zone> commit <– ここで実行

STEP 2: インストール (zoneadm)

定義に基づいて、必要なパッケージをシステムに展開します。

# zoneadm -z <ゾーン名> install
  • 注意: 内部で pkg コマンドが動くため、グローバルゾーンがリポジトリ(インターネット等)に接続できる必要があります。
STEP 3: 起動と初期設定 (zlogin)

仮想マシンを初めて立ち上げる時と同じように、ホスト名やパスワードを設定します。

# zoneadm -z <ゾーン名> boot    # 起動
# zlogin -C <ゾーン名>          # コンソールログイン
  • コンソールで対話形式の初期設定(sysconfig)が始まります。
  • 終了後、~. でコンソールを抜けます。
  • -C オプションはコンソール接続です。
  • ここでシステム構成ウィザード(sysconfig)が始まります。
  • コンソールを抜ける方法: ~. (チルダとドット)を順に押します。

よく使う管理コマンド
操作コマンド
状態確認zoneadm list -cv
停止zoneadm -z myzone halt
削除 (アンインストール)zoneadm -z myzone uninstall
構成情報の削除zonecfg -z myzone delete
ログイン (通常)zlogin myzone

ノングローバルゾーンからグローバルゾーンの操作画面に戻るには、「どのようにしてノングローバルゾーンにログインしたか」によって方法が異なります。
もっとも一般的な2つのパターンを解説します。


1. コンソール接続 (zlogin -C) している場合

zlogin -C で接続している場合は、通常の exitlogout では抜けられません。Solarisコンソールの「エスケープ文字」を使います。

  • キー操作:~. (チルダ と ドット)
    1. Enter キーを一度押す(行頭にするため)
    2. ~ (チルダ) を入力
    3. . (ドット) を入力

これで接続が強制終了され、グローバルゾーンのプロンプトに戻ります。

注意: sshなどでグローバルゾーンに繋いでいる場合、~. を入力するとssh自体が切れてしまうことがあります。その場合は ~~. とチルダを2回打ってみてください。


2. 通常のログイン (zlogin) や SSH の場合

コンソールオプション(-C)をつけずに zlogin した際や、ゾーンに対して直接 ssh している場合は、通常のログアウトコマンドで戻れます。

  • コマンド: exit または logout
  • ショートカット: Ctrl + D

これを実行すると、そのセッションが終了し、接続元(グローバルゾーン)に戻ります。


ゾーンのクローン(コピー)手順
1. コピー元ゾーンの停止

コピー元のデータを確定させるため、一度ゾーンを停止させる必要があります。

# zoneadm -z myzone halt
2. コピー先の構成定義 (zonecfg)
新しいゾーンの定義(構成)作成

クローン先のゾーン名(newzone)の定義を作成します。既存の構成を流用するのが最も確実です。

  1. 既存の設定を書き出すBashzonecfg -z export > /tmp/newzone.cfg
  2. 設定ファイルを編集するvi /tmp/new-zone.cfg などで、以下の項目を新しいゾーン用に書き換えます。
    • zonepath: (例:/system/zones/new-zone
    • ネットワーク設定(IPアドレスやVNIC名など)
3.クローンの実行

準備が整ったら、zoneadm コマンドでクローンを実行します。

zoneadm -z newzone clone 

注: Solaris 11のZFSベースのクローンは、デフォルトで「ZFSスナップショット」を作成してクローンするため、ディスク容量をほとんど消費せず、一瞬で終わります。


4. 起動と初期設定

クローン直後のゾーンは、ホスト名やネットワーク設定がコピー元のまま(または未設定)になっています。

  1. ゾーンを起動する
    zoneadm -z newzone boot
  2. コンソールに接続してシステム設定を行う
    zlogin -C newzone
    初回起動時に、対話形式でホスト名、IPアドレス、タイムゾーン、パスワードなどの設定画面が表示されます。

5.クローン時の便利なオプション
-m copy オプション(完全コピー)

ZFSのスナップショット共有(リンク)を使わず、データを完全に独立してコピーしたい場合に使用します(時間はかかります)。

zoneadm -z newzone clone -m copy 
プロファイル(sysconfig)の適用

設定を対話形式ではなく、あらかじめ用意したxmlファイルで自動適用したい場合に便利です。

zoneadm -z newzone clone -c /path/to/profile.xml source-zone

運用上のヒント:ゴールドイメージの作成

実務では、「基本設定を済ませたマスターゾーン」を一つ作っておき、それを常に halt 状態で保持しておく運用がおすすめです。

  • マスターを更新する時だけ起動: パッチ適用や共通ツールのインストール。
  • 必要になったらクローン: マスターを元に clone して即座にデプロイ。
補足:コピー元のゾーンを止められない場合

もし本番稼働中のゾーンを止めずにコピーしたい場合は、zoneadm clone の際にスナップショットを明示的に指定する方法もありますが、基本的にはデータの整合性を保つため halt 状態からのクローンが推奨されます。


ゾーン(ノングローバルゾーン)の削除

1. ゾーンを停止する (halt)

稼働中のゾーンは削除できないため、まずは停止させます。

# zoneadm -z <ゾーン名> halt
  • zoneadm list -cv で状態が installed になっていることを確認してください。
2. ゾーンをアンインストールする (uninstall)

zonepath 内のファイルシステムやOSの実体データを削除します。この操作を行うとデータは復旧できないため、必要なデータがある場合は事前にバックアップを取ってください。

# zoneadm -z <ゾーン名> uninstall
  • 実行時に確認を求められますが、強制的に行いたい場合は -F オプションを付けます。
  • これで状態が configured(設定のみ存在)になります。
3. ゾーンの構成定義を削除する (delete)

最後に、zonecfg に保存されている管理情報を削除します。

# zonecfg -z <ゾーン名> delete
  • 実行時に確認を求められます。y を押すと完了です。
一括で削除する場合のコマンド例

テスト環境などで頻繁に作り直す場合は、以下のように繋げて実行することも可能です。

# zoneadm -z myzone halt
# zoneadm -z myzone uninstall -F
# zonecfg -z myzone delete -F

注意点:管理上の確認事項
  • ZFSデータセットの残り: zoneadm uninstall を実行すれば、通常はそのゾーン用に作成されたZFSデータセットも自動的に削除されます。念のため zfs list で不要なデータセットが残っていないか確認することをお勧めします。
  • 共有リソース: もしそのゾーンに対して、グローバルゾーンのディレクトリを lofs(ループバックファイルシステム)などでマウントしていた場合、それらの元のデータは削除されません。削除されるのはあくまで「ゾーン専用の領域」だけです。

ログインするゾーンを切り替える方法

基本的には「一度グローバルゾーンに戻ってから、別のゾーンへログインする」のがもっとも安全で確実な方法です。

別のゾーンへ切り替えてログインする手順

現在 zone-A にいるとして、zone-B に移りたい場合は以下の流れで行います。

ステップ1:現在のゾーンを抜ける

コンソール接続(-C)をしている場合は、下記のエスケープ文字を使います。

  • 操作: ~. (チルダ と ドット)を入力。
  • これでグローバルゾーンに戻ります。
ステップ2:別のゾーンへログインする

グローバルゾーンのプロンプトから、目的のゾーンへ入ります。

  • コマンド: zlogin <ゾーン名>
  • コンソールとして入りたい場合は zlogin -C <ゾーン名>

注意:ゾーンからゾーンへ直接移動はできる?

技術的に「ゾーンAの中から直接コマンドを打ってゾーンBに入る」ことはできません
ゾーンはセキュリティ上、互いに隔離されているためです。必ず一度「親」であるグローバルゾーンを経由する必要があります


状況確認のヒント

「今、自分がどのゾーンの作業をしているか」混乱したときは、いつでもこのコマンドを打ってください。

# zonename

これで、操作ミスによる設定変更や削除を防ぐことができます。

ご参考まで

関連記事

TOP