LoginSignup
2
4

More than 5 years have passed since last update.

Windows Container上に作ったプログラムをデプロイ途中な話

Last updated at Posted at 2018-05-14

職場で運用自動化ツールをプログラムし、いざデプロイとなり仮想マシン(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

2
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
4