TL;DR

アプリケーションをコンテナとして開発、配布、実行するためのオープンなプラットフォーム。イメージからコンテナを作って動かす。

なぜ必要か

Docker の公式ドキュメントによると、Docker を使うと、開発者が標準化された環境で作業でき、CI/CD のワークフローにも組み込みやすい。コンテナはノート PC、データセンター、クラウドのどこでも同じように動き、すばやく増減できる。ハイパーバイザを使う仮想マシンより軽いので、同じハードウェアでより多くの処理を動かせる。

仕組み

  • イメージ: コンテナを作るための手順を持つ読み取り専用のテンプレート。Dockerfile にビルドの手順を書き、命令ごとにイメージのレイヤが作られる。変更があったレイヤだけを再ビルドするので、ビルドが速い
  • コンテナ: イメージから作った実行可能なインスタンス。永続的なストレージに保存しなかった変更は、コンテナを消すと失われる
  • クライアントとデーモン: docker コマンド(クライアント)が Docker API でデーモン(dockerd)に命令を送り、デーモンがイメージ、コンテナ、ネットワーク、ボリュームを管理する
  • レジストリ: イメージを保管する場所。既定は公開の Docker Hub で、プライベートなレジストリも立てられる

例

ローカル環境では、Docker Compose で MinIO や DynamoDB Local などのミドルウェアを立ち上げる。cargo-chef は、Docker のビルドキャッシュを効率よく使って Rust のコンテナのビルド時間を短くする。

コンテナのランタイムとイメージの標準は、2015 年に Docker 社などが設立した OCI が定めている。

関連

出典