Dockerとは
一言でいうと、 コンテナ型仮想化ソフト。
Go言語で書かれている。
コンテナとは
アプリケーションを環境ごと パッケージング したもの。
各マシンの基盤と、アプリケーションが動作する基盤を完全に分離させることができるため、どこでも環境ごとアプリケーションを動作させることができるようになる。
Dockerのうれしさ
・デプロイが非常に楽になる
Dockerfileにパッケージングする情報を記述しビルドするとことで、まったく同じ環境を構築できる。
上書きDeployではなく、コンテナベースのDeployができる。
・インフラをコードで管理できるようになる
コンテナはDockerfileにより記述されるため、コードによってインフラを構築できる(Infrastracture as Codeの概念)
・事故を防げる
通常、サーバーは、どのような設定がなされているか、今どのような状態かを管理し続けなければならないが、Dockerは、状態管理をすることを放棄し、状態管理しないというアプローチを取っている。コロンブスの卵的な発想。
一度サーバーを構築すると、その後はサーバーに変更を加えずに、新しくサーバーを構築していく。
サーバーの中身に変更を加えたい場合は、新しくサーバーを作り、古いサーバーは破棄するという流れを取る。
これにより、動いているサーバーの設定変えたら動かなくなった!やばい!みたいな事故を予め防げる。
各種仮想化技術の発展と、AWSのようなサービスの台頭により急速に広まった考え。
・効率的なテストができる
Jenkinsと連携することで、Dockerコンテナ立ち上げて環境ごとアプリケーションのテストをすることも自動化して効率的なテストができるようになる。
状態に依存しているようなアプリのテストに向いている。
VMとコンテナの違い
VMにはVM毎にOSがあり、その上にライブラリやアプリなどがある。
コンテナは、ホストOSの上にDockerエンジンを挟んで、ライブラリやアプリがある。
なので、ホストOSでプロセスを見ると、各コンテナのすべてのプロセスが表示される。
VMと比べてオーバーヘッドが少ない分、高速に動く。
おまけ
個人的に面白いと思った用途
面白い例だなと思ったのはQuipperという会社の例で、Quipperでは、gitでブランチを切ってそれをGitHubにpushするたびに、Herokuでアプリケーションを立ち上げているそうです。
なぜそんなことをするかというと、開発じゃない人に「いまあの機能を開発しています」と言うときに、いままでなら開発用サーバにデプロイした後で見てもらったり、あるいはローカルにプロキシみたいなのを立てて、依頼があれば見せる、という感じだったと思うのですが、この方法だと git pushするたびにHerokuでアプリが立ち上がってURLが付くので、プロジェクトマネージャみたいな人が機能を確認するときに、いつでもプルリクを見てURLからアプリを見て確認できる。コミュニケーションが非同期になるのが非常に良くて。
元リンク:http://www.publickey1.jp/blog/14/immutable_infrastructure_2.html
開発者だけに限らず、関係者もその恩恵に授かれる。
作業内容
以下のリンクを参考に動かしてみました。
「初心者による初心者のための Docker ~ Nginx を動かす ~」:
http://qiita.com/kasaharu/items/d4654193d75c67d65226
参考資料
- Dockerとはなにか?どこで使うべきか?:http://deeeet.com/writing/2014/05/01/what-is-docker/
- 最近のインフラ系ツールが多すぎて何が何だかわからない!からの卒業:http://qiita.com/kasaharu/items/59b8d3a76b4a22eab88e
- Immutable Infrastractureについて:http://apatheia.info/blog/2013/08/10/immutable-infrastructure/
- 初心者による初心者のための Docker ~ Nginx を動かす ~:http://qiita.com/kasaharu/items/d4654193d75c67d65226
- 今からでも間に合うDockerの基礎。コンテナとは何か、Dockerfileとは何か。Docker Meetup Tokyo#2:http://www.publickey1.jp/blog/14/dockerdockerfiledocker_meetup_tokyo_2.html
- これから始める「DockerでかんたんLAMP環境 for CentOS」:http://knowledge.sakura.ad.jp/tech/1811/
- Docker とは - Docker User Guide:http://qiita.com/zembutsu/items/bbf740839c887835f2ee
- Immutable Infrastructureはアプリケーションのアーキテクチャを変えていく、伊藤直也氏(前編):http://www.publickey1.jp/blog/14/immutable_infrastructure_1.html
- Immutable Infrastructureはアプリケーションのアーキテクチャを変えていく、伊藤直也氏(後編):http://www.publickey1.jp/blog/14/immutable_infrastructure_2.html