職場で運用自動化ツールをプログラムし、いざデプロイとなり仮想マシン(Hyper-V)を作成した。しかし、たった1つのプログラムにディスク20GB、メモリ1024Mはもったいないと思い、会社では誰も(?)チャレンジしたことないであろうWindows Containerに手を出してみた。
環境の要件
・ツールはC#(.Net Framework)で作成。
・プログラムを動かすために社内LANに入れなくてはいけない。
・指定したIPアドレスで動かさなくてはいけない。
・ホストマシンと隔離したい。
環境
ホストOS:Windows Server2016 Datacenter
その他制約等
セキュリティ上の理由から、Docker for Windowsを入れることはできない。
使用するDocker Image
Windows ContainerでWindows公式Docker HubからPullできるBase WindowsOSはWindows Server CoreとWindows Server Nano Serverっぽい。Windows ContainerでPullできるRegistryが少なすぎるよ。
最初イキってNano Server入れたら最終的にプログラムが動かなかった。ググったら、.Net Coreしか対応していないらしい。その他、制約もいろいろあるのでWindows Server Coreを使うのが安定なイメージ。
Windows Containerインストール
先輩方のサイトからWindows Containerを入れました。
あんまりここでは躓かなかった。
ちなみに、Docker ImageのPullは以下のコマンドを叩く(10分くらい待ちます)。
docker pull microsoft/windowsservercore
ネットワーク設定
ネットワーク設定を
docker network ls
から確認。
デフォで設定されているのはDriverが「nat」のやつ。
IPとか諸々の設定無しでいい感じにネットワークをつないでくれるらしい(WinNATがほにゃらら)。
ただ、社内LANに入れる必要性がある、且つDHCPじゃダメ。Hyper-VでいうところのExternalのvSwitchにつないでクライアントでIPアドレスを打ちたい感じ。
そんな時は、ネットワークドライバを**「transparent」**にしなきゃいけない。
ホストOSとの隔離
Windows Containerは2種類あります。
このサイトが詳しいです。
要は軽量・高速だけど隔離性が普通のWindows Server コンテナと、
遅いけど隔離性が非常に高いHyper-Vコンテナ。
今回は、他のネットワークに影響を与えない・与えられたくないので、Hyper-Vコンテナを使用。
ちなみに、起動が遅いといっても自環境で試したら起動に20~30秒程度(HDD)。
使ったDockerコマンド
ネットワークの設定とホストOSとの隔離を考慮し使った立ち上げコマンドが以下の通り。
docker run -it --network="(Hyper-Vとかで作成したExternal vSwitch名)" --isolation=hyperv microsoft/windowsservercore
「Hyper-Vとかで作成したExternal vSwitch名」にはdocker network lsでDRIVERがtransparentなものを選択する。
これで、PowershellとかからIPアドレスの設定をしてあげれば目標達成。
その他
ホストOSをWindows Server2016 Datacenterにしたため、ライセンスを意識しなくてOKだったが、Standardとかの場合は考えなくてはいけない(Hyper-Vコンテナは2つまで)。
気づいたこととか
どうやってWindowsのセキュリティパッチとかあてるんだ?
セキュリティソフトとか基本GUIベースだから入れられないよね。。。
セキュリティのリスクがヤバそうなので、いろいろ考えて毎回
docker rm [Container ID]
してます。使うにしても上司とかとかとの相談が必要だね。
そもそも、コンテナの使いどころってこういうところなのか?
参考にしたサイト
Windows Containerのインストール方法
http://blog.shibayan.jp/entry/20171107/1509988437
Windows Containerの基礎(?)知識
http://www.atmarkit.co.jp/ait/articles/1702/02/news039.html
なんだかんだでMicrosoft Docに落ち着く(Windows ContainerのNetworking)
https://docs.microsoft.com/ja-jp/virtualization/windowscontainers/manage-containers/container-networking
Transparent Networkの設定方法
https://www.ntweekly.com/2017/03/30/how-to-create-a-transparent-network-with-windows-containers/
その他、何度このサイトに救われたことか
https://yamanxworld.blogspot.jp/2017/09/hyper-v-linux.html