🎁
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