88329


Dockerについてこのサイトを見て概要を読みました。  
<https://knowledge.sakura.ad.jp/15253/>

その後[Dockerの用語集](https://docs.docker.com/glossary/)を読むと

  * DockerfileによりDockerイメージが自動的に構築(ビルド)できる
  * Dockerイメージは状態を持たない

ことがわかりました。

上のことから「Dockerイメージは状態を持たない」というのは「Dockerfileをビルドし構築したイメージ」からDockerイメージは変化しない（状態を持たないため）ということだと理解しました。

だとすると本質的に必要なのはDockerfileだけで、Dockerイメージは配布対象の各員でDockerfileからビルドしてもらえば良い（つまりDockerイメージを配布する必要はない）と思うのですが、この理解はあっていますでしょうか？

それともDockerイメージを配布しなければならない状況がありますでしょうか？調べる限りだとDockerHubがDockerイメージを配布しているようで、この理解が正しいのか疑問に感じてます。


CC BY-SA 4.0
2022-04-12T20:33:56.440
88305
2022-04-14T00:43:47.363
45076
question
docker
Dockerfileさえ配布すればDockerイメージを配布する必要はないですか？


多くの場合は Dockerfile の FROM 行で指定した既存のイメージを元に構築を行うので、Dockerfile の共有だけで問題ないと思います。

一方で、Docker Hub 等の外部リポジトリとのやり取りに何らかの制限 (帯域が細い、そもそも外部のネットワークにつながらない)
があるような場合には、Dockerfile から手元で構築したイメージを共有するのも有効な手段の1つだと思います。

参考:  
[Docker イメージをファイルでやり取りする](https://blog.amedama.jp/entry/2017/11/01/204637)


CC BY-SA 4.0
2022-04-13T09:00:35.680
88315
2022-04-13T09:00:35.680
3060
88305
answer


`docker run` などのコマンドを走らせる際に docker image のキャッシュが無いと、`docker run`
を実行しているインスタンス各自で必要な docker image
をすべてビルドするところから始めないといけません。これは計算資源の無駄ですし時間の無駄です。複数のインスタンスで使う予定があるのなら、docker
image を共有しておいた方が便利でしょう。なおこの「共有」は Docker Hub
上での共有だけではなく、自前で運用しているレジストリという方法もあります。

また場合によっては `docker build` をするためにかなりのマシンパワーが必要なこともあります。この場合は docker image
を提供することに意味があります。

更に、`COPY` を使っている場合や `curl` を使っている場合など Dockerfile 外の環境に依存して docker image
が作られているとき状況によっては Dockerfile だけでは作成される docker image
の再現性を担保するのが難しくなっている場合もあります。こういったケースでも docker image を提供することに意味があるでしょう。


CC BY-SA 4.0
2022-04-14T00:43:47.363
88329
2022-04-14T00:43:47.363
19110
88305
answer