🎁

Docker事典 (v1.0.0)

に公開

備忘録です

Docker

  • Dockerは、コンテナを扱うツール。コンテナエンジンの一種。コンテナの作成、起動、管理を実行する環境を提供する。
  • コンテナエンジンは、Docker以外にもPodmanがある。
  • Dockerは、ローカルの開発環境、単一ホストでの運用に適する。
  • 複数ホストでコンテナを稼働させる場合は、KubernetesやDocker Swarmなどのオーケストレーションツールを使用する必要がある。

コンテナ

  • コンテナとは、ホストOS上で独立して実行されるプロセスである。
  • コンテナは、ホストOS上の他のすべてのプロセスから分離されている。
  • コンテナは、アプリケーションのバイナリとこのバイナリを実行させるための依存関係(OS基本コマンド、ライブラリ)をパッケージ化したもの。
  • コンテナは、様々な環境(開発環境、ステージング環境、本番環境)のランタイムの差異を無くし、アプリケーションが常に一貫した動作をすることを保証する

コンテナイメージ

  • コンテナイメージは、コンテナ作成に必要なファイルシステムである。
  • コンテナイメージ内には、アプリケーションのバイナリ、ライブラリ、コンテナ起動時に実行させるコマンドが含まれている。
  • コンテナイメージの構成要素は、コマンドの結果によって生成されたファイルシステム(レイヤー)
  • 各コマンド結果のファイルシステムが積み重なって、一つのコンテナイメージが完成する。
  • コマンドの内容に変更が加わると、それ以降のすべてのコマンドが再実行され、新しいファイルシステム(レイヤー)が再構築される。
  • 以前のビルドによって生成されたレイヤーのキャッシュをうまく再利用するためには、Dockerfileの各コマンドの順番を良くする必要がある。
  • コンテナイメージを元にコンテナを起動し、イメージ作成時に設定したコマンドが実行される。
  • コンテナイメージを利用することで、様々な環境(開発環境、本番環境)で動作が一貫したアプリケーションバイナリの実行環境を提供できる。
  • コンテナイメージを作成すれば、DockerだけではなくPodmanのようなコンテナエンジンがインストールされたプラットフォーム上で稼働させることできる。
  • コンテナイメージが一つ入手すれば、大量のコンテナを起動できる。

Dockerfile

  • Dockerfileは、コンテナイメージを構築(ビルド)するための設計図。
  • Dockerfileは、コンテナ起動時に実行されるコマンド(ENTRYPOINT,CMD)を指定できる。
  • コンテナイメージの容量を増大させるコマンドは、RUN,COPY。

マルチステージビルド

マルチステージビルド
マルチステージビルド

  • マルチステージビルドは、コンテナイメージのサイズを最小限に抑えることができる
  • マルチステージビルドで構成した場合、最後のステージのコンテナイメージ(上の紫)が最終的なビルド結果(アーティファクト)になる。
  • マルチステージビルドは、複数のコンテナイメージを並列にビルドし、またイメージ間でファイルをコピーすることができる。

Discussion