Dockerのコンテナ、ただの「箱」だと気づいたら理解できた話
はじめに
エンジニアとして働き始めて約半年、実務でDockerを使ってはいるものの、全く理解していないことれいです。
DockerfileをAIに聞いてコピペし、
コマンドでなぜか起動するので、終わりです。
細かい部分は見なかったふりをしてきました。
しかし、これでいいのでしょうか?
…よくないです!
「このDockerfile使って立ち上げたら環境構築できますよ。」
と、澄ました顔で返事をする先輩エンジニアに私はなりたいのです!
というわけで、基礎の基礎から学んだ内容を自分の言葉でまとめました。
今回はコンテナについてです。
コードベースではなく、概念を理解してもらうことを目標にまとめました。
Dockerを勉強するとっかかりとして、気軽に読んでもらえたらうれしいです!
コンテナとは?
Dockerのコンテナとは、ソフトウェアが入っている箱のことです。
私はコンテナと聞くとこっちのコンテナが思い浮かびます。
そう、船のコンテナですよね!

船に積まれるコンテナは密閉されており、大量の荷物を他国に送ることができます。
また、サイズは世界的な規格で決まっているので、世界中の港や船で同じように扱うことができてしまいます!
会社ごとに中身が違っても、一つの箱に入れることで、混ざることなく管理できる仕組みが船のコンテナです。
実は船のコンテナ、Dockerのコンテナと非常に似ています!

船のコンテナの中身は会社の荷物でしたが、Dockerのコンテナはソフトウェアがいくつも入っています。
ソフトウェアの例は、次のようなものです。
- OS
- プログラミング言語
- サーバー・DB
- Nginx
- Apache
- MySQL
- MongoDB
- その他
コンテナごとにどのソフトウェアを使うか決めておき、外部に影響されない環境を作り出せます。

プロジェクトAではPythonとMySQLを使いたいけど、プロジェクトBではNodeとMongoDB使いたい。
こういうときに、それぞれコンテナを作れば、独立した環境が構築できます!
コンテナはOSの上に乗っている
コンテナはただの箱のようなものです。
箱単体では何もできません。
あなたが使っているOSの上にのせて、「起動」の命令をすることで初めて動き出します。

OSとは、Windows・Mac・Linux、のいずれかです。(人によって違いますね)
Windows環境の人はWindows上にコンテナを作り、Mac環境の人はMacの上にコンテナを作ります。
また、コンテナ内のソフトウェアとOS上のソフトウェアは独立しており、干渉しません。
そのため、Pythonなどのバージョンを、コンテナ内とOS上で分けることもできます。
Dockerの役割
ここまでの説明で、コンテナがOS上に乗っているイメージができたと思います。
しかし、今のままでは動かすことができません。
それは「OSの上にコンテナという箱を乗せているだけ」だからです。
「箱」を動かすためには、起動・停止などの指示をする管理者が必要です。
この管理者の役割をDockerが担っています!!

DockerはOSとコンテナをつなぐ接着剤のようなものです。
Dockerコマンドという命令を用いることで、OSからコンテナに対して命令できます。
コンテナを起動したいときは次のようなコマンドを使います。
ほかにもいくつかコマンドがあります。
コマンドを介してOS上にあるコンテナを操作しているのです。
まとめ
- コンテナとは、ソフトウェアが入っている箱のこと
- コンテナはOSの上に乗っている
- OSとコンテナをDockerがつないでおり、コマンドを介してコンテナを操作できる
終わりに
今回は、コンテナが何を指しているのかをイメージできるように図を多めに解説しました。
コンテナが何かさえわかれば、「イメージ」「各コマンドの意味」も簡単に理解できるようになります。
参考になった方がいれば、シェアしていただければ喜びます!