ITエンジニアのTIPS集

Vagrant + Docker + PHP + MySQL + VSCodeでサクッと開発環境を作る

 今回はプログラミング環境に関する記事です。

 前回の記事では自分の PC で直接 Docker を動かしていましたが、今回は仮想マシンを使ってその中で Docker を動かすバージョンを作ってみましたのでその紹介になります。

 今回のものも Github に置いておきましたので、よかったら使ってみてください。

 matatabi3/ubuntu-vagrant-docker-base

目次

  1. まえがき
  2. 解説
    2.1. Vagrantfile
    2.2. bootstrap.sh
    2.3. ざっくりとした手順
  3. あとがき

1. まえがき

 今回の記事も、既に Docker や AWS ECS をバリバリ使って開発環境や本番環境を運用している人向けではなく、ほとんどDockerを使った経験が無い人がとにかくPHP動かせたらいいです、という人向けの記事になります。

 前回は直接自分の PC 上で Docker を動かすため、 MacOS や Windows を使っているとなかなかうまくいかないことが多いという課題がありました。

 そのため、仮想マシン(VirtualBox)で Linux 環境を構築し、その中で Docker を動かすという仕組みで、環境に依存する問題を極力減らすような取り組みをしています。
 ※ 2019/03/10時点のバージョンでは共有フォルダで自分の PC と仮想マシン上でファイル共有を行っているため、 MacOS や Windows 環境ではパフォーマンスが出にくい想定です。こちらはいずれ改善する予定です。

 まだまだ勉強不足なので、不備があればご指摘お願いします。


2. 解説

 基本的な構成は前回のものと大きく変えておらず、 Docker 立ち上げ前に Vagrant で仮想マシンを立ち上げ、仮想マシンにログインするという手順が増えるだけにしてみました。

 こちらをベースに Laravel 向けや CakePHP 向けにカスタマイズしていき、作業効率を高めていきたいなと考えています。

2.1. Vagrantfile

 Vagrant の設定ファイルです。 Vagrant についての解説は 公式 におまかせできればと思います m(_ _)m
 (仮想マシンを作成する際に、「OSはこれ、ネットワークの設定はこう、IPアドレスはこれ、みたいな設定を予め設定できるようになるものです)

 できるだけシンプルにしたかったので、今回は $ vagrant init でできたものをベースに少しカスタマイズしているだけです。

 boxファイル

config.vm.box = "ubuntu/bionic64"

 Ubuntuの18.04 系をベースに設定しています。

 ネットワーク周り

config.vm.network "private_network", ip: "192.168.66.10"

 Vagrant デフォルトが 192.168.33.x 系なので、被らないように 66 を指定しています。このIPの設定はDocker Compose 側にも設定しているので、変更する場合は各自でご変更ください。

 ファイル共有周り

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

 今回は全体をごっそり仮想マシン側に共有しています。仮想マシン側で好きにいじることができるようにしておくと、Linuxコマンドがそのまま使えるので何かと便利ですね。

 仮想マシンのスペック周り

vb.cpus = 4
vb.memory = "4096"

 仮想マシン側にそれなりに強力なスペックを、と少し大きめな設定になってますので、CPU数が少ない場合などは 2 や 1 への変更をおすすめします。

 bootstrap.shの実行

config.vm.provision :shell, path: "bootstrap.sh"

 起動時に実行されるスクリプトを設定しています。(ここが少し雑で、「初回のみだけ実行」「2回目以降は更新を」のような設定はまだしていません)

2.2. bootstrap.sh

 Vagrant 起動時に実行するスクリプトを用意しています。ベースはこちらからお借りしましたm(_ _)m

 変更は以下です。

# Access docker w/o sudo
usermod -aG docker vagrant

apt-get install -y docker-compose

 Vagrant 標準で使用するユーザー名が vagrant ユーザーなのでそのまま使えるように変更と、今回も Docker Compose を使用するので、パッケージマネージャからインストールするように実行を追加しています。

2.3. ざっくりとした手順

 全体的な使い方のイメージとしては、以下のようになります。

  1. Vagrant を起動する

    $ git clone git@github.com:matatabi3/ubuntu-vagrant-docker-base.git
    $ cd ubuntu-vagrant-docker-base/vagrant
    $ vagrant up
  2. 仮想マシンの中に入る

    $ vagrant ssh
  3. Docker を起動する

    vagrant@ubuntu-bionic:~$ cd share/docker
    vagrant@ubuntu-bionic:~$ docker-compose build
    vagrant@ubuntu-bionic:~$ docker-compose up

 Dockerがエラー無く起動できたらブラウザから http://192.168.66.10/mysql-test.php にアクセスして「connected」と表示されたら環境構築完了です。

 今回もリモートデバッグの設定を入れていますので、 VSCode で ubuntu-vagrant-docker-base ディレクトリを開いて、前回と同じような手順でリモートでバッグができるかと思います。


3. あとがき

 今回で自身の PC で Docker を動かさなくてもよくなるので、PC 環境が壊れにくい環境構築ができるようになるんじゃないかと思います。

 また、現状まだできていませんが、同じ Vagrantfile を使って MacOS は NFS でファイル共有、 Windows 版は別の仕組みで、と切り替えが自動でされるものにブラッシュアップしていこうと思います。

 やっぱり開発メンバーが好きな環境で開発できた方がモチベーションも上がるかと思いますし、同じ Docker 環境で開発することで再現性も高まってプログラミングに集中できるのはとても大事なんじゃないかなと思います。
 そのまま AWS ECS にデプロイしていくのも勉強していきたいなー(遠い目)と考えています。

 みなさんのプログラミング生活に少しでも貢献できたら幸いです。