Skip to content
Latchkey

Dockerとは? ビルドとデプロイのためのコンテナを解説

Dockerは、アプリケーションとその依存関係を、ラップトップから本番環境までどこでも同じように動作するポータブルなcontainer imageにパッケージ化するためのツールです。

Dockerはコンテナを主流にしました。アプリケーションの環境をファイルに記述し、それをimageにビルドし、Dockerがインストールされているどこでも隔離されたcontainerとして実行できます。CI/CDでは、buildが再現可能な環境を得る手段であると同時に、アプリケーションがデプロイ用にパッケージ化される手段でもあります。

Dockerとは

Dockerは、containerをビルド、配布、実行するためのプラットフォームです。containerとは、アプリケーションをそのライブラリとruntimeとともにまとめた隔離されたプロセスであり、hostのカーネルを共有しつつ、その他の点では他のプロセスから分離されています。DockerのCLIとdaemonがimageをビルドし、それらをcontainerとして実行します。

imageとcontainer

imageは、Dockerfileの命令からビルドされる、ファイルシステムとメタデータの不変でレイヤー化されたスナップショットです。containerはimageの実行中のインスタンスです。layerはcacheされ共有されるため、imageのrebuildは変更されたステップのみをやり直します。これは高速なbuildのために鍵となります。

Dockerfileの例

Dockerfileはimageのビルド方法を記述します。

A minimal Dockerfile
FROM node:20-slim
WORKDIR /app
COPY package*.json ./
RUN npm ci
COPY . .
CMD ["npm", "start"]

CI/CDにおける役割

DockerはCI/CDの中心です: pipelineはimageをビルドし、クリーンで再現可能な環境のためにcontainer内でテストを実行し、デプロイのためにimageをregistryにpushします。imageのbuildはI/OとCPUの負荷が高く、効果的なlayerのcacheとbuild cacheが最大のレバーとなります。これらのbuildは、warmなcacheを備えたマネージドrunner上でより速く安価に実行され、加えて一時的なregistryのpull失敗に対する自動retryも得られます。

代替ツール

Podmanは、Docker互換のCLIを持つdaemonlessでrootlessな代替ツールです。BuildKitとBuildahはimageのビルドに焦点を当てており、containerdはより低レベルのruntimeです。Dockerは、開発とCIにおいてcontainerをビルドし実行するための、最も馴染みのあるエンドツーエンドのツールであり続けています。

重要なポイント

  • Dockerはアプリケーションをポータブルでレイヤー化されたcontainer imageにパッケージ化します。
  • layerのcacheは、変更されたステップのみをやり直すことでrebuildを高速化します。
  • CIではimageをビルドし、テストを隔離し、デプロイ可能なartifactを生成します。

関連ガイド