ことれいのもり

Dockerのコンテナ、ただの「箱」だと気づいたら理解できた話

はじめに

エンジニアとして働き始めて約半年、実務でDockerを使ってはいるものの、全く理解していないことれいです。

DockerfileをAIに聞いてコピペし、


docker compose up -d


コマンドでなぜか起動するので、終わりです。

細かい部分は見なかったふりをしてきました。


しかし、これでいいのでしょうか?

…よくないです!

「このDockerfile使って立ち上げたら環境構築できますよ。」

と、澄ました顔で返事をする先輩エンジニアに私はなりたいのです!


というわけで、基礎の基礎から学んだ内容を自分の言葉でまとめました。

今回はコンテナについてです。

コードベースではなく、概念を理解してもらうことを目標にまとめました。

Dockerを勉強するとっかかりとして、気軽に読んでもらえたらうれしいです!

コンテナとは?

Dockerのコンテナとは、ソフトウェアが入っている箱のことです。


私はコンテナと聞くとこっちのコンテナが思い浮かびます。 そう、船のコンテナですよね!


船のコンテナ


船に積まれるコンテナは密閉されており、大量の荷物を他国に送ることができます。

また、サイズは世界的な規格で決まっているので、世界中の港や船で同じように扱うことができてしまいます!

会社ごとに中身が違っても、一つの箱に入れることで、混ざることなく管理できる仕組みが船のコンテナです。


実は船のコンテナ、Dockerのコンテナと非常に似ています!


船のコンテナとDockerのコンテナ比較


船のコンテナの中身は会社の荷物でしたが、Dockerのコンテナはソフトウェアがいくつも入っています。

ソフトウェアの例は、次のようなものです。


  • OS
    • Ubuntu
    • Linux
  • プログラミング言語
    • Python
    • Node.js
  • サーバー・DB
    • Nginx
    • Apache
    • MySQL
    • MongoDB
  • その他
    • git
    • curl
    • vim
    • bash


コンテナごとにどのソフトウェアを使うか決めておき、外部に影響されない環境を作り出せます。


OSとコンテナの関係


プロジェクトAではPythonとMySQLを使いたいけど、プロジェクトBではNodeとMongoDB使いたい。

こういうときに、それぞれコンテナを作れば、独立した環境が構築できます!

コンテナはOSの上に乗っている

コンテナはただの箱のようなものです。

箱単体では何もできません。

あなたが使っているOSの上にのせて、「起動」の命令をすることで初めて動き出します。


image4


OSとは、Windows・Mac・Linux、のいずれかです。(人によって違いますね)

Windows環境の人はWindows上にコンテナを作り、Mac環境の人はMacの上にコンテナを作ります。


また、コンテナ内のソフトウェアとOS上のソフトウェアは独立しており、干渉しません。

そのため、Pythonなどのバージョンを、コンテナ内とOS上で分けることもできます。

Dockerの役割

ここまでの説明で、コンテナがOS上に乗っているイメージができたと思います。

しかし、今のままでは動かすことができません。

それは「OSの上にコンテナという箱を乗せているだけ」だからです。

「箱」を動かすためには、起動・停止などの指示をする管理者が必要です。

この管理者の役割をDockerが担っています!!


OS・コンテナとDockerの関係


DockerはOSとコンテナをつなぐ接着剤のようなものです。

Dockerコマンドという命令を用いることで、OSからコンテナに対して命令できます。


コンテナを起動したいときは次のようなコマンドを使います。


docker container run


ほかにもいくつかコマンドがあります。

コマンドを介してOS上にあるコンテナを操作しているのです。

まとめ

  • コンテナとは、ソフトウェアが入っている箱のこと
  • コンテナはOSの上に乗っている
  • OSとコンテナをDockerがつないでおり、コマンドを介してコンテナを操作できる

終わりに

今回は、コンテナが何を指しているのかをイメージできるように図を多めに解説しました。

コンテナが何かさえわかれば、「イメージ」「各コマンドの意味」も簡単に理解できるようになります。

参考になった方がいれば、シェアしていただければ喜びます!