33

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 : 最終的なイメージは、中間コンテナーから保存された複数のレイヤーで形成されますか?

4

1 に答える 1

48

はい、Docker イメージは階層化されています。新しいイメージをビルドすると、Docker はDockerfile 内の各命令 ( など) に対してこれを行いRUNます。COPY

  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 はこれをUnion File Systemと呼んでおり、これがイメージが非常に効率的である主な理由です。

于 2016-09-26T15:34:10.833 に答える