前置き
仮想環境を使ってネットワークのおべんきょをしたかったので、DockerとVagrantを使える環境を構築して仮想マシンとコンテナを使えるようにします。
所持しているPCの1台目(Windows10)は、過去にDocker DesktopとVagrant + VirtualBoxが入っていますが、Microsoftのパッケージ管理ツールがまともに使えるようになってきているらしいので、2台目PCのWindows11で環境構築をしました。
2022/10/17:追記
Linuxに無知で恥ずかしいですが、記事の初版では仮想マシンの動作確認の項でubuntuをtrusty64でインストールするようにしていましたが、trusty64は2014年発と大分古いことに気づいたので、記事のサンプルコードなどを2022年現在の最新のLTS(長期サポート)であるfocal64に変更しました。
画像はWindows11の実機で仮想マシンを入れ替えたタイミングで追々差し替えます。
2022/10/18:追記
画像差し替えました。
仮想マシンの入替に地味に難儀しましたが、それは別の機会にでも。
2022/10/22:追記
自分が所有しているWindows10 PCで同じ手順で仮想マシンの環境構築を行いましたが、ubuntu/focal64でinitした際に[SSH auth method: private key]で止まって動かない現象が発生しました。
Windowsの設定や仮想マシンとの相性など色々と原因があるらしいので、バージョンにこだわりが無い場合は他のboxイメージで試してみると良いかもしれません。
私のWindows10 PCではubuntu/trusty64(結局このバージョンか・・・)で動作を確認しました。
2022/10/23:追記
Windows11の環境構築記事として落ち着いたはずでしたが、どうも安定動作しない(設定とfocalの相性なんですかね?)ので、記事の手順としては動作確認のためのubutuバージョンはtrustyに戻しておきます。
あと、ややこしいので記事の内部の追記は削除します。(どうせtrustyかfocalかって違いしか述べてないので)
前提
知識
勉強を兼ねているので、知識の整理をしながら構築していこうと思います。知識の粒度はネスペに合わせていく感覚となります。
手順だけ知りたい人はこの項目飛ばしてもいいです。
仮想環境
簡単に言ってしまえば、物理的なコンピュータ上に仮想的なコンピュータを構築するのが仮想環境です。今回は、1台のPCに仮想環境を作りますが、本来は物理的な制約に囚われずにコンピュータ環境を構築することが仮想環境と言うらしい。
昔ながらの「仮想マシン」方式と、割と最近に現れた「コンテナ」方式が2大分類になるかと思います。
今回導入するツールで言うと、VirtualBox + Vagrantで作るのが仮想マシンのほうで、Dockerで作るのがコンテナのほうになります。
仮想マシンとコンテナの違いとしては下の図のようになります。左が仮想マシンで右がコンテナです。
仮想マシンは、仮想用ソフトウェアのハイパバイザ上にゲストOSを構築して作ります。
対するコンテナは、コンテナエンジン上にコンテナを構築します。コンテナ内のOS(カーネル)はホスト上のものを共有するかたちになります。
メリット・デメリットは一長一短ありますが、今回の最終目的は使い分けよりも形式によるネットワークの振る舞いが知りたいので、仮想環境についてはこんなところにしておきます。
条件
- マザーボード:MSI
- OS:Windows11 Pro
仮想環境の構築はBIOSの設定も必要なので、マザーボードも条件に加えておきます。
とはいえ、よっぽどじゃなければ操作画面が違うだけで、設定項目自体はあるはずです。
手順
事前準備 + 前提ツールのインストール
仮想化機能の有効化
まず、少なくともWindowsにおいてはBIOSにて仮想化機能を有効化しないといけません。
確認方法としてはタスクマネージャーを起動(Ctrl + Shift + Esc)し、パフォーマンスのタブにある仮想化項目が[無効]となっていたら、この工程で有効にする必要があります。
- BIOSを起動(方法はいくつかある)
- PC再起動からのF2
- 設定の回復からUEFIファームウェア設定ボタンからの再起動
- BIOSの[OC]項目を開く
- [CPUの起動]項目を開く
- [SVM Mode]がCPU仮想化の設定なので、[有効]を選択
- [保存して終了]でBIOSを出る
OSの起動が完了したら、再度タスクマネージャーを開き、設定を確認します。
winget
次にこちらはお好みになりますが、最近まともに使えるようになってきたらしいMicrosoft社のコマンドラインツールを使えるようにします。
とはいっても、そんなに古い環境でなければデフォルトで使えるようになっているはずなのでそれの確認から行います。
これをインストールしている前提で後続のツールをインストールしていきますが、VagrantやDockerの公式ページからインストーラーを落としてきて使えるようにしても問題はありません。
バージョン確認
winget -v
このコマンドでバージョンが出てくれればインストール自体はOKです。
インストール
自分はこの工程を実践してませんが、Microsoft Storeからインストールしてもいいですし、GitHubリポジトリからもインストール可能だそうです。
詳しくは、公式URLを参照
WSL2
事前準備の最後は、Windows上でLinux環境を作成可能なWindows Subsystem for Linuxになります。Dockerを使う際の今ドキのスタンダードみたいです。
既に入っているパターンもあるので、まずはバージョン確認から。
バージョン確認
wsl --status
既定のバージョンが2になってたら完璧です。
インストール
wsl --install
通常はWSL2がインストールされると思います。
その他コマンド
公式ページにどうぞ。既定のバージョンを変更したりWSLを更新したりの方法が載ってます。
仮想化ソフトのインストール
Vagrant + VirtualBox
いよいよ本命の仮想環境ソフトのインストールです。
wingetで進めていきます。
まずは、ソフトの存在確認を行います。インストールするための正式名称も分かるので、やっておくのが吉です。
winget search virtualbox
winget search vagrant
それぞれの名前とID、バージョンが出てきます。
名前が分かったら、インストールを実行します。
winget install Oracle.Virtualbox
winget install Hashicorp.Vagrant
インストール確認は、Dockerのインストールも終わってから再起動後にまとめて行うこととします。
Docker Desktop
こちらもwingetで進めます。
まずは、検索から。
winget search docker
Dockerに関しては名前検索で色々かかりますが、一番上のものが正規のDockerになります。
winget install Docker.DockerDesktop
DockerはVirtualBox + Vagrantより重いので、ちょっと時間がかかります。
ここまで完了したら、PCを再起動してきてください。
動作確認
再起動後、まずは環境変数がセットされているかを含め、バージョンチェックからです。
環境変数(+バージョン)確認
vagrant -v
docker -v
VirtualBoxは環境変数として普段は使わないので確認しなくても良いです。
VirtualBox + Vagrant
仮想マシンは動作確認がちょっと面倒ですが、セッティングしておくといつでも使える状態になります。
ここでは、今後使う予定のLinux ubuntu/trusty64で動作を確認します。
まずは、Webから提供されているBoxesを確認しに行きます。
最上部のubuntu/trusty64がダウンロードする目的のイメージです。
仮想マシンを起動するVagrantfileという設定ファイルを置くためのディレクトリを用意します。セオリーからいくと、Documentsディレクトリに作っておくのが良いみたいです。
mkdir Vagrant
cd Vagrant
mkdir ubuntu
cd ubuntu
ディレクトリが用意出来たら、初期化を行います。
vagrant init ubuntu/trusty64
事前準備が上手くいっていないとエラーを吐く場合もあるので、ターミナルの文章はよく読みましょう。
Vagrantfileが出来ていれば、下記のコマンドで仮想マシンを起動できます。
Vagrantfileの細かい設定を先にやっておいても良いでしょう。
vagrant up
完了すれば以下のコマンドでステータスが確認可能です。
vagrant status
runningとなっていれば、仮想マシンは正しく起動していることとなります。
すぐに使う訳でなければ、仮想マシンは一度シャットダウンしておきましょう。
vagrant halt
Docker
Dockerは、コンテナの作成まで行わなくてもDockerエンジンの稼働が一目で分かるので、仮想マシンよりも確認が楽です。
まず、Dockerの正常なインストールが完了している場合は再起動後にダッシュボードが開いていると思います。
開いていない場合は、タスクバーのインジケーターにクジラのマーク(Docker)があるか確認します。
タスクバーにもない場合は、スタートメニューかデスクトップアイコンからダッシュボードを起動してください。
ダッシュボードが下図のようにrunning状態であれば、Dockerエンジンは正常に起動しているはずです。running状態でない場合は設定がおかしくないか、前提条件が達成されていないかなどを疑って確認してください。
設定は下図の通りならWSL2で問題なく動いているかと思います。
次回以降、ダッシュボードが自動起動しないようにする場合は、GeneralのOpen Docker Dashboard at StartupをOffにしておいてください。
また、Dockerはアカウントを作成しておくと便利なので、作成してログインすることをおすすめします。
最後に
これで仮想マシンとコンテナの環境構築が出来たこととなります。
これをベースに次回以降、ネットワークの色々を試していきたいと思います。