毎年こんなに蒸し暑かったっけ?(´・ω・`) と思うような夏休みがやって参りました。
せっかくのお盆休みなので、エンジニアっぽい技術記事でも書いてみようと思います。
と言うのも、最近流行のDockerが今年の後半から来年にかけて、ぼちぼち本番環境でもブレイクするんじゃないかな?って思ってまして、私も実運用で使うべく練習しました。今後はインフラ関係の人も無関係でいられなくなってきますので、これを機にチェックしておきましょう。
では今回はそのDockerを超魔界簡単に紹介したいと思います。
Contents
What's どっかー?

見たまんまですが、どっかーと読みます。
仮想化したマシンやOSを扱う仮想化技術の進化版を言った方がわかりやすいかも知れません。
マシンのハードウェアから仮想化するハイパーバイザー型の仮想化技術に対して、OSの一部とミドルウェア・アプリケーション部分をコンテナーへ実行環境を抽象化します。
ハイパーバイザー型の仮想化技術に対して、コンテナー方の仮想化技術と呼びます。
従来の仮想化に比べて、毎回ハードウェアから仮想マシンを作ることもありませんし、
ミドルウェアやアプリケーションの実行環境(コンテナーイメージ)だけをリソースとして使用しますので、
CPU・メモリ・ネットワーク面でも実に軽量に動作します。
強引にまとめてしまうと、毎回使わない分までCPUやメモリを割り当てて仮想マシンを作成してアプリケーションを実行するよりも、
始めからアプリケーションで使うのに必要なリソースだけをコンテナーとして呼び出して使えばええやないのってコンセプトで作られました。
例えばテスト用とかの目的でWordPressだけ使えれば良い環境が欲しい場合は、
コマンド3~4発で終わります。(ホントに初期設定状態で良ければ)
それって何に使うの?
最も用途として多いのはテスト環境や開発環境の構築なんかです。
ミドルウェアより上の層でコンテナ化が出来るって大変便利な事でありまして、以下の様な用途で幸せになれます。
- Ruby on Railsのテスト環境・開発環境・本番環境をコンテナで分けておくとか(バージョンやプロジェクトごとにコンテナを分けるとか)
- Wordpressのテストサイト、開発サイト、本番サイトをコンテナで分けておくとか
- 色んなプロジェクトごとにRedmineをコンテナにして分けるとか
- Cake PHPなどのテスト環境・開発環境・本番環境をコンテナで分けておくとか
- その他、色々なモノを色々な用途に合わせて分けておくとか
- 色々な環境をコンテナで分けつつ、1台のVPSにブチ込んで安上がりにするため(笑)
とにかく色々な環境を分けて使うにあたって、コンテナ化しておくと移行したり展開するのがとっても楽になります。
毎回OSからインストールするのは時間もかかるので・・・(´・ω・`)
あとは開発やテストをする毎にVPSを使用するとその分余計に金がかかりますので、1台のVPSに複数のコンテナーを入れてしまった方が何かと安く上がります。(これ重要!)
まずは論より証拠なので、実際のDockerの扱い方を見ていきたいと思います。
Docker環境の構成(ローカルPCにインストールする場合)
自分の作業用PC(Windows or Mac)の場合はいきなりDockerをインストールする事は出来ません(´・ω・`)
これから何回かのシリーズに分けてこの環境を構築していきますが、DockerはLinux上でのみ動作しますので、はじめにローカルPCに仮想Linux環境を構築します。
WindowsやMacの場合はVirtual Boxをインストールする点が共通です。
どちらもWin / Macで対応していますので、vagrantを使うかboot2dockerを使うかは好みで選んで良いんじゃないですかね?
(使いやすいのはvagrantだと思うけど)
Docker環境を構築した後の話ですが先人たちが作ってくれたコンテナーを利用することも出来ますので、
予めWordpressやRedmineが既に構築されたコンテナーもすぐに利用することが出来ます。(←ゴールはここ!)
覚えておきたいDocker環境の概要
Dockerの構築や設定を語る上での必須となる用語がいくつかあります。
リポジトリ、イメージ、コンテナ、Dockerfile・・・etc
これらの用語を非常にわかりやすく、秀逸な形でまとめて下さっている偉大な先人がおりますので紹介します。
こちらのスライドを見て頂けると概要は掴んで頂けると思います。
(Ciscoシステムズの伊藤裕一さんと言うスゴイ方のスライド。このまとめ方は本当に秀逸だと思う)
基本の流れは以下の通りです。
- Dockerイメージをリモートリポジトリから持ってくる(docker pull)
- 持ってきたDockerイメージを起動する。(docker run)
- コンテナ上で色々インストールしたり、設定したりする
- 作成したコンテナをイメージとして保存する(docker commit)
- 作成したイメージをリモートリポジトリ(docker hub)へpushする(docker push)
- 作成したイメージを別のサーバーへデプロイする(別のサーバーでdocker pull)
まとめ
2014年くらいから流行してますが、AzureやAWSもDockerをサポートするようになりました。
今後はITインフラ関係の人も「Docker?何それ?おいしいの?(・ω・)」って感じだと色々と寒い展開になると思います。
最初は使いにくいと感じますが、慣れると便利なので是非使えるようになりましょう!
次回以降で何パターンかの環境構築方法を紹介します。
もうちょっと勉強したい方はこちら