1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

WSL2は、Windows上で手軽にLinux環境を構築できるシステムです。
開発環境やサーバー環境、コンテナ環境などに活用でき、私も頻繁に利用しています。
それでも構成によっては、Vagrant(ベイグラント)の方が便利な場合があるので、Vagrantだとこんなことができます、という例をいくつかご紹介します。

仮想ネットワークの構築が柔軟にできる

Vagrantは、VirtualBox, Hyper-V,VMware などのハイパーバイザのフロントエンドとして機能する仮想マシン管理ツールです。
ハイパーバイザに備わっている仮想ネットワーク機能が利用できます。

ホストPCと同じセグメントのIPを割当て

仮想マシンはホストマシンと同じネットワークに直接接続されるようになります。(ブリッジ接続)
サービスを公開する場合のポートフォワード等の設定は不要です。
※ IPアドレスの使用は、利用するネットワークルールおよびネットワーク管理者に確認のうえ、ご利用ください
bridge.drawio.jpg

Vagrantfile
Vagrant.configure("2") do |config|
  config.vm.box = "ubuntu/focal64"  # Ubuntu 20.04 LTS
  config.vm.provider "virtualbox" do |vb|
    vb.memory = "1024"
    vb.cpus = 1
  end

  # 1台目の仮想マシン
  config.vm.define "vm1" do |vm1|
    vm1.vm.hostname = "vm1"
    vm1.vm.network "public_network", ip: "192.168.1.10"
  end

  # 2台目の仮想マシン
  config.vm.define "vm2" do |vm2|
    vm2.vm.hostname = "vm2"
    vm2.vm.network "public_network", ip: "192.168.1.11"
  end
end

仮想マシンに複数のIPを割り当て

仮想マシンに複数のIPアドレスを割り当てることで、待ち受けポート番号が同じでも複数のサービスを公開することができます。
bridge2.drawio.jpg

Vagrantfile
Vagrant.configure("2") do |config|
  config.vm.box = "ubuntu/focal64"  # Ubuntu 20.04 LTS
  
  config.vm.provider "virtualbox" do |vb|
    vb.memory = "2048"
    vb.cpus = 2
  end

  config.vm.define "multi_ip_vm" do |node|
    node.vm.hostname = "multi-ip-vm"
    
    # 1つ目のブリッジネットワークインターフェース
    node.vm.network "public_network", ip: "192.168.1.10"    
    # 2つ目のブリッジネットワークインターフェース
    node.vm.network "public_network", ip: "192.168.1.11"
    # 3つ目のブリッジネットワークインターフェース
    node.vm.network "public_network", ip: "192.168.1.12"
  end
end

仮想マシン上のdockerコンテナに、IP指定してポートマッピングする例

docker-compose.yml
version: '3'

services:
  nginx1:
    image: nginx
    ports:
      - "192.168.1.10:80:80"
  nginx1:
    image: nginx
    ports:
      - "192.168.1.11:80:80"
  nginx1:
    image: nginx
    ports:
      - "192.168.1.12:80:80"

プロビジョニングで環境構築を自動化できる

Vagrantfileにプロビジョニング(事前の環境設定、環境構築)を記載することで、起動時にソフトウエアのインストールや設定ができます。

ソフトウェアの事前設定

Vagrantfile
Vagrant.configure("2") do |config|
  config.vm.box = "ubuntu/focal64"

  # Webサーバー
  config.vm.define "web" do |web|
    web.vm.network "private_network", ip: "192.168.33.10"
    web.vm.hostname = "webserver"
    web.vm.provision "shell", inline: <<-SHELL
      apt-get update
      apt-get install -y nginx
      systemctl enable nginx
      systemctl start nginx
    SHELL
    web.vm.provision "file", source: "./nginx.conf", destination: "/tmp/nginx.conf"
    web.vm.provision "shell", inline: <<-SHELL
      mv /tmp/nginx.conf /etc/nginx/nginx.conf
      systemctl restart nginx
    SHELL
  end

全ての仮想マシンにカスタムスクリプトの実行

Vagrantfile
Vagrant.configure("2") do |config|
  config.vm.box = "ubuntu/focal64"  # Ubuntu 20.04 LTS
  config.vm.provider "virtualbox" do |vb|
    vb.memory = "1024"
    vb.cpus = 1
  end

  # 1台目の仮想マシン
  config.vm.define "vm1" do |vm1|
    vm1.vm.hostname = "vm1"
    vm1.vm.network "public_network", ip: "192.168.1.10"
  end

  # 2台目の仮想マシン
  config.vm.define "vm2" do |vm2|
    vm2.vm.hostname = "vm2"
    vm2.vm.network "public_network", ip: "192.168.1.11"
  end

  # Ansibleによるプロビジョニング(すべてのマシンに適用)
  config.vm.provision "ansible" do |ansible|
    ansible.playbook = "playbook.yml"
  end

  # カスタムスクリプトの実行(すべてのマシンに適用)
  config.vm.provision "shell", path: "custom_script.sh"
end

WSL2よりも仮想マシンイメージの種類が豊富

すぐに利用可能な仮想マシンイメージが豊富にあります。
https://app.vagrantup.com/boxes/search
※HashiCorpは基本的なセキュリティスキャンを行いますが、すべてのboxの内容を完全に検証しているわけではありません。可能な限り公式に維持されているboxesを使用することをお勧めします。また、ゲストOSにWindowsを利用する場合ライセンスに注意ください。

boxs.png

おわりに

手短ですがVagrantだとこんなことができます、という例でした。
最後まで読んで頂きありがとうございました。

1
0
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
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?