インフラ・DevOps界隈で話題となり、いまではごく普通に使われるようになったDockerについて、これまでインフラ等の技術に疎かったエンジニアが調べてみました。この記事では勉強中のアウトプットとして、いま勉強中のDockerに関する基礎的な内容をまとめていきたいと思います。
- Dockerとは?
- Dockerはどのように動くのか
- Dockerを使用する理由
基本的に「Dockerとは何ぞや」という部分をカバーしていければと思っています。自分の調べたことや考えたこと、感じたことを文字にするのは非常に有効な学習方法だと思っています。
Dockerとは?
まずはDockerについて整理していきます。DockerとはDocker社が開発している、コンテナ型の仮想環境を作成、配布、実行するためのプラットフォームのことです。
Dockerは構築・テスト・デプロイするための環境を素早く提供するためのソフトウェアになります。コンテナと呼ばれるソフトウェアを小さなパッケージにしたユニットを使用することで、仮想環境の準備を素早く提供することのできる技術になります。
Dockerは「コンテナ」と呼ばれるイメージを使用して環境を構築するのですが、これによって様々な利点が生まれました。環境の元となるコンテナは複製がしやすく誰彼・場所を選ばずに環境が作れること、ファイルを共有しやすいこと、作り直しが容易にできること、といった特徴があります。
Dockerはどのように動くのか
Dockerの優れているところは「仮想化」という技術を、よりスピーディにしたことかもしれません。「コンテナ」と呼ばれる仮想化の技術を使用することが革新的だとも言えます。
従来、仮想環境というのはサーバーに対してVMwareやVirtualBoxといった仮想化ソフトウェアをインストールすることで環境を「仮想的に実現する」というものでした。これはソフトウェア内にOSをインストールして、すべての環境を作り直す必要がありました。
これに対してDockerは「Docker Engine」と呼ばれる土台に「コンテナ」を配置して、サーバーのカーネルを利用して隔離することで、疑似的に仮想環境を用意することができるようになっています。
VMwareといった仮想環境は、OSの上に複数のOSをのっけて動かすものですが、Dockerは1つのOS上に仮想的な「OSっぽいもの」が存在し、1つのOSをDocker Engineを経由して共通利用するため、軽量で高速な起動・停止をすることができます。
そうした軽量、かつ高速、そして手軽に環境を構築できる「コンテナ型」の仮想化技術であるDockerは急速に、インフラ・DevOps界隈に広がっていったということになります。
Dockerを使用する理由
私の場合はあんまりデプロイといったイベントに立ち会うことはないので、最低限の想像できる利便性としてあげられるのは「開発環境が統一できること」くらいかもしれません。
言語やアプリのバージョンを統一して開発環境を準備するのは容易なことではありません。その点でいうとDocerが動いている環境であれば、用意したDocker Imageを使うことですべての開発者が同一の環境を使用することができます。これは開発するうえでも同一基準で開発を進められるため非常に強力なメリットとも言えるでしょう。
他にもインフラエンジニアのサーバー構築手順のテストやDevOpsにおけるCI(Continuous Integration)やCD(Continuous Deployment)といった分野において、コンテナを利用したメリットは多くあります。とにかく環境をコマンドでサクッと作成できるのは作業効率化という面、また気軽さという点では非常に有効であると言えるでしょう。
Docker とは | まとめ
Dockerを触ってみてわかったのは「環境が即座に構築できるの便利」ということでした。自分も以前の開発案件では、開発環境をクリーンインストールして標準化させたVMware用のイメージを用意して・・・などとやった経験があります。
おまけにサーバー環境やDB環境といった、ちょっと面倒な作業がコマンド一発でできるのは衝撃的ですよね。さらに「何度も作って、何度も壊すことができる」というのも安心ですし、Docker Imageとして配布も楽々なのは良いですよね。
私自身はWindowsが基本OSとなるアプリ開発案件ばっかりやってきましたが、そういう私でさえ、Dockerが持つインフラ面の「コンテナ技術」は衝撃を受けました。まだ基本的な部分しか触っていないのですが、時間をかけてゆっくりとDockerに慣れ親しんでいきたいと思っています。