本篇翻譯自Docker官方文件的「About storage drivers - Images and layers」。
Docker image(映像檔/鏡像)是建立在一連串的layers(分層)之上。用來建構image的Dockerfile中的一條指令就代表了一層layer。
例如下面的Dockerfile包含了四個指令(FROM
、COPY
、RUN
、CMD
),每一條指令都建立一層layer,所以有四層的image layers。
Dockerfile
FROM ubuntu:18.04
COPY . /app
RUN make /app
CMD python /app/app.py
FROM
以ubuntu:18.04
image建立一層layerCOPY
以前一層為基礎從Docker client的目錄中複製檔案到/app
並建立layerRUN
以前一層為基礎執行make
建立應用程式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 |
+------------------------------------+
沒有留言:
張貼留言