【ざっくり解説!】Dockerって何?Dockerについて調べてみた!

今回はこのような質問をいただきました。

なんとなく使ってたけどDockerって何?
使い方は説明できるけど概念を説明するってなると難しいですよね。
そこで今回はこちらの質問について解説していきます!
概要
今やWeb開発において欠かせない存在となっているDocker。
なんとなくは説明できるけど実際にどんなものかと聞かれたら説明できないので調べてみました。
なんとなくで使っている人も多いと思うので、まずはDockerのイメージを掴んでもらいたい。
Dockerって何?
Wikipediaによると以下のようにまとめられていました。
Dockerは、コンテナ仮想化を用いてアプリケーションを開発・配置・実行するためのオープンソースソフトウェアあるいはオープンプラットフォームである。 Dockerはコンテナ仮想化を用いたOSレベルの仮想化によりアプリケーションを開発・実行環境から隔離し、アプリケーションの素早い提供を可能にする。
コンテナ仮想化という技術を使っているんだなってことはわかったと思うので、今度はコンテナ仮想化について解説します。
コンテナ仮想化って何?
Linuxの中に「OS全体から隔離された部屋(コンテナ)」を用意する技術です。
このコンテナ仮想化とよく比べられるのがVirtualBox(Vagrant)のような仮想マシンの技術ですね。
DockerはOS上にコンテナを建てるのに対して、VirtualBox(Vagrant)はOSの上にOSを立ち上げているような状態となります。
VirtualBox(Vagrant)との違いは?
私も少しVirtualBox(Vagrant)を使ったことがあるのですが、Dockerに比べるとめちゃくちゃ重いです。
VirtualBox(Vagrant)にはカーネルも含まれているので重くなってしまいます。(カーネルはOSの中核部分に位置するソフトウェア)
こちらのイメージがわかりやすかった。
一方、DockerではOSの容量を少なくするために軽量のLinuxであるAlpine Linuxを利用することが多いです。
昔はWindowsではDockerは使えなかった
コンテナ仮想化はLinuxの技術だったので数年前まではWindowsでは使えなかったんですよね。
WindowsでDockerの開発環境が必要な人は仮想マシンでLinuxを立ち上げて、その中でDockerを動かしていました。
どんなときに使ってる?
私が初めてDockerを必要としたのはMySQL5.6の環境とMySQL5.7の環境が必要になったときでした。
Macには1つのMySQLしかインストールすることはできないので通常では両立はできません。
そこでDockerの技術を使って、MySQLをコンテナ仮想化しました。
他にもRedisやX-Rayデーモンなんかをコンテナ仮想化して使っている案件も多いです。
開発環境で必要なものはDockerを使えばほとんどインストール不要ですね。
コンテナをまとめて立ち上げてくれるのがdocker-compose
開発でMySQL5.7とRedisとX-Rayデーモンが必要なんだけど…ってときにワンコマンドで全部立ち上げてくれるのがdocker-composeです。(ECSのタスク定義もこのイメージ)
こっちの部屋(コンテナ)は3306ポートにつないで、こっちの部屋(コンテナ)は6379ポートへ繋ごう!みたいなイメージです。
あとがき
ざっくりまとめると、直接MacやLinuxにMySQLをインストールするのではなくて、隔離された部屋を用意してそこにMySQLをインストールしようってことです。
今はDockerを使わないことのほうが珍しいのでイメージだけでも掴んでおきたいですね。
参考
https://qiita.com/Hibikine_Kage/items/77a32b8c715fb698d5a7
https://teratail.com/questions/187277
https://wa3.i-3-i.info/word15.html