今回からは、具体的にHyper-Vを利用してコンテナ技術を実現するための構成や、設定を整えていきます。
目次
Hyper-Vの準備
Hyper-Vのバージョン
まずは、ホストとなるHyper-VはWindows Server 2016のものを利用します。Windows Server 2016 Hyper-Vであれば、Nestedの設定を仮想マシンに行うことで、コンテナとしてのHyper-V上の仮想マシンの中でさらにHyper-Vを稼働させることが可能となります。ただし、Hyper-VのNestedが必要ないということであれば、Windows Server 2012 R2のHyper-Vでも、コンテナを実現するためのその他のHyper-Vの機能やPowerShellのコマンドなど要件は満たしているので、Windows Server 2012 R2でも利用可能とします。
サーバーの構成
ごくシンプルに、1台のHyper-Vのホストサーバー上で展開するものとします。開発段階においては、ホストのドメイン参加などは考慮しません。さらに、開発環境としては、Windows Server 2016 Hyper-V上のNested Hyper-Vを利用しています。
ネットワーク
コンテナとなる仮想マシンはHyper-Vの仮想スイッチに接続することができます。Windows Server 2016 Hyper-Vでは、Hyper-Vの仮想スイッチにNATの設定を行うことが可能となりました。今回はこのNATを利用してコンテナを接続することとします。NAT仮想スイッチの作成手順は以下となります。
1.Hyper-Vマネージャーもしくは、PowerShellから内部仮想スイッチを作成
New-VMSwitch -SwitchName "NAT" -SwitchType Internal
2.ホストサーバーの仮想ネットワークアダプターにNATのゲートウェイとなるIPアドレスを設定
Get-NetAdapter | Where-Object { $_.Name -eq "vEthernet (NAT)" } `
| New-NetIPAddress –IPAddress 192.168.0.254 -PrefixLength 24
3.NATの設定(PowerShellのみ)
New-NetNat -Name "NAT 192.168.0.0/24" -InternalIPInterfaceAddressPrefix 192.168.0.0/24
4.NAT設定の確認
Get-NetNat
Name : NAT 192.168.0.0/24
ExternalIPInterfaceAddressPrefix :
InternalIPInterfaceAddressPrefix : 192.168.0.0/24
IcmpQueryTimeout : 30
TcpEstablishedConnectionTimeout : 1800
TcpTransientConnectionTimeout : 120
TcpFilteringBehavior : AddressDependentFiltering
UdpFilteringBehavior : AddressDependentFiltering
UdpIdleSessionTimeout : 120
UdpInboundRefresh : False
Store : Local
Active : True
参考:NATの削除
Get-NetNat | Remove-NetNat
コンテナイメージの準備
OSインストール済みの仮想ハードディスク
コンテナの親となるコンテナイメージとして、OSインストール済みのvhdxファイル(容量可変)を用意します。今回はWindows Server 2016のデスクトップエクスペリエンス(GUI付き)をインストールしておきます。この他にも、NanoServerやUbuntu、CentOSなど、Hyper-Vの仮想マシンとして利用できるものであれば、アプリケーションをインストールしてカスタマイズしたものでもすべてコンテナイメージとして利用することが可能です。
開発環境の準備
PowerShell ISE
コンテナの操作管理には、PowerShellのコマンドで関数をいくつか作成して利用します。PowerShellのコマンド編集としては、PowerShell ISEを利用します。この他にもVisual Studioや、Visual CodeでもPowerShellの編集作業は快適に行えます。
モジュールファイルの配置
コンテナを操作するために、PowerShellのコマンドを組み合わせて関数(Function)を作成します。作成した関数はPowerShellのコマンドとして簡単に再利用して呼び出しができるように、モジュールとして保存します。モジュールとして保存した関数は、通常のコマンドと同様にPowerShellを利用する場合に自動的に読み込まれ、インテリセンスが有効となます。
モジュールは通常のPowerShellのスクリプトファイル(*.ps1)とは異なり、モジュールファイル(*.psm1)として保存します。モジュールファイルは「システムレベルのモジュールパス」もしくは、「ユーザーレベルのモジュールパス」に保存します。システムレベルのモジュールパスは「C:\Windows\SysWOW64\WindowsPowerShell\v1.0\Modules」となり、ここには他の一般的なPowerShellのモジュールも保存されています。システムレベルのモジュールパス内のモジュールは、PowerShellを利用する時にどのユーザーのアカウントで実行しても自動的にすべて読み込まれる仕組みになっています。
一方、ユーザーレベルのモジュールパスは「C:\Users\<ユーザー名>\Documents\WindowsPowerShell\Modules」となり、ログインしているユーザーがPowerShellを実行した場合のみ読み込まれるようになっています。開発環境や特定のユーザーにのみモジュールを利用させたい場合などの利用に向いています。モジュールファイルはモジュールパス内にファイル名と同様のフォルダを作成し、そのフォルダ内に配置するというルールがあります。今回はユーザーレベルのモジュールパス内に「InvokeVContainer」という名前でモジュールファイルを配置します。
モジュールパスの種類 | パス | 用途 |
システムレベルのモジュールパス | C:\Windows\SysWOW64\WindowsPowerShell\v1.0\Modules | すべてのユーザーが利用可能 |
ユーザーレベルのモジュールパス | C:\Users\<ユーザー名>\Documents\WindowsPowerShell\Modules | 特定のユーザーのみが利用可能 |
モジュールの確認
実際にモジュールを作成して、動きを確認してみましょう。
Administratorのアカウントでログインします。
InvokeVContainer.psm1 ファイルを作成して、PowerShell ISEで開きます。
「HelloWorld」コマンドを作成します。
Function HelloWorld(){
Write-Host "Hello World!"
}
一度モジュールを初期化します。開発途中にコマンドを新しく作成したり修正したりした場合は、モジュールを初期化して最新の内容を読み込むようにしておきます。
Remove-Module *
モジュール内で定義されているコマンドをGet-Moduleコマンドもしくは、Get-Commandコマンドで確認してみましょう。定義した「HelloWorld」コマンドが確認できます。
Get-Module InvokeVContainer
ModuleType Version Name ExportedCommands
---------- ------- ---- ----------------
Script 0.0 InvokeVContainer HelloWorld
Get-Command -Module InvokeVContainer
CommandType Name Version Source
----------- ---- ------- ------
Function HelloWorld 0.0 InvokeVContainer
「HelloWorld」コマンドを実行します。このときインテリセンスが利用できるので、” he “と入力して「Tabキー」を押すとHelloWorldコマンドが自動補完されます。実行すると、Hello Worldの文字が表示され
HelloWorld
Hello World!
以上で開発環境が整いました。次回からは実際にコンテナを実現するためのコマンドをHyper-Vを操作しながら作成していきます。
著書の紹介欄
Hyper-Vで本格的なサーバー仮想環境を構築。仮想環境を設定・操作できる!
できるPRO Windows Server 2016 Hyper-V
◇Hyper-Vのさまざまな機能がわかる ◇インストールからの操作手順を解説 ◇チェックポイントやレプリカも活用できる Windows Server 2016 Hyper-Vは、仮想化ソフトウェア基盤を提供する機能であり、クラウドの実現に不可欠のものです。 本書では、仮想化の基礎知識から、Hyper-Vでの仮想マシンや仮想スイッチの設定・操作、プライベートクラウドの構築、Azureとの連携などを解説します。
初めてのWindows Azure Pack本が発売
Windows Azure Pack プライベートクラウド構築ガイド
本書は、Windows Azure PackとHyper-Vを利用し、企業内IaaS(仮想マシン提供サービス)を構成するための、IT管理者に向けた手引書です。試用したサーバーは、最小限度の物理サーバーと仮想マシンで構成しています。Windows Azure Packに必要なコンポーネントのダウンロード、実際にプライベートクラウド構築する過程を、手順を追って解説しています。これからプライベートクラウドの構築を検討するうえで、作業負担の軽減に役立つ一冊です。
ブログの著者欄
採用情報
関連記事
KEYWORD
CATEGORY
-
技術情報(423)
-
イベント(159)
-
カルチャー(35)
-
デザイン(17)
TAG
- 5G
- Adam byGMO
- AI
- AWX
- BIT VALLEY
- blockchain
- ChatGPT
- cloudnative
- CloudStack
- CM
- CNDO
- CNDT
- CODEGYM Academy
- ConoHa
- CS
- CSS
- CTF
- DC
- Designship
- Desiner
- DevSecOpsThon
- Docker
- DTF
- GitLab
- GMO Developers Day
- GMO Developers Night
- GMO GPUクラウド
- GMO Hacking Night
- GMO kitaQ
- GMO SONIC
- GMOアドパートナーズ
- GMOアドマーケティング
- GMOイエラエ
- GMOグローバルサイン
- GMOデジキッズ
- GMOペイメントゲートウェイ
- GMOペパボ
- GMOリサーチ
- Go
- GTB
- Hardning
- Harvester
- HCI
- iOS
- IoT
- ISUCON
- JapanDrone
- Java
- JJUG
- K8s
- Kids VALLEY
- LLM
- MetaMask
- MySQL
- NFT
- NVIDIA
- OpenStack
- Perl
- PHP
- PHPcon
- PHPerKaigi
- QUIC
- Rancher
- RPA
- Ruby
- Selenium
- splunk
- SRE
- SSL
- Terraform
- TLS
- TypeScript
- UI/UX
- VLAN
- VS Code
- アドベントカレンダー
- インターンシップ
- オブジェクト指向
- オンボーディング
- お名前.com
- カルチャー
- コンテナ
- スクラム
- スペシャリスト
- ソフトウェアテスト
- チームビルディング
- ドローン
- ネットワーク
- プログラミング教育
- ブロックチェーン
- ゆめみらいワーク
- リモートワーク
- 京大ミートアップ
- 基礎
- 多拠点開発
- 大学授業
- 宮崎オフィス
- 応用
- 技育プロジェクト
- 新卒
- 暗号
- 機械学習
- 決済
PICKUP