マンションの各部屋は、壁で仕切られています。
隣の部屋の中身は見えないし、触れない。
でも、水道や電気といった建物の基盤は共有している。
Docker のコンテナも同じです。
各コンテナは完全に独立しているけれど、
マシンの基盤(OS の心臓部)は共有しています。
ライブラリのバージョンが競合したり、
1つ更新すると他が壊れたり、
「自分の環境では動く」問題が起きる。
各コンテナが独自のバージョンを持てる。
他のコンテナに影響しない。
チーム全員に同じ環境を配れる。
CPU・メモリ・ディスクなどのハードウェアを直接操作する唯一の存在。
プログラムからの命令を受け取って、カーネルに橋渡しする役目。
コマンドやライブラリなどがこれにあたります。
mysql, nginx, ruby など、すぐ使える公式イメージが揃っています。
慣れるまでは公式イメージを使うのが安心です。
Volume は、コンテナの外側(ホスト側のディスク)にデータを保存する仕組みです。
コンテナは入れ物、Volume は中身。
入れ物を捨てても、中身は出しておけば大丈夫。