Skip to content

授業で使う開発環境をDockerで構築した

Last updated on 2019/7/11

背景

PHPなどを授業で教える場合、XAMPやMAMPをインストールさせて、自分のローカル開発環境を作ることが多い。

XAMPやMAMPでの全く問題ないが、Dockerで開発環境を作るといろいろメリットを受けることができるので、今後の授業での開発環境構築ではDockerを勧めていきたい。

Dockerとは?

旧dotcloud社(現docker社)が開発したLXCユーティリティ。LXCとはOSの仮想化技術の1つで、VMに比べて軽量であることが特徴(コンテナと呼ばれる)。 つまりどういうことかというと Dockerは軽量な仮想マシンを簡単に構築することができ、インフラを含めたアプリ全体をまるまる、コンテナという箱に閉じ込めることができる。また、コンテナの配布やバージョン管理も可能。

https://ja.wikipedia.org/wiki/Docker

どうしてDockerで環境構築するといいのか?

メリットとしては、全員の環境の一致で環境依存の動かない問題が防げる。

一般的にデメリットの一つに挙げられる学習コストを学生の早いうちに学んでほしいという気持ち。

Dockerで開発環境を作る

Dockerで「PHP + MySQL + Nginx」をもった開発環境を構築していく。

Dockerのインストール

まずDockerが入っていなければ、インストールしていく。

Win

下記のURLからインストーラーをダウンロードし、「Docker Desktop for Windows」をインストールします。

https://hub.docker.com/editions/community/docker-ce-desktop-windows

Mac

Homebrewを使う場合

$ brew cask install docker
==> Satisfying dependencies
==> Downloading https://download.docker.com/mac/stable/30215/Docker.dmg
######################################################################## 100.0%
==> Verifying SHA-256 checksum for Cask 'docker'.
==> Installing Cask docker
==> Moving App 'Docker.app' to '/Applications/Docker.app'.
🍺  docker was successfully installed!

Homebrewを使っていない場合は、下記URLからダウンロードできる。

https://hub.docker.com/editions/community/docker-ce-desktop-mac

プロジェクトの作成

Dockerがインストールできたら、プロジェクトを作っていく。

作業フォルダを作り、その中に docker-compose.yml という設定ファイルを作る。

mssql, nginx, php, www というフォルダも中に作り、

nginxの中にはnginx.confという設定ファイル、phpの中にはDockerfilephp.iniという設定ファイルを作る。

下記のようなフォルダ構成になる

├── docker-compose.yml
├── mysql
├── nginx
│   └── nginx.conf
├── php
│   ├── Dockerfile
│   └── php.ini
└── www

設定ファイルの編集

設定ファイルの中身は下記の通りです。

コマンドの実行

設定ファイルを全てかけたら、コマンドを実行して、Dockerを起動させます。

Dockerコマンド

コンテナのビルド

docker-compose.ymlの内容に基づいてイメージを作成します。

docker-compose build
コンテナの起動
docker-compose up -d

※ -dをつけることにより、コンテナをバックグラウンドで起動し、実行し続けた状態になります。

コンテナの確認
docker ps
コンテナの停止
docker-compose stop
オプションの詳細

http://docs.docker.jp/compose/reference/up.html

用語集 & 日本語ドキュメント

http://docs.docker.jp/glossary.html

実際に起こったトラブル

データベースの設定周りでホスト名を設定していなかったので、 dbというホスト名でPHPでドライバを使い接続した。
この辺が最初混乱していた。

終わりに

作った環境を人に共有する時、環境周りで動かない問題やバージョン違い、インストール忘れで動かないことがなくなったので、ある程度トラブル回避にはなっている。

作ってみれば、案外簡単。