Docker(ドッカー)
プログラムと必要な部品をひとつの箱に詰め、どんなパソコンでも全く同じように動かせる「標準規格コンテナ」です。
定義 Docker(ドッカー)とは、プログラムを動かすために必要なコード・設定・補助プログラム一式を「コンテナ」という標準規格の箱に丸ごとパッケージ化し、どのコンピュータ上でも全く同じように実行できるようにするソフトウェアプラットフォームです。
「私のPCでは動いたのに…」問題をスパッと解決!
エンジニアが開発中によく直面する悩みのひとつに、「自分のノートPCではちゃんと動くのに、なぜか本番サーバーに持っていくと動かない!」というトラブルがあります。パソコンごとにOS(Windows、Mac、Linux)が違ったり、インストールされているプログラミング言語や補助プログラム(ライブラリ)のバージョンがバラバラだったりすることが原因です。
かつて貿易港では、荷物の形や大きさがバラバラで船への積み込みが大変な作業でした。しかし、サイズが規格化された四角い「海上コンテナ」が登場したことで、トラック、鉄道、船のどこへでもスムーズに荷物を運べるようになりました。
Dockerはこの仕組みをコンピュータの世界に応用しました。プログラムを動かすのに必要なファイルと環境設定をひとつの規格化されたコンテナに丸ごとパッケージしてくれます。そのため、自分のPCで正常に動いた箱なら、他の人のPCやクラウドサーバーに運んでも、環境のズレを起こさず全く同じように動作します。
重たい仮想マシン(VM)より圧倒的に軽くて速い
Dockerが登場する前は、異なる実行環境を作るために「仮想マシン(Virtual Machine)」という技術を使っていました。しかし仮想マシンは、パソコンの中にもう1台パソコンを丸ごと再現する仕組みだったため、データ容量が何十ギガバイトもかかり、起動するのにも数分かかっていました。
一方、Dockerコンテナは、コンピュータの頭脳であるOSの心臓部(カーネル)を元のパソコンと共有します。プログラムを動かすためにどうしても必要な最小限の独立スペースだけを新しく作ります。
たとえるなら、仮想マシンが住人ごとに「家を一軒ずつ建てる」ものだとすれば、Dockerは「頑丈なマンションの中で独立した部屋をそれぞれ使い分ける」ような仕組みです。OSを丸ごと重複してインストールしないため、プログラムがわずか1秒で瞬時に起動し、メモリも大幅に節約できます。
もう一歩詳しく:イメージとコンテナの違い
Dockerを理解する上で、最も基本となる2つのキーワードが「イメージ」と「コンテナ」です。
イメージ(Image)は、たい焼きの「金型」や完成された「料理のレシピ」に当たります。プログラムのコード、実行コマンド、必要なツールが変更されない安全な状態で固められた「設計図」ファイルです。
このイメージに実行命令を出して、コンピュータのメモリ上で実際に動かしたものを「コンテナ(Container)」と呼びます。完成した設計図(イメージ)が1つあれば、全く同じ環境のコンテナを数十個、数百個でもクリック1つで一瞬にして量産できます。ウェブサービスの利用者が急増したときでも、サーバーを手軽に増やせるのはこのためです。
🤔 よくある誤解
Dockerは、PCの中にWindowsやLinuxを丸ごとインストールする仮想マシン(VM)と同じものである。
仮想マシンはOS全体を仮想化して丸ごと動かすため重いですが、Dockerは既存のOSのコア(カーネル)を共有し、プログラムの実行スペースだけを軽量に分離して使います。
🧺 日常で出会う場面
プログラムと環境設定を標準の箱(コンテナ)にまとめ、どんな環境でも軽量かつ全く同じように動かせるツールです。