PR

【図解】Dockerとは?初心者でもわかる「爆速」で「軽量」な理由

プログラミング
記事内に広告が含まれています。

IT業界で「クジラがコンテナを背負ったアイコン」を見たことはありませんか?これは、現代の開発現場で標準技術となったDocker(ドッカー)のシンボルです。

Dockerとは、一言でいえば「アプリケーションとその実行環境を、コンテナという部品にひとまとめにして運ぶ技術」です。
かつては環境構築に長い時間と複雑な設定が必要でしたが、Dockerはその常識を変えました。この記事では、Dockerがなぜ「爆速」で「軽量」なのか、その仕組みをやさしく解説します。

仮想マシン(VM)との決定的な違い

従来の仮想化技術には「仮想マシン(VM)」がありますが、DockerはVMとは仕組みが根本的に異なります。

VMは、ハードウェアレベルで仮想化を行い、1台のマシンの中に別々のOS(ゲストOS)を丸ごと起動します。
一方Dockerは、ホストマシンの「カーネル(OSの中核)」を共有し、プロセスとして環境を切り出す「OSレベルの仮想化」を採用しています。

たとえるなら、VMは「一軒家を建てる」イメージ。
土地に個別の基礎から家を丸ごと用意するため安全ですが、時間もスペースもかかります。
対してDockerは「マンションの個室」。
建物の基礎や設備(カーネル)を共有しながら、自分専用の部屋(コンテナ)だけを一瞬で用意できるのです。

この違いにより、起動時間は「分単位→秒単位」に、リソース消費は「大→小」へと劇的に改善されます。ただし、カーネルを共有する分、VMほど完全な分離ではないという点は覚えておきましょう。

Dockerfile・イメージ・コンテナの関係

Dockerの仕組みは「料理」に例えるとわかりやすくなります。

Dockerfile(レシピ):どのOSをベースに、何をインストールするかを記したテキストファイル

イメージ(レシピ本):Dockerfileをビルドして固めた、実行前の「型」

コンテナ(実際の料理):イメージを元に動き出した実行状態

Dockerfileはテキストファイルなので、Gitでバージョン管理・チーム共有ができます。「Dockerファイルを1つ実行するだけ」で、メンバー全員が同じ環境を数分で再現できるのは、この仕組みのおかげです。

注意点:データは消える「使い捨て」が基本

Docker初心者が最も陥りやすい罠が「データ消滅」です。コンテナは削除すると、中のデータもすべて消えてしまいます。

これを防ぐのが「ボリュームマウント」です。ホスト側のフォルダとコンテナ内を同期させることで、データベースの中身やソースコードの変更を安全に保持できます。「コンテナはいつでも壊して作り直せる」という思想を理解すると、より柔軟なシステム運用が可能になります。

Docker Composeで複数サービスを一括管理

実際の開発ではWebサーバー、データベース、管理ツールなど複数のサービスを連携させる必要があります。これを個別に起動するのは大変ですが、「Docker Compose」を使えばYAMLファイル1つで全サービスの関係性を定義し、コマンド一つで環境を立ち上げられます。IPアドレスの代わりに「サービス名」で通信できる点も、開発者にとって大きなメリットです。

Dockerは「OSの中身を賢く共有することで、圧倒的な速さと軽さを手に入れた技術」です。

速さ:OSのブート不要で、コマンド一発で環境が立ち上がる

軽さ:ハードウェア仮想化をせず、プロセスとして隔離するだけ

正確さ:Dockerfileという「テキスト」で環境を定義し、Gitで共有できる

まずは公開イメージを使ってWebサーバーを立ち上げてみることから始めてみましょう。ワンコマンドで環境が組み上がる快感を体験すれば、Docker以前の開発スタイルにはもう戻れなくなるはずです。

Dockerでよく使われるコマンド

Dockerの操作において頻繁に使用される主なコマンドは、イメージの作成、コンテナの実行・停止、および複数のコンテナを一括管理するDocker Compose関連に分けられます。

基本的なDockerコマンド

docker build -t [イメージ名] .
現在のディレクトリにあるDockerfileを使用して、指定した名前のイメージを作成(ビルド)します。最後に「.」を付ける必要がある点に注意してください。

docker run [イメージ名]
作成したイメージをもとに、実体としての「コンテナ」を起動させます。

docker stop [コンテナ名]
実行中のコンテナを停止させます。

docker rm [コンテナ名] 不要になったコンテナを削除します。

実行時によく使われるオプション

-p [ホスト側のポート]:[コンテナ側のポート]
ポートマッピングを行います。例えば、8080:80と指定すると、ブラウザでホストの8080番にアクセスした際にコンテナ内の80番ポートへ転送されます。

-d
コンテナをバックグラウンド(デプロイモード)で起動させます。

-v [ホスト側のパス]:[コンテナ側のパス]
ボリュームマウントを行い、ホスト上のディレクトリとコンテナ内のディレクトリを同期させます。これにより、ホスト側でファイルを変更するとコンテナ内にも即座に反映されます。

–gpus all
コンテナ内でGPU(NVIDIA製)を使用可能にするためのオプションです。

Docker Composeコマンド

複数のコンテナを定義ファイル(compose.yml)で一括管理する際に使用されます。
docker-compose up -d –build
設定ファイルに基づき、初回起動時や変更があった場合にイメージの再構築からコンテナの起動までを一括で行います。

docker-compose up -d
2回目以降、変更がない場合に高速にコンテナを起動させます。

docker-compose down
構成されているすべてのコンテナを停止・削除します。

docker-compose down -v
コンテナの削除に加え、定義された永続化データ(ボリューム)も含めてすべて削除します。

その他
cd [ディレクトリ]
コマンドを実行する前に、Dockerfileやcompose.ymlが置いてある場所に移動するために使用されます。

docker-compose ps
(ソース外の補足) ソースには記述がありませんが、一般的にコンテナの起動状態を確認する際によく併用されるコマンドです。

これらのコマンドは、GUIツールのDocker Desktopからも操作可能ですが、コマンドラインで行う方が効率的で楽であるとされています。

YouTube動画

コメント

タイトルとURLをコピーしました