Docker とは何か? コンテナを主流にしたツール
Docker はコンテナを簡単にしたツールセットです。CLI、build システム、そして Dockerfile を実行中のコンテナに変えるランタイムから成ります。
コンテナは Docker 以前から存在していましたが、Docker はそのワークフローを、開発者が日常的に実際に使えるものへとパッケージ化しました。標準的な image フォーマット、シンプルな build コマンド、そして image を共有するための registry モデルを提供したのです。今日では、他のツールが処理を担っている場合でも、「Docker」がコンテナ化全般を指すことがよくあります。
Docker を構成する要素
- Docker CLI - あなたが入力する
dockerコマンド。 - Docker デーモン (dockerd) - コンテナの build と実行を行うバックグラウンドサービス。
- image と build システム - Dockerfile を実行可能な image に変えるもの。
- registry - image が push および pull される場所(Docker Hub、GHCR、ECR)。
中心となるワークフロー
Dockerfile を書き、docker build -t myapp . を実行して image を生成し、docker run myapp でコンテナを起動し、docker push でそれを共有します。この build-run-ship のループが Docker の核心であり、CI のステージにきれいに対応します。
image vs コンテナ
image は不変のテンプレートであり、コンテナはその image の実行中(または停止中)のインスタンスです。1 つのクラスが多くのオブジェクトを生み出せるように、1 つの image は多くのコンテナを生成できます。
Docker が唯一の選択肢か?
いいえ。OCI 標準により、image はツール間でポータブルです。Podman、containerd、BuildKit は同じ image を build または実行できます。しかし Docker は依然として最も一般的な入り口であり、ほとんどの CI の例は Docker を前提としています。
CI/CD における Docker
pipeline は Docker を使って、アプリケーションの image を build し、コンテナ内でテストを実行し、リリースを registry に push します。デーモンとレイヤー cache は速度に影響するため、build を行う runner が build 時間に直接影響します。マネージド runner(Latchkey)は温まった cache を維持し、不安定な push を自動でリトライするため、image の build がより速く、より壊れにくくなります。
重要なポイント
- Docker はプラットフォームです。CLI、デーモン、build システム、そして registry のワークフローから成ります。
- image はテンプレートであり、コンテナは実行中のインスタンスです。
- image は OCI 標準に従うため、Docker そのものを超えてポータブルです。