はじめに
Solarisゾーンテクノロジ(Solarisコンテナ)は、Solaris 10ソフトウェアレベルでOSをコンテナ(ゾーン)、独立した独立したリソース(プロセッサ、メモリ、ディスクスペース)と独自のユーザーを持つことができるほぼ独立したOSに分離できるテクノロジです。
コンテナは、各アプリケーションが動作可能なリソースの独自の正直な保証(またはすべてのゾーン間で共有)を備えたアプリケーションサーバーを構築するための優れたソリューションです。 このソリューションにより、インフラストラクチャをより強力なサーバーに統合できるようになり、一般に情報システムのコストと複雑さが軽減されます。
サーバーの統合を計画する場合、多くの異種ソリューションに直面するため、そこから完全に満足できるソリューションを選択する必要があります。 通常、次の3つから選択します。
- ドメイン-Oracle VM Server for SPARC (ex LDom from Sun)またはIBM LPAR
 - 仮想マシン-Vmware、Microsoft Hyper-Vなど
 - OSレベルの分離パーティション-Solarisゾーン 、FreeBSD刑務所、LVS(Linux仮想サーバー)
 
Solarisゾーンの機能:
- セキュリティ-ゾーンで実行されているアプリケーションは「サンドボックス」で起動されます。つまり、ゾーンでルートとして実行されているプロセスでも、他のゾーンやグローバルゾーン(コントロール、ルートゾーン)に影響を与えることはできません。 再起動またはシャットダウンは、大域ゾーンからのみ使用できます。
 - 分離-ゾーンには、割り当てられたリソースに対する排他的な権利があります。 ゾーン独自のユーザーと独自のルートユーザーを持つことができます。 ゾーンを再起動しても、ホストで実行されている他のゾーンに影響を与えることはできません。
 - 柔軟性-ゾーン内のリソースを厳密に割り当てることも、ゾーンが共有ホストリソースプールを使用することもできます。
 
Solarisゾーンの作成
デモンストレーションを行うには、habrazoneというゾーンを設定します。
Solaris OS 10 09/10があり、 ZFSにインストールされています 。 次の記事では、ZFSに個別のプールを作成し、このプールにゾーンをインストールし、保証されたCPUとRAMをゾーンに割り当てるプロセスについて説明します。この1つでは、ゾーンをリソースにバインドせずに個別のディレクトリにのみインストールします。 ゾーンには余計なものはなく(物理ネットワークインターフェース、rawデバイスなどを転送する)、ホストレベルで仮想ネットワークインターフェースを使用します。
したがって、まず最初に、ゾーンがインストールされるディレクトリを作成し、それに権利を割り当てます
# mkdir /export/habrazone 
      
        
        
        
      
     # chown root:root /export/habrazone 
      
        
        
        
      
     # chmod 700 /export/habrazone
      
      すべてがシンプルです。 このゾーンを見ることができるのはルートのみであり、他の誰も見ることができません。
ゾーンを作成するには、-zスイッチを指定してzonecfgコマンドを使用します。
# zonecfg -z habrazone 
      
        
        
        
      
     habrazone: No such zone configured 
      
        
        
        
      
     Use 'create' to begin configuring a new zone. 
      
        
        
        
      
     zonecfg:habrazone> create 
      
        
        
        
      
     zonecfg:habrazone> set zonepath=/export/habrazone 
      
        
        
        
      
     zonecfg:habrazone> set autoboot=true 
      
        
        
        
      
     zonecfg:habrazone> add net 
      
        
        
        
      
     zonecfg:habrazone:net> set physical=bge0 
      
        
        
        
      
     zonecfg:habrazone:net> set address=10.44.3.92 
      
        
        
        
      
     zonecfg:habrazone:net> end 
      
        
        
        
      
     zonecfg:habrazone> add attr 
      
        
        
        
      
     zonecfg:habrazone:attr> set name=comment 
      
        
        
        
      
     zonecfg:habrazone:attr> set type=string 
      
        
        
        
      
     zonecfg:habrazone:attr> set value="Habrahabr" 
      
        
        
        
      
     zonecfg:habrazone:attr> end 
      
        
        
        
      
     zonecfg:habrazone> verify 
      
        
        
        
      
     zonecfg:habrazone> commit 
      
        
        
        
      
     zonecfg:habrazone> exit
      
      ここで何が起こったかについて少しコメントします。
zonecfg:habrazone> create-ゾーンを作成します。 実際、まだゾーンはありません。 これは単なるXML構成です。
zonecfg:habrazone> set zonepath = / export / habrazone-ゾーンはパス/ export / habrazoneに配置されます
zonecfg:habrazone> set autoboot = true-ゾーンはホストのブートとともに、たとえば再起動後に自動的に開始されます。
zonecfg:habrazone> add net-ネットワークインターフェースをゾーン設定に追加します
zonecfg:habrazone:net> set physical = bge0-仮想インターフェイスはbge0の上に配置されます
zonecfg:habrazone:net> set address = 10.44.3.92-ゾーンのアドレス
zonecfg:habrazone:net> end -end
zonecfg:habrazone> add attr-ゾーンの「名前」を追加しました
zonecfg:habrazone:attr> セット名=コメント
zonecfg:habrazone:attr> set type = string
zonecfg:habrazone:attr> set value = "Habrahabr"は私たちのお気に入りのリソースです
zonecfg:habrazone:attr> end-そして再びend
zonecfg:habrazone> verify-設定を確認します。 構成にエラーがある場合、この場所でこれについて通知されます
zonecfg:habrazone> commit-コミット
zonecfg:habrazone> exit-終了
設定全体を見てみましょう。 inherit-pkg-dirに注意してください。 これらは、大域ゾーンから「継承」されるディレクトリを指します。
# zonecfg -z habrazone info 
      
        
        
        
      
     zonename: habrazone 
      
        
        
        
      
     zonepath: /export/habrazone 
      
        
        
        
      
     brand: native 
      
        
        
        
      
     autoboot: true 
      
        
        
        
      
     bootargs: 
      
        
        
        
      
     pool: 
      
        
        
        
      
     limitpriv: 
      
        
        
        
      
     scheduling-class: 
      
        
        
        
      
     ip-type: shared 
      
        
        
        
      
     hostid: 
      
        
        
        
      
     inherit-pkg-dir: 
      
        
        
        
      
     dir: /lib 
      
        
        
        
      
     inherit-pkg-dir: 
      
        
        
        
      
     dir: /platform 
      
        
        
        
      
     inherit-pkg-dir: 
      
        
        
        
      
     dir: /sbin 
      
        
        
        
      
     inherit-pkg-dir: 
      
        
        
        
      
     dir: /usr 
      
        
        
        
      
     net: 
      
        
        
        
      
     address: 10.44.3.92 
      
        
        
        
      
     physical: bge0 
      
        
        
        
      
     defrouter not specified 
      
        
        
        
      
     attr: 
      
        
        
        
      
     name: comment 
      
        
        
        
      
     type: string 
      
        
        
        
      
     value: Habrahabr 
      
        
        
        
      
    
      
      現在、ゾーンは1つだけです-グローバル。 ゾーンのリストは、list –ivキーを指定したzoneadmコマンドで表示できます。
# zoneadm list -iv 
      
        
        
        
      
     ID NAME STATUS PATH BRAND IP 
      
        
        
        
      
     0 global running / native shared
      
      これで、ゾーンをインストールする準備ができました。 ゾーンをインストールするには、すでによく知られているzoneadmコマンドを使用しますが、インストールコマンドでインストールされていないゾーンの名前がパラメーターとして渡されます。
# zoneadm -z habrazone install 
      
        
        
        
      
     A ZFS file system has been created for this zone. 
      
        
        
        
      
     Preparing to install zone habrazone. 
      
        
        
        
      
     Creating list of files to copy from the global zone. 
      
        
        
        
      
     Copying 3137 files to the zone. 
      
        
        
        
      
     Initializing zone product registry. 
      
        
        
        
      
     Determining zone package initialization order. 
      
        
        
        
      
     Preparing to initialize 1207 packages on the zone. 
      
        
        
        
      
     Initialized 1207 packages on zone. 
      
        
        
        
      
     Zone habrazone is initialized. 
      
        
        
        
      
     The file /export/habrazone/root/var/sadm/system/logs/install_log contains a log of the zone installation. 
      
        
        
        
      
    
      
      OSファイルがグローバルゾーンからゾーンにコピーされ、ディレクトリの一部が継承されるという事実に注意を喚起したいと思います。 ゾーン内の継承ディレクトリは読み取り専用です。
ゾーンのリストに、新しくインストールされたゾーンがあります。
# zoneadm list -iv 
      
        
        
        
      
     ID NAME STATUS PATH BRAND IP 
      
        
        
        
      
     0 global running / native shared 
      
        
        
        
      
     - habrazone installed /export/habrazone native shared
      
      そして、そのサイズは、ほぼ独立したOSにとって非常に小さいです。
# du -shk /export/habrazone/ 
      
        
        
        
      
     79M /export/habrazone
      
      起動と停止は、コマンドzoneadm –z <ゾーン名> bootおよびzoneadm –z <ゾーン名> haltをそれぞれ使用して実行されます。
# zoneadm -z habrazone boot 
      
        
        
        
      
    
      
      ゾーンを開始した後、たとえば、ホストネットワークインターフェイスの構成で何が変更されたかを確認できます。
# /sbin/ifconfig -a 
      
        
        
        
      
     lo0: flags=2001000849<UP,LOOPBACK,RUNNING,MULTICAST,IPv4,VIRTUAL> mtu 8232 index 1 
      
        
        
        
      
     inet 127.0.0.1 netmask ff000000 
      
        
        
        
      
     lo0:1: flags=2001000849<UP,LOOPBACK,RUNNING,MULTICAST,IPv4,VIRTUAL> mtu 8232 index 1 
      
        
        
        
      
     zone habrazone 
      
        
        
        
      
     inet 127.0.0.1 netmask ff000000 
      
        
        
        
      
     bge0: flags=1000843<UP,BROADCAST,RUNNING,MULTICAST,IPv4> mtu 1500 index 2 
      
        
        
        
      
     inet 10.44.3.93 netmask ffffff00 broadcast 10.44.3.255 
      
        
        
        
      
     ether 0:14:4f:79:91:1a 
      
        
        
        
      
     bge0:1: flags=1000843<UP,BROADCAST,RUNNING,MULTICAST,IPv4> mtu 1500 index 2 
      
        
        
        
      
     zone habrazone 
      
        
        
        
      
     inet 10.44.3.92 netmask ffffff00 broadcast 10.44.3.255
      
      ifconfigの出力からわかるように、ゾーンアドレスが割り当てられているシステムに仮想インターフェイスが表示されています。 たとえば、ネットワークをアクティブに運用するゾーンにアプリケーションをインストールし、他のゾーンが正常に機能するようにする場合など、ゾーンに個別の物理インターフェイスを割り当てることもできます。
ゾーンが起動したら、コンソールに移動して最小限の構成(ホスト名、タイムゾーン、ネームサービス、パスワードルートなど)を実行する必要があります。
zlogin –C <ゾーン名>を使用して入力できます。
# zlogin –C habrazone
      
      次に、ホスト名、タイムゾーン、ネームサービスに関するOSの質問に答え、ルートパスワードを入力します。 すべての構成手順の後、ゾーン自体が再起動し、同じzlogin <zone name>またはsshを使用してコンソールにアクセスできるようになります。
# hostname 
      
        
        
        
      
     globalzone 
      
        
        
        
      
     # zlogin habrazone 
      
        
        
        
      
     [Connected to zone 'habrazone' pts/1] 
      
        
        
        
      
     Last login: Fri Jul 1 18:43:32 on pts/3 
      
        
        
        
      
     Oracle Corporation SunOS 5.10 Generic Patch January 2005 
      
        
        
        
      
     # hostname 
      
        
        
        
      
     habrazone
      
      ゾーンの準備ができました。
次の記事では、ゾーンにリソースを割り当てる方法(raw、CPU、RAM)と、ホスト間でゾーンを移行する方法について説明します。
ご清聴ありがとうございました。