web-dev-qa-db-ja.com

Docker:中間コンテナーはどのように形成されますか

Dockerfileを使用してDockerイメージを構築する際の実行手順を理解したいと思います。以下にリストしたいくつかの質問。ビルドプロセスの理解を助けてください。

Dockerfileコンテンツ

#from base image
FROM ubuntu:14.04
#author name
MAINTAINER RAGHU
#commands to run in the container
RUN echo "hello Raghu"
RUN sleep 10
RUN echo "TASK COMPLETED"

イメージのビルドに使用されるコマンド:docker build -t raghavendar/hands-on:2.0 .

Sending build context to Docker daemon 20.04 MB
Step 1 : FROM ubuntu:14.04
---> b1719e1db756
Step 2 : MAINTAINER RAGHU
---> Running in 532ed79e6d55
---> ea6184bb8ef5
Removing intermediate container 532ed79e6d55
Step 3 : RUN echo "hello Raghu"
---> Running in da327c9b871a
hello Raghu
---> f02ff92252e2
Removing intermediate container da327c9b871a
Step 4 : RUN sleep 10
---> Running in aa58dea59595
---> fe9e9648e969
Removing intermediate container aa58dea59595
Step 5 : RUN echo "TASK COMPLETED"
---> Running in 612adda45c52
TASK COMPLETED
---> 86c73954ea96
Removing intermediate container 612adda45c52
Successfully built 86c73954ea96

ステップ2で:

Step 2 : MAINTAINER RAGHU
    ---> Running in 532ed79e6d55 

質問1:id-532ed79e6d55のコンテナーで実行されていることを示していますが、このコンテナーはどのDockerイメージで形成されていますか?

---> ea6184bb8ef5  

質問2:このIDは何ですか?それはイメージまたはコンテナですか?

Removing intermediate container 532ed79e6d55

質問3:最終画像は、中間コンテナから保存された複数のレイヤーで形成されていますか?

18
Here_2_learn

はい、Dockerイメージは階層化されています。新しいイメージを作成すると、DockerはDockerfileの各命令(RUNCOPYなど)に対してこれを実行します。

  1. 前のイメージレイヤー(または最初のコマンドのベースFROMイメージから一時コンテナーを作成します。
  2. 一時的な「中間」コンテナでDockerfile命令を実行します。
  3. 一時コンテナを新しい画像レイヤーとして保存します。

最終画像レイヤーには、画像に名前を付けるものでタグ付けされます-これは、docker history raghavendar/hands-on:2.0、各レイヤーと、それを作成した命令の略語が表示されます。

特定のクエリ:

1)532は、イメージID b17、これはFROMイメージ、ubuntu:14.04

2)ea6は、命令の出力として作成されたイメージレイヤーです。つまり、中間コンテナの保存532

3)はい。 Dockerはこれを nion File System と呼び、画像が非常に効率的である主な理由です。

29
Elton Stoneman