iT邦幫忙

2019 iT 邦幫忙鐵人賽

DAY 7
0
Kubernetes

從Docker到Kubernetes-新手入門筆記系列 第 7

Day7-dockerfile入門-自訂image(下)

今天來討論昨天docker build過程docker server如何運作

依照dockerfile的順序,不假思索會以為docker build就是下載base image,然後把container跑起來,安裝redis後,再執行CMD,全部過程在同一個container下執行,然而並非如此。

事實上是每一個statement都會依照上一個statement產生的image跑一個temporary container,statement產生新的image並把temporary container移除,除了FROM statement。

Step 1 因為local沒有alpine image,所以到Docker Hub下載image,id為196d12cf6ab1

Step 2 以196d12cf6ab1跑一個temporary container,container id為9054ef5db46a,執行apk add --update redis,完成後移除temporary container(Removing intermediate container 9054ef5db46a),產生新的image 412c53a5addb

Step 3 以412c53a5addb跑一個temporary container,container id為174c749daf92,執行apk add --update redis,完成後移除temporary container(Removing intermediate container 174c749daf92),產生新的image 00637dd534bf

因為沒有下一個statement,build process完成。

我們可以新增安裝python來看,是否每一個statement都會產生臨時container

# 選擇kernel/OS
FROM alpine

# 安裝redis
RUN apk add --update redis

# 增加安裝python
RUN apk add --update python

# 指定啟動container後執行命令
CMD ["redis-server"]

上次產生過的image會用local的cache,安裝python會產生臨時的container(6bd6d64a4d89),但最後的CMD statement並沒有用cache是它看到image是安裝python的image而不是前一次安裝redis的image。


上一篇
Day6-dockerfile入門-自訂image(上)
下一篇
Day8-Dockerize Node.js Web應用程式(上)
系列文
從Docker到Kubernetes-新手入門筆記30

尚未有邦友留言

立即登入留言