#Dockerとは
インフラ業界やDevOpsで注目されているコンテナ型の仮想環境。Docker社が開発したもので、これまでの開発・配布・実行の方法を根本的に変化させたものといっても過言ではありません。Dockerを利用することでデスクトップPCであろうが、ノートPC であろうが、あるいはWindowsOSのPCであろうが、MacOSのPCであろうが全く同じように動作することが可能になります(サーバ、クラウドも問わない)。将来的には、どのシステム会社でもDocker、あるいはコンテナ型の仮想環境が当たり前のように導入されているでしょう。もうすでに普及されているかもしれませんが。。。
#コンテナとは
ここを知ってる方は読み進めてください。
以下、O'Reilly社 Dockerを抜粋
https://www.oreilly.co.jp/books/9784873117768/
コンテナとはアプリケーションを依存対象とともにカプセル化したものです。一見すると、コンテナは単に軽量な仮想マシン(VM)のようにみえます。VMと同じように、コンテナは隔離されたオペレーティングシステム(OS)の環境を持ち、その中でアプリケーションを動作させることができる。しかしコンテナには、これまでのVMでは実現が難しい、あるいは不可能なユースケースを可能にしてくれる利点があります。
・コンテナは、ホストOSとリソースを共有するので、
はるかに効率的です。コンテナの起動や停止は一
瞬で行えます。コンテナ内で動作するアプリケー
ションのオーバーヘッドは、ホストOSで直接動作
するアプリケーションと比較しても、ごくわずか、
ほとんどありません。
・コンテナのポータビリティは動作環境のわずかな違
いによって生ずるようなタイプのバグを、すべて撲
滅できる可能性があります。昔からの開発者が繰り
返してきた「自分のマシンでは動くんだ!」という
フレーズさえも終わらせてくれるかも知れません。
・コンテナは軽量なので、開発者は数十のコンテナを
同時に実行することが可能であり、実働環境そのま
まの分散システムをエミュレーションできます。運
用エンジニアはVMだけを使う場合に比べて、1台の
ホストマシンではるかに多くのコンテナを実行でき
ます。
・エンドユーザーや開発者にとって、クラウドへのデ
プロイをしない場合でも、コンテナは利点がありま
す。ユーザーは、設定とインストールの問題に数時
間を費やしたり、システムへの変更についても気を
もんだりすることなく、複雑なアプリケーションを
ダウンロードして実行できます。一方で、そういっ
たアプリケーションの開発者は、ユーザの環境や利
用可能な依存対象の差異を心配せずに済むようにな
ります。
この「O'Reilly Docker」に記載されているようにコンテナはVMのデメリットをたくさん解消してくれています。投稿者(私)も友人と共同開発を進めた際に、SQL Serverを使用したいがため、勝手にWindows環境、言語はC#で開発を進めていたことがあります。しかし、友人はMac Bookしかもっておらず、SQL Serverのローカル環境でデバッグ、また開発を進めることができずに結局Pythonで開発をし直したという経験があります。しかしこのコンテナを使用していれば、Mac bookユーザの友人も開発が進めることができ、さらに容易に開発環境やソースを配布することができたと思います。
#メリット
上記コンテナの最後とも多少かぶりますが、開発現場や共同開発をするうえでのメリットを5つ挙げます。
- どのOS、どのPCでも同じ動作が保証されている
- 開発環境を容易に他人に配布することができる
- 開発環境が壊れても、再度イメージを読み込むだけで開発環境が元通りになる。
- ホストOSの電源を切ったとしても、仮想環境の電源は切れない。また仮想上で動くOSであるため、オーバーヘッドが抑えられる。
- CI/CDの導入が楽。
以上。