網頁

2020/12/12

Docker 映像檔與分層 images and layers

本篇翻譯自Docker官方文件的「About storage drivers - Images and layers」。

Docker image(映像檔/鏡像)是建立在一連串的layers(分層)之上。用來建構image的Dockerfile中的一條指令就代表了一層layer。

例如下面的Dockerfile包含了四個指令(FROMCOPYRUNCMD),每一條指令都建立一層layer,所以有四層的image layers。

Dockerfile

FROM ubuntu:18.04
COPY . /app
RUN make /app
CMD python /app/app.py

  1. FROMubuntu:18.04 image建立一層layer
  2. COPY以前一層為基礎從Docker client的目錄中複製檔案到/app並建立layer
  3. RUN以前一層為基礎執行make建立應用程式
  4. CMD以前一層為基礎執行python指令啟動應用程式

每一層都是以前一層layer為基礎往上疊加一些新的東西 (例如複製檔案或執行命令等)。Image layers都是唯讀的(read-only),只有建立容器時才會在最上層再加上一層可寫層,這一層又稱作Container layer(容器層)。在運行容器中建立、修改或刪除檔案時僅是對此可寫層進行異動。

+------------------------------------+
|             Container              |
| +--------------------------------+ |
| |        Container layer         | | ---> READ/WRITE
| +--------------------------------+ |
|      ^          ^          ^       |
|      |          |          |       |
|      v          v          v       |
| +--------------------------------+ | -.
| | 91e54dfb1179                0B | |  |
| +--------------------------------+ |  |
| | d74508fb6632            1895KB | |  |   Image layers
| +--------------------------------+ |  |-> READ ONLY
| | c22013c84729           194.5KB | |  |
| +--------------------------------+ |  |
| | d3a1f33e8a5a           188.1MB | |  |
| +--------------------------------+ | -'
|            ubuntu:18.04            |
+------------------------------------+


沒有留言:

張貼留言