こんにちは、こちょすです。
今回はDockerの概要についてご紹介します!
僕も最近になってDockerを使うようになって『なにこれ便利じゃん!!』って思ったので、この記事を読んでいただくみなさんにも同じような感動を持ってもらえたら良いなと思いつつ書いていきます!
では行ってみましょう!💪
こんな方におすすめ
- Dockerって聞いたことはあるけどどんな技術なのかを知らない
- 仮想化(VM)との違いがわからない
- 毎回環境構築に手間取っていてアプリ開発に時間が取れない
目次
Dockerってなに?まずは概要を知ろう!
「Docker」という言葉を聞いたことがあるかたは多いと思いますが、「なんだか取っ付きにくそう、、、」とか「難しそう、、、」といったイメージを持っている方も多いのでは無いでしょうか。
実際僕も元々はそんなイメージでした笑
ただ、Dockerを触っていくうちに、むしろ開発効率を爆上げできるツールかもと思うようになりました。
Dockerとは入れ物
まず、Dockerというのは一言で言えばコンテナ技術です。
コンテナとは英語で「Container」で、意味は『入れ物』とか『容器』になります。
なのでまずはDockerと聞いたら頭の中で『入れ物なんだなー』とイメージできれば第一ステップ突破です!👏
入れ物になにを入れるか
では次に思うのは、『Dockerという入れ物になにを入れるの?』だと思います。
Dockerを理解するためにはまずは仮想化技術を理解する必要がありますので、そちらを説明していきます。
少し長くなりますがお付き合いください!
仮想化技術って?
仮想化技術というのはVM (Virtual Machine)と言われるソフトウェアを使う技術のことです。
みなさんパソコンを持っている方は、WindowsかMac、Linuxを使っている人が大半だと思います。これらはOSと呼ばれるパソコンの基盤となっている部分です。
ExcelなりChromeなりのソフトウェアを使っていると思いますが、これらは大体どのOS上でも動くように作られています。
ただ、アプリケーションの開発をしている方はわかるかもしれまsんが、Linux上でしか動かないソフトウェアなども存在しますし、自分はWindowsしか持っていないけどLinux上で動くアプリケーションを開発したいと言う人もたくさんいると思います。
これを解決しよう!ということで開発されたのがVM wareです。
一言で言えば、『自分の持っているOS上に別のOSを乗っけて、その上でアプリケーションを動かそう!』という技術です。
イメージはこんな感じです。
インフラストラクチャというのは「どこで動いているか」です。今回は自分のパソコンだと思ってもらえれば良いと思います。
他にも、AWSをはじめとしたクラウドであったり、会社であれば自社のオンプレサーバなどもありますね!
ホストOSというのが自分のMacなり、Windowsなりですね。その上にいるハイパーバイザーという人が、VM上の仮想サーバとやりとりをしています。
仮想サーバの部分が仮想化技術の肝心の部分で、みていただいてわかるとおりゲストOSと呼ばれるOSの上に、ライブラリやアプリケーションが動いています。
VMでは仮想サーバ毎にゲストOSを持っています。(ここはDockerを理解する上で重要な部分なのでぜひ覚えておいてください!)
VMとの違いからみるDockerの仕組み
VMの動く仕組みをイメージしてもらったところで、次はDockerの仕組みをVMと対比しながら見ていきます!
早速、上のイメージ図のDockerバージョンを出してみたいと思います。
ドンっ!!
どうでしょうか??いくつか変わっているところがあるので、間違い探しをしてみてください!
・
・
・
では答え合わせをしましょう!
ポイント
1 ハイパーバイザーの代わりにDockerエンジンになっている。
2 Dockerエンジンの上に乗っている3つの箱がコンテナになっている。
3 コンテナ毎にOSを持っていない
まずは1について!
仮想化技術の場合にはハイパーバイザーがホストOSと仮想化サーバ間のやりとりをしていました。
一方でDockerの場合にはこのDockerエンジンがその役割を担っています。
ハイパーバイザーに比べてオーバーヘッドが少なく、軽量であるため、複数の仮想サーバをVM上に立ち上げるときに比べて素早く起動や処理をすることができます。
次は2と3について!
VMだと仮想サーバを乗っけていた部分に、Dockerの場合にはコンテナを乗っけています。
このコンテナの中にはアプリケーションと、そこに関わるライブラリ群が含まれます。
VMとの違いはコンテナ毎にOSを持たないことです。
ではDockerにおいてOSはなにを使うのか?その答えばホストOSを使います。
というわけで前置きが長くなりましたがこの章の質問『コンテナという入れ物になにを入れるか』は、
『アプリケーションとライブラリ群』ということになります。OSは含まれません!
Dockerを使うことのメリット
ではDockerを使うと何が嬉しいのでしょうか。
そのメリットについてご紹介します。
メリット1 処理・起動が早い
上でみてきたように、DockerではOSを個別に持つわけではありません。
みなさんもパソコンを使うとき、起動ボタンを教えてから数秒〜数分待っていると思います。これはOSの起動を待っているわけです。
DockerではホストOSを使うので、起動を待つ必要はなく、軽量なDokerさえ立ち上げてしまえばすぐに使い始めることができます。
また、OSが無いことのメリットは大きく、VMのようにOS毎にCPUやメモリやストレージなどを割り当てるような処理が必要がなく、あくまでもDockerに対してリソースを割り当てるだけでいいのでオーバヘッドが少なくなり、処理速度が早くなります。
メリット2 環境構築をコード化できる
今回は仕組みを主に説明してきましたが、DockerにはDockerfileやdocker-compose.ymlと呼ばれるものを記述することで、コンテナ内に構築したいライブラリ群やフレームワーク、ApacheのようなWEBサーバのインストールなどをそれぞれのバージョンも指定してコマンド1つで実行することができます。
これはつまり、ファイルを共有すればチーム内で全員同じ環境を瞬時に作ることができたり、パソコンを変えたとしてもこれらのファイルさえGitなどに保管しておけば元の環境をすぐに作れることを意味しています!
・・・すごくないですか!!笑
これが Infrastructure as Code(IaC)と呼ばれる考え方です。一言で言えば環境構築をコードにしちゃおう!ですね!
今後実際にDockerを使って環境構築をしてアプリケーションを動かす部分も記事にしたいと思いますので乞うご期待です!
メリット3 環境構築済みのコンテナイメージが揃っている!
メリット2を見て便利だと思っていただけた方も多いかもしれませんが、「結局最初に自分で色々書かなきゃいけないんでしょ?」という鋭い方もいるかもしれません。
もちろんゼロからDockerイメージを作成することも可能ですが、それが面倒だと言う人のために、Docker Hubと呼ばれるサービスがあります。
Docker Hubというのは公式Dockerイメージ置き場で、用途ごとに良い感じのDockerイメージが用意されています。例えば「コンテナの中にWordpressを構築したい」と言う場合、Wordpressが公式に出しているイメージを使えば一瞬で環境構築が可能なんです!
いかがでしたでしょうか?文章ばかりになってしまいましたが、Dockerという技術の威力を少しでも感じてもらえたら幸いです。
さらに詳しく知りたい!と思った方は、以下の書籍とかが取っつきやすく、さくさく読み進められるので入門書としておすすめです!
次回はDockerを使って実際に環境構築やアプリ開発に関する記事を書きたいと思いますのでぜひ見てくださいね!
ではまた!!