はじめに
この投稿はアイスタイル 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ですね。
- Virtualboxをインストール
https://www.virtualbox.org/ - Vagrantをインストール
https://www.vagrantup.com/ - vagrant box取得(centOS7の場合)
vagrant box add centos/7
- プラグインを取得(Dockerを使うため)
vagrant plugin install vagrant-docker-compose
- 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"
- phpinfoが記載されているファイル作成
vi index.php
# ブラウザ確認用
<?php
phpinfo();
- Vagrant起動
vagrant up
- ブラウザで確認(192.168.33.10)
ぶっちゃけこれだけではあまり恩恵ない気がしてきた・・・
さらにimageに追記したり、FWだったらそれ入れる用のシェルを追加すると・・・チーム開発などでは有効活用できそうな気がします。
Laravelだとより便利なものがあり、Vagrantだとhomestead、DockerだったらLaraDockでもよさそうですね。
共通化できるものは共通化するIaCにしていきたいですねー。
最後に
こんな感じで普段の私は、環境構築をささっとやっています。
これが便利だよ、おすすめだよってものがあればぜひ教えていただきたいです。
アイスタイル では一緒に働く仲間を募集しております。
以下リンクからぜひチェックしてみてくださいね。
株式会社アイスタイル採用ページ