仮想化の系譜

職業プログラマの頃は意識してなかった。
仮想化はメインフレームの頃にもあった。
本番環境と開発環境を分けるために使ってたと思う。

cobolで書いた処理をどうしても高速化したいために、アセンブラでミスって書いてしまい開発環境の中で無限ループしたときは当時の上司にめっちゃ怒られた。

1997年頃

solaris上での開発。お客さんの要件で建物作るときみたいに「中間検査」があって、途中までの開発内容を開示しなきゃいけなかった。当時のリーダーは、なぜか自分のPCをデュアルブートにしてwindowsとlinuxを起動できるようにしておき、検査の席ではlinuxに変身させてダミーサーバにするよう指示してきた。最初はlinuxのインストールに何度も失敗し、windows起動できなくなって苦労してた。休日にサーバの勉強や挑戦する習慣がついて、平日は気合と根性で仕事やってた時代ですな。なんと自席でタバコが吸えた。

2000年頃

power pcの入ったmacを使ってたら、コネクティクス社のvirtual PCというソフトウェアの配下でwindowsが動くことを知った。このソフトウェアは後にmicrosoftに買収されて製品は消えてしまった。

virtualPCforMac

やってみたらあっさりwindows98がOS Xの中で動いた。このときはただ「動いた」だけで、それを使い込んだわけじゃない。なんでunixの中でwindowsが動けるのかまったく不思議な光景だった。

virtualPCforWin

windows版というのもあって、ついでにsolaris8のメディアをサンから購入して動かそうとしたが、LAN系がどうしてもちゃんと動かず物理環境でインテルの1万円もするLANカード買ってoracle8入れて動かしてた。

virtualPCでのmacアドレス指定

拡張子がvmcのバーチャルマシン設定ファイルを、メモ帳で開いてみる。
アダプタアドレスが登録されているのは、この部分。<ethernet_card_address type=”bytes”>12桁の数字と文字列</ethernet_card_address>

12桁のキャラクターを他のものに入れ替えれば、MACアドレスは変わる。

virtualPCのvhdファイル圧縮

  • 仮想ドライブ容量の圧縮(Virtual PC 2007 SP1)のためprecompactorの実行
    1. ゲストOSを起動する。
    2. C:\Program Files\Microsoft Virtual PC\Virtual Machine Additions\Virtual Disk Precompactor.iso をマウント
    3. ウィザードが起動するので実行するとprecompactorが実行される。
      コマンドプロンプトから以下の通り実行してもOK。
      cd-rom\> precompact -setdisks:c
  • ドライブの圧縮
    precompactorの実行後に行う。
    1. ゲストOSを停止する。
    2. Virtual PC コンソールから、「ファイル→バーチャルディスクウィザード」を起動。
    3. 「既存のバーチャルディスクの編集」を選択。
    4. 圧縮するディスクファイル(.vhd)を選ぶ。
    5. 「圧縮する」を選び、あとはウィザードに従う。

2008年頃

社内SEやってるときにサーバの仮想化で物理容積を縮小することを考えた。ファイルサーバとイントラwebはあっさりp2vできた。バックアップにDLT使ってたのを、USB2.0の2TBディスク5本をVMに接続してリカバリ依頼をリモート作業で応答できるようにした。hyper-vよりvmwareのほうが扱いが簡単に思えた。

業務アプリサーバをp2vし、macアドレス指定での製品アクティベートに成功して8台ぐらいあったサーバを3台に縮小できた。バックアップソフトウェアを使わず、vmdkファイルをコピーしておけばシステムを完全に維持できるようになったのは驚いた。

2011年頃

.netでアプリケーションを作っていた頃。前任者がポンコツで、扱いが面倒なcrystal reportclick onceを取り入れたアプリの面倒を見なきゃいけなかった。本社で作っておいたアプリが店舗端末でどうしてもうまく配信できなくてかなり悩んだ。それやりながら、ファイルサーバをwindowsではなくvmのlinux + sambaにしてcalの節約に取り組んだ。購入したサーバではなく、vmをレンタル機にして5年単位でのハードウェア刷新を目指した。

2018年頃

ある業務でdockerの存在を知った。コンテナ仮想化は最初は意味がわからなかったが、インターネットの使える環境で構築の仕方をdockerファイルに書くことで、アプリケーションサーバやDBを一発仮想化できることを知った。railsで作ったアプリケーションのテストをローカルPCや開発環境で展開するとき、このコンテナ利用がとても役に立った。Dockerfileを作っておいて、db2のコンテナを作りrailsでビルドするとデータ流し込みと実行をやってくれる。これを応用してgcpのvmにmariadbとphpを入れていたのを、完全にdockerでの運用に切り替えた。gcpのmariadbデータを永続化領域にしておいて、そのバックアップをgoogleドライブ経由でローカルPCのvmに持ってくると、環境を完全に維持できてしまう。周辺知識としてvagrantとgitもこの頃に覚え始めた。svnはバージョン管理がやりにくいと感じたので、取り扱いすぐやめた。

2023年頃

業務でkubernetesを扱うチャンスがあった。google cloudの無償枠を新規で確保して、3ヶ月ほど練習。wordpress/mysql8のpod作ってみたり、イメージ置き場のGCRをGARに引っ越したりを練習した。無償枠の期限になったら、ローカルで練習したくなったからminikube使い始めた。docker-desktopが有償になってrancher-desktopも試したけどイマイチやったから、minikubeはmacの中で使うことにした。ビルドはlinux側のdocker環境の中でやるけど、minikubeではイメージをloadするようにした。kubernetesの中ではxrdpコンテナも動かす運用にした。

コンテナの情勢を解説されてる人の記事を見ると、いろんな技術があることに気づいた。

Docker一強の終焉にあたり、押さえるべきContainer事情

そろそろdockerも古くなってきた感じがする。開発環境や練習ではdockerでいいけど、検証環境や本番はkubernetesでやるのがいいのかもしれない。

タイトルとURLをコピーしました