IT導入のヒントブログ IT BLOG
VirtualBoxとVagrantを使用したDocker環境構築①
INDEX
はじめに
こんにちは~!スミリオンのあさのです★
先日、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の設定をご紹介します。