Dockerによる楽々開発環境構築
なんで書こうと思ったの
WebアプリをHerokuにデプロイするときに、サーバー上でapt-getするためにはDockerでデプロイしなくちゃいけない ?っぽいことが分かったので勉強のためにまとめることにした。
※素人が書いてるのであまり参考にはしないでください。
Dockerは何のためにある?
色々あるが、基本的にはチームで開発環境を同じにするためにあると思ってる。
ユースケース
チームでWebアプリで開発していたとする。ソースコードはGithubで共有されているとしよう。 各人はGithubからソースコードをpullしてきて、それに変更を加えることで開発を進めていく。 すると、自分の加えた変更をMergeする前に実際の環境(開発環境)で正しく動くか確かめる必要があるだろう。 そのためによく使われるのが仮想環境と呼ばれるもの。さてこの仮想環境だが、自分の知る中で二種類ある。
二種類の仮想環境構築方法の比較
virtualboxを使った場合
virtualboxを使うと、以下の手順で任意のosの仮想環境を構築することができる。
- . ホストosにvirtualboxをインストールする
- . 任意のゲストosのisoファイルをダウンロードしてきて、virtualbox上にインストールする
- . ゲストos上でアプリのソースコードをgit pullする
- . ゲストos上で手順書に従って必要なアプリをapt-getなどでインストールする
- . その他、時刻や言語、データベースなどの設定をゲストos上でする
この方法の問題点は、手順一個一個に時間がかかることと、複雑であるためミスが起こりやすいこと。 しかも、各人がサーバーを使っている最中にアプリを追加でインストールしたりもできるので、各人の開発サーバーが異なる条件になってしまうリスクがある。 Dockerでは、これが解決する。
Dockerを使った場合
- . ホストosにDockerをインストール(WindowsならDocker for Windows)
- . ホストosでソースコードをgit pull してくる
- . チーム内で共有されているDockerfileをソースコードのあるフォルダに置き、以下のコマンドを叩く
$ docker image build [OPTIONS] PATH | URL | -
これだけ。ゲストのosとかはどこから持ってきてるの?っていうと、Docker hubっていうクラウドから持ってきてる。 イメージはこんな感じ↓
こうすることで、チーム内でDockerfileだけ共有していれば、みんな同じ仮想サーバーでテストができる。 何よりも楽。
他のメリット
デプロイにも使える
Dockerはもともと、単一のlinuxサーバー上にコンテナという区切りを設けて複数のサーバーを構築するのにつかわれるもの。 AWSやGoogle Cloud Platform、Herokuなどでもこの技術は使われている。つまりどういうことかというと、こういったサーバーにWebアプリをデプロイするときも Dockerが使えるということ。その時必要なのはアプリのソースコードとDockerfileだけになる。 実際Herokuのドキュメントでもその方法でデプロイできると言っている。
Dockerfileが手順書の代わりになる。
Dockerfileを読めば、要求性能が一目でわかるのは便利そう。
軽い
コンテナ技術はvirtualboxと違ってosをまるのせするわけではないのでDocker Images自体が軽い。 この辺はググったらいくらでも出てくるのでそっちを参照してください。
まとめ
Dockerを使うとチームで開発するときに便利だし、デプロイも楽になる。
参考
- この中の「Building Docker Images with heroku.yml」がDockerfileだけでデプロイする方法。Docker Image自体をデプロイする方法もある。