Dockerとは?3要素で理解するコンテナ基盤

システム開発・テクノロジー
Dockerとは?ざっくりと3行で
  • アプリとその実行に必要な環境を丸ごとコンテナにまとめ、ビルド・配布・起動を一貫して管理できるオープンソースのプラットフォームだ。
  • 仮想マシンのようにOSを丸ごと持ち込む必要がなく、数秒での起動・最小限のリソース消費・環境の完全な再現性を同時に実現する。
  • Dockerfileという設計書を一度書けば、チーム全員・全サーバーで同じ環境が自動で再現され、「自分のPCでは動いた」問題が消える。
Dockerの仕組みを料理レシピに例えた4コマ漫画。Dockerfileという設計書からイメージを焼き、コンテナとして何度でも同じ料理を再現できる流れを描いている
①同じレシピで作ったはずの料理が厨房によって仕上がりが異なり困惑するコックの場面。②先輩コックがレシピから道具まで全て詰めた箱を使えばどこでも同じ結果になると教える場面。③新しい厨房に箱を置いた瞬間に完璧な同じ料理が完成し感動する場面。④ビルドと起動は成功したがlatestタグのイメージでバージョン未固定の警告が表示された場面。

この漫画が描いているのは、開発現場で繰り返し起きる環境差異の問題です。同じソースコードを使っているにもかかわらず、開発者のPCでは正常に動き、テスト環境や本番サーバーでは挙動が変わる。原因はOSのバージョン・インストール済みライブラリの差・設定ファイルの微妙なズレなど多岐にわたり、原因特定だけで数時間を消費するケースも珍しくありません。

Dockerが解決するのはまさにこの点です。Dockerfileに実行環境の構成を一行ずつ記述し、イメージとしてビルドしておけば、誰がどのサーバーで起動しても完全に同一の環境が再現されます。新メンバーのオンボーディング時間の短縮、レビューやテストの精度向上、リリース時の予期せぬ差異の排除といったメリットが、チーム全体の生産性に直結します。

ただし漫画の最終コマが静かに示す通り、latestタグのままイメージを運用することには明確なリスクがあります。latestは常に最新版を指すため、ある日突然ベースイメージが更新されてアプリが起動しなくなるという障害が本番で発生し得ます。バージョンを明示的に固定したDockerfileの管理と、定期的な脆弱性スキャンを組み込むことが、Dockerの利便性を安全に享受するための最低限の運用ルールといえます。

【深掘り】これだけ知ってればOK!

Dockerは2013年、Solomon Hykes氏がdotCloudというクラウドサービス会社の社内ツールとして開発したものが原点だ。開発者が自分のPCで作ったアプリをクラウドにそのまま持ち込める仕組みを目指して作られ、PyCon 2013での電撃デモをきっかけに一気に世界へ広まった。つまりDockerは、エンジニアが自分の課題を解くために作ったツールが業界標準になったという珍しい出自を持つ。

Dockerの仕組みを理解するには、3つの構成要素を順番に押さえると整理しやすくなります。

まずDockerfile。これはコンテナの中身を定義するテキストファイルで、料理でいえばレシピに相当します。どのOSをベースにするか、どのライブラリをインストールするか、どのコマンドで起動するかを一行ずつ書き記します。次にDockerイメージ。Dockerfileをもとにビルドすることでイメージはできあがります。これはレシピから焼いた金型のようなもので、読み取り専用のテンプレートです。同じイメージから何度でもコンテナを量産できます。そして最後がコンテナ。イメージを実際に起動したもので、金型から作り出した製品にあたります。コンテナは独立して動き、用が済めば削除できます。

Docker Hubは、Dockerが提供するパブリックなイメージ共有サービスだ。nginxやMySQL・Pythonなど主要なソフトウェアの公式イメージが無料で公開されており、docker pullコマンド一行でダウンロードして即起動できる。ただし出所不明のイメージには脆弱性が含まれるケースがあるため、公式イメージまたは信頼できる組織が公開したイメージを使うことが実務上の原則になっている。

Docker Desktopを使えば、WindowsやMacでも同じようにコンテナを動かせます。内部ではLinux仮想マシンが裏側で起動しており、各コンテナはそのLinuxカーネルを共有する形で動作しています。利用者側にはその複雑さが見えない点が、Dockerの普及を支えた大きな理由のひとつといえるでしょう。

よくある誤解

DockerとコンテナとDockerfileを同じものだと思っている

この3つは厳密に異なります。Dockerfileはコンテナの設計書、イメージはその設計書から作ったテンプレート、コンテナはテンプレートを起動した実体です。Dockerfileを修正するたびに新しいイメージをビルドし、古いコンテナを削除して新しいコンテナを起動するというサイクルが基本の流れになります。混同したまま運用すると、どのイメージから起動したコンテナなのかが追えなくなり、障害発生時の原因特定が困難になります。

Dockerを使えば本番環境でも必ず安全というわけではない

コンテナはホストOSのカーネルを共有する構造のため、仮想マシンと比べて隔離レベルは低くなります。コンテナ内で動くプロセスがroot権限で動いていた場合、脆弱性を突かれるとホストOS側へ影響が波及するリスクがあります。実務では、rootlessモードでの起動・定期的なイメージの脆弱性スキャン・最小権限の原則に沿ったDockerfileの設計が不可欠です。

Docker Hubにある公式イメージはすべて最新・安全だという思い込み

Docker Hub上の公式イメージも、バージョンを固定せずlatestタグで運用していると、ある日突然ベースイメージが変わってアプリが動かなくなるという事態が起きます。また、公式以外のイメージにはセキュリティパッチが当たっていない古いOSが含まれることも珍しくありません。イメージのバージョンを明示的に固定し、定期的にスキャンする運用が、本番環境では標準的な対策として求められます。

会話での使われ方

ITKAGYO運営者デプロイ太郎のアイコン画像

Dockerfileにnode_modulesのキャッシュ層を分けて書いといたから、コード変更だけなら2回目以降のビルドは10秒くらいで終わるよ。

朝の作業開始時に先輩エンジニアが新入社員へ環境の改善点を説明している場面。Dockerfileのレイヤー構造を活用したビルド高速化のTipsを共有している。

ITKAGYO運営者デプロイ太郎のアイコン画像

今回の開発はDockerで環境を統一します。新しいメンバーが加わっても、docker compose upの一コマンドで同じ環境がすぐ立ち上がります。

Web開発会社の担当者がクライアント企業との要件定義の商談で開発体制を説明している場面。オンボーディングコストの削減と環境差異リスクの排除を訴求している。

ITKAGYO運営者デプロイ太郎のアイコン画像

latestタグのイメージそのまま使ってたら昨日のデプロイで壊れた。バージョン固定は必須だね…。

チームのSlackチャンネルでメンバーが障害の原因を共有している場面。latestタグ運用の落とし穴を身をもって経験した教訓として、やや自嘲気味に報告している。

Dockerの歴史

Dockerの誕生は、あるクラウドスタートアップの社内ツールから始まりました。技術者が自らの不満を解消するために作ったツールがなぜ業界標準になったのか、その軌跡を辿ると現代のインフラ設計の必然性が見えてきます。

出来事
2008年Solomon Hykes氏がフランスでdotCloudを創業。開発者がアプリをクラウドへ持ち込みやすくする仕組みを模索し始める。
2010年dotCloudがY Combinatorに採択されシリコンバレーへ進出。PaaS事業の基盤技術としてコンテナ型仮想化の内部実装が進む。
2013年3月PyCon 2013でHykes氏がDockerをデモ公開。予想を超える反響を受け、わずか数週間でオープンソースとして正式リリース。
2013年後半社名をdotCloudからDocker Inc.に変更。コンテナ技術がIT業界全体で急速に注目を集める。
2014年6月Docker 1.0が正式リリースされ企業の本番環境での採用が始まる。コンテナイメージ共有サービスDocker Hubも同時に発表。
2015年コンテナ実装の標準化団体Open Container Initiative(OCI)を設立。Dockerが事実上の業界標準として確立される。
2017年以降KubernetesとのネイティブサポートでDockerはオーケストレーション基盤としても普及。現在はAI開発環境の構築にも標準的に使われている。

【まとめ】3つのポイント

  • 設計書・型・製品の3段構造で動く:Dockerfile→イメージ→コンテナという流れを掴めば、Dockerの仕組みのほぼ全体像が見えてくる。
  • 一度書けばどこでも同じ環境が再現できる:環境差異によるトラブルが消え、新メンバーのオンボーディングもコマンド一発で完結するため、チーム全体の開発速度が底上げされます。
  • latestタグとroot権限は本番で使わない:Dockerの利便性を享受しつつ、イメージのバージョン固定・脆弱性スキャン・rootlessモードの3点を運用ルールとして定着させることがリスク管理の基本です。

よくある質問

Q
DockerはWindowsでも使えますか?
A

Docker Desktopをインストールすれば、WindowsでもmacOSでも使えます。内部ではLinux仮想マシンが自動で起動し、コンテナはその上で動く仕組みになっています。GUIでコンテナの起動・停止・ログ確認ができるため、コマンドに慣れていない方でも操作しやすい環境が整っています。ただし商用利用の場合はDocker Desktopのライセンス条件を確認することが必要です。

Q
Docker ComposeとDockerの違いは何ですか?
A

Dockerが単体のコンテナを管理するのに対し、Docker Composeは複数のコンテナをまとめて定義・起動するためのツールです。たとえばWebアプリ・データベース・キャッシュサーバーの3コンテナをセットで動かしたい場合、docker-compose.ymlに設定を書いておくことでdocker compose up一コマンドで全て起動できます。実務ではDockerと組み合わせて使うのが標準的です。

Q
Dockerのイメージはどれくらいの容量になりますか?
A

ベースイメージの選択によって大きく変わります。Ubuntuなどのフルイメージは数百MB、Alpine Linuxをベースにした軽量イメージは5MB程度から始められます。本番環境ではalpineや「-slim」付きの最小構成イメージを使い、不要なパッケージを含めないDockerfileを書くことで、セキュリティリスクの低減とデプロイの高速化を同時に実現できます。

Q
DockerとKubernetesの違いは何ですか?
A

役割が異なる2つのツールです。Dockerはコンテナを作る・動かすためのプラットフォームで、1台のマシン上でのコンテナ操作を担います。Kubernetesは複数サーバーにまたがる大量のコンテナを自動でスケール・管理・復旧させるオーケストレーションツールです。まずDockerでコンテナを作れるようになり、運用規模が大きくなってきたタイミングでKubernetesを学ぶのが自然なステップといえます。

この用語と一緒に知っておきたい用語

用語この記事との関連
コンテナDockerが扱う実行単位。DockerはコンテナをビルドしてHubで配布し本番で動かすための一連の仕組みを提供する。
Kubernetes大量のDockerコンテナを自動で管理・スケールするオーケストレーションツール。Dockerの次に学ぶべき筆頭候補。
仮想マシン(VM)Dockerと比較される旧来の仮想化技術。ゲストOSを持つ点でコンテナと根本的に異なる。
CI/CDコードのビルドからデプロイまでを自動化するパイプライン。DockerイメージをCI/CDと組み合わせることで安定したリリースが実現する。
マイクロサービスアプリを小さな機能単位に分割する設計思想。各機能を独立したDockerコンテナとして動かすことと親和性が高い。

【出典】参考URL

https://www.docker.com/ja-jp/blog/docker-nine-years-young/ :2013年3月15日のPyCon初公開という日付の根拠(Docker公式ブログ)
https://aws.amazon.com/jp/compare/the-difference-between-docker-images-and-containers/ :Dockerイメージとコンテナの違い・Dockerfileの定義(AWS公式)
https://www.kagoya.jp/howto/cloud/container/dockerimage/ :イメージからコンテナを作成する手順・Docker Hubの説明(カゴヤサーバー研究室)
https://www.publickey1.jp/blog/18/dockerdockerctosolomon_hykesdocker.html :Solomon Hykes氏とdotCloudの創業経緯・OCIの設立(Publickey)
https://www.sbbit.jp/article/cont1/34350 :Docker 1.0リリース・Kubernetes統合までの歴史(ビジネス+IT)
https://www.e-xtreme.co.jp/topics/50723/ :Dockerの基本概念・ゲストOSが不要な仕組みの説明(エクストリーム)
https://cn.teldevice.co.jp/column/31886/ :Solomon Hykes氏のdotCloud創業とDocker開発の端緒(東京エレクトロンデバイス)

コメント

「IT用語、難しすぎて心が折れそう……」という方のための、ハードル低めな用語辞典です。

情報レベルは「基礎中の基礎」。会話を止めないためのエッセンスだけを抽出しています。分かりやすさを追求するあまり、時々例え話が暴走しているかもしれませんが、そこは「ほどよく」聞き流していただけると幸いです。
ほどよくIT用語辞典システム開発・テクノロジー
デプロイ太郎のSNSを見てみる!!