iT邦幫忙

2022 iThome 鐵人賽

DAY 7
0
自我挑戰組

用 Docker 了嗎? 30 天的 Docker 基本教學系列 第 7

Day 7 Docker Container 啟動時發生了什麼?

  • 分享至 

  • xImage
  •  

該文章同步發佈於:我的部落格

也歡迎關注我的 Facebook 以及 Instagram 接收軟體相關的資訊!

以及這個 30 天的 Docker 教學有出書喔!如果喜歡這個系列可以支持一下,天瓏書局

前情提要

昨天我們啟動了 nginx 的容器,今天將進一步解釋,從輸入 Docker 指令到啟動容器時發生了什麼事。

過程解析

$ docker container run --publish 80:80 nginx
Unable to find image 'nginx:latest' locally
latest: Pulling from library/nginx
...

這邊第一行顯示出了 Docker 在本地端找不到 nginx:latest 這個映像檔,所以從 library/nginx 這邊拉了 nginx:latest 這個映像檔。

也就是從預設的映像檔儲存庫 ( DockerHub ) 中拉出了這個映像檔到本地端。

如果你本身也使用過 Git 這個工具,應該對於這個動作不感到陌生,只是這邊的儲存庫預設是 DockerHub 的 nginx 倉庫,所以你不需要指定從哪裡取得映像檔。

最基本的運作流程如下圖:

但上述的啟動流程並不包含了 --publish 80:80 這個部份,所以我們再把圖片變得更細節一些:

讓我們再用文字搭配圖片敘述一次流程,解釋清楚發生了什麼事情:

圖片中的第一步:

會先確認本地端是否有指令中指定的映像檔,若是存在直接跳至第三步根據指令啟動容器;若是不存在,則是移動至第二步。

圖片中的第二步:

從預設的映像檔儲存庫中下載指令中指定的映像檔至本地端。

圖片中的第三步:

根據指令中的映像檔啟動容器。

圖片中的第四步:

根據指令中的額外參數加入設定。

但在真實的運作流程中,第三步以及第四步會是結合再一起啟動的,並不會分開執行,只是為了讓新手們更好理解整個容器啟動的流程才會這樣繪製圖片。

接著我們回到終端機的畫面,會發現其像是靜止一樣:

2022/08/08 06:56:32 [notice] 1#1: getrlimit(RLIMI....
2022/08/08 06:56:32 [notice] 1#1: start worker processes
2022/08/08 06:56:32 [notice] 1#1: start worker process 31
2022/08/08 06:56:32 [notice] 1#1: start worker process 32
2022/08/08 06:56:32 [notice] 1#1: start worker process 33
172.17.0.1 - - [08/Aug/2022:06:56:41 +0000] "GET / HTTP/1.1" 200 615 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/104.0.0.0 Safari/537.36" "-"

這是因為 nginx 的執行程序正在執行中,這時候我們只要按下 Ctrl + C 就會終止這個 nginx 的執行程序,在他停下來的那一刻,你的終端機又會回歸到正常的等待輸入的畫面。

小結

今天搭配了一些簡單的圖片來解釋從無到有啟動一個容器的過程,中間其實還有很多的細節,但礙於篇幅的關係,就用比較簡單地方式來讓大家理解!

明天將會介紹除了啟動容器之外的指令是什麼樣的效果,感謝大家收看。

/images/emoticon/emoticon34.gif


上一篇
Day 6 啟動 Docker Container
下一篇
Day 8 Docker Container 的相關操作指令 ( 上 )
系列文
用 Docker 了嗎? 30 天的 Docker 基本教學30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言