VagrantとDockerを駆使して爆速で開発環境を構築してみる

はじめに

この投稿はアイスタイル Advent Calendar 2020 の10日目の記事です。
みなさんは、個人で開発する時ってどうしてますか?
ローカルで開発であったり、人それぞれ様々なやり方で開発を行っていると思います。
ちなみに私は、私用PCの環境を汚したくない勢なので、
DockerやVagrantなどの仮想環境を活用して開発をしたりしてます。
DockerやVagrantって便利ですが、双方メリット、デメリットがありますよね・・・。
だったらこの2つを組み合わせて、いいところ取りしたらいいんじゃね?ってことで、
「VagrantとDockerを駆使して爆速で開発環境を構築してみる」ってテーマで紹介できればなと思います。

自己紹介

その前に、お前誰だよって感じなので、軽く自己紹介します。
アイスタイルに19卒として入社したbannotと申します。
@cosme SHOPPINGというECサービスを担当領域としています。
基本的に@cosme SHOPPINGに関わることは割と何でもやってます。
バックエンド大好きマンです。
12/1~12/4まで開催された@cosme Beauty Dayにも携わっていました。
Beauty Dayの施策の1つである「サンプル買い回り企画」のサンプル機能の新規開発なんかやってました。
みなさんコスメは買ってくれましたか??

Dockerってなに?

Dockerに関しては、以前urabesさんが書いてくださった記事を読んでください。
ここに全てが詰まっておるのじゃ。
Docker for Mac とかがセオリーなんじゃないかな。

Vagrantってなに?

Vagrantに関しては、記事がなかったので軽く紹介します。
簡単に言うと、VirtualBoxなどの仮想マシンを管理するためのコマンドラインツールだと思っていただければ大丈夫です。
VagrantではBoxというOSのイメージとVagrantfileという構成情報を記述した設定ファイルを元に、仮想環境の構築から設定までを一元化します。
Virtualboxでの操作からターミナルでCUIの操作で仮想環境を構築できる、まぁ便利な代物です。

Docker or Vagrant

DockerとVagrantの違いについて書くとこれだけで1記事のボリュームになるので今回省きます。
ググれば記事は出てきますが、簡単に文章で説明すると、
Dockerはコンテナ型の仮想化、Vagrant(正確にはVirtualbox)はホスト型の仮想化です。
VagrantはゲストOS、カーネルを仮想化するためオーバヘッドが大きく重たいです。
DockerはホストOS、カーネルを共通部分としてコンテナを仮想化するため軽量です。
ただしコンテナ乱立など環境を汚しやすいですし、ホストOSに依存するためうまく動かないみたいなケースもでてくるので一長一短な気がします。
個人的にはVagrantの方が好きです。

Docker&Vagrantで環境構築

VagrantでゲストOSとして仮想化し、その中でDockerイメージでWebサーバとPHPを導入してLA(M)P環境を作りたいと思います。
弊社でよく使われるPHPと、Webサーバ用にapacheですね。

  1. Virtualboxをインストール
    https://www.virtualbox.org/
  2. Vagrantをインストール
    https://www.vagrantup.com/
  3. vagrant box取得(centOS7の場合)
vagrant box add centos/7
  1. プラグインを取得(Dockerを使うため)
vagrant plugin install vagrant-docker-compose
  1. Vagrantセットアップ
# セットアップ用のスペース作成
mkdir {セットアップDIR} & cd {セットアップDIR}
# Vagrantfile作成
vagrant init centos/7
# 作成されたVagranfileを編集・書き換え
vi Vagrantfile
# コメントアウト
config.vm.network "private_network", ip: "192.168.33.10"
# 追記
# Docker Settings(run:alwaysはvagrant up時にdocker-compose up -dが実行される)
config.vm.provision :docker
config.vm.provision :docker_compose, yml: "/vagrant/docker-compose.yml", run: "always"
# docker-compose.yml作成
vi docker-compose.yml
# 追記(phpとapacheのimage)
version: '3'
services:
  web:
    image: php:7.4-apache-buster
    ports:
      - "80:80"
  1. phpinfoが記載されているファイル作成
vi index.php
# ブラウザ確認用
<?php
phpinfo();
  1. Vagrant起動
vagrant up
  1. ブラウザで確認(192.168.33.10)

ぶっちゃけこれだけではあまり恩恵ない気がしてきた・・・
さらにimageに追記したり、FWだったらそれ入れる用のシェルを追加すると・・・チーム開発などでは有効活用できそうな気がします。
Laravelだとより便利なものがあり、Vagrantだとhomestead、DockerだったらLaraDockでもよさそうですね。
共通化できるものは共通化するIaCにしていきたいですねー。

最後に

こんな感じで普段の私は、環境構築をささっとやっています。
これが便利だよ、おすすめだよってものがあればぜひ教えていただきたいです。
アイスタイル では一緒に働く仲間を募集しております。
以下リンクからぜひチェックしてみてくださいね。
株式会社アイスタイル採用ページ

#アイスタイル19卒 #@cosme shopping担当 #格闘技 #尾張のエンジニア