MENU

IT導入のヒントブログ IT BLOG

VirtualBoxとVagrantを使用したDocker環境構築①

はじめに

こんにちは~!スミリオンのあさのです★
先日、VirtualBox + Vagrant+ docker(Laravel + Vue.js, nginx, PostgreSQL)の開発環境を構築したので、その方法を2回に分けて紹介します。
今回は、「構築準備~Vagrantの設定」までを記載します。

フォルダ構成

今回は以下のフォルダ構成となりました。

test
 ├ docker/
 │ ├ nginx/
 │ │ └ Dockerfile
 │ ├  php/
 │ │ ├  Dockerfile
 │ │ └ php.ini
 │ └  nginx/
 │   ├ Dockerfile
 │   └ default.conf
 ├ src/
 ├ sdocker-compose.yml
 └ Vagrantfile

構築準備

VirtualBoxとVagrantのダウンロード

以下からインストールしました。

VirtualBox
https://www.virtualbox.org

・Vagrant
https://www.vagrantup.com

Vagrantの初期設定

まずは、Vagrantの初期設定を行います。
「test」フォルダ内で以下のコマンドを実行すると、新しい Vagrantfile が生成され、その中で gbailey/amzn2 のBoxが自動で指定されます。

vagrant init gbailey/amzn2

ちなみに、Boxは仮想マシンのテンプレートのようなものです。
Boxを利用することで、簡単に仮想マシンを構築できます。今回使用する、 gbailey/amzn2 というBoxは、Amazon Linux 2 がプリインストールされています。

続いて、Hyper-Vをオフにします。
Hyper-Vが有効になっていると、仮想マシンが起動しません。

bcdedit /set hypervisorlaunchtype off

Vagrantfile作成

Vagrantfileに以下の設定を追加しました。

Vagrant.configure("2") do |config|

  #
  # Box
  #
  config.vm.box = "gbailey/amzn2"
  config.vm.box_check_update = false

  #
  # Network
  #
  config.vm.network "forwarded_port", guest: 8080, host: 8080

  #
  # Synced Folder
  #
  config.vm.synced_folder ".", "/vagrant"

  #
  # Provision
  #
 
  config.vm.provision "shell", inline: <<-SHELL

    echo "cd /vagrant" >> /home/vagrant/.bashrc

    sudo yum update -y
    sudo amazon-linux-extras install docker
    sudo service docker start
    sudo usermod -a -G docker vagrant

    sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
    sudo chmod +x /usr/local/bin/docker-compose

    cd /vagrant && /usr/local/bin/docker-compose build --no-cache;
    cd /vagrant && /usr/local/bin/docker-compose up -d
  SHELL

end

設定の詳細を紹介します。

Boxの設定

config.vm.box は Vagrant で使用する Box を指定します。
また、「config.vm.box_check_update = false」 は、Vagrantが起動する際にBoxの更新をチェックするかどうかを指定します。false に設定すると、更新はチェックされません。

  config.vm.box = "gbailey/amzn2"
  config.vm.box_check_update = false

ネットワーク設定

この設定はゲストOS(Vagrant VM)の8080ポートとローカルPCの8080ポートをフォワードします。これにより、ローカルPCからゲストOS内のサービスにアクセスできるようになります。

config.vm.network "forwarded_port", guest: 8080, host: 8080

Synced Folder

この設定はホストOSの現在のディレクトリ(.)とゲストOSの/vagrantディレクトリを同期します。

config.vm.synced_folder ".", "/vagrant"

Provision

この設定はVagrantが起動した後に実行するスクリプトを指定します。省略部分は次に記載します。

config.vm.provision "shell", inline: <<-SHELL
  # 省略
SHELL

ユーザーがSSHで仮想マシンにログインした際に、自動的に/vagrantディレクトリに移動するように設定しています。
その後、ゲストOSのパッケージリストをアップデートします。

echo "cd /vagrant" >> /home/vagrant/.bashrc
sudo yum update -y

Amazon Linux 2 に Docker をインストールし、Dockerサービスを起動します。

sudo amazon-linux-extras install docker
sudo service docker start

vagrantユーザーをDockerのグループに追加して、sudoなしでDockerコマンドを実行できるようにします。

sudo usermod -a -G docker vagrant

docker-composeをダウンロードして、実行可能な状態にします。

sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose

/vagrant ディレクトリに移動して、docker-compose.yml で定義した各サービスをビルドし、起動します。(docker-compose.yml の定義は次回紹介します)

cd /vagrant && /usr/local/bin/docker-compose build --no-cache;
cd /vagrant && /usr/local/bin/docker-compose up -d

今回はここまでです。
次回、PHPフレームワークのインストールやDockerの設定をご紹介します。