iT邦幫忙

2022 iThome 鐵人賽

DAY 3
0
DevOps

從認識Docker到精通系列 第 3

Run, Run, Docker Run

  • 分享至 

  • xImage
  •  

所以,我們昨天做了什麼事,只下了一個指令,就可以把整個網站內容下載下來,並且開啟通訊埠接收服務?

首先,先來讓我們看看我們下的指令代表什麼意思呢?

docker run -d -p 80:80 docker/getting-started
  • docker run:
  • -d: 以分離模式執行
  • -p 80:80 :向外開啟通訊埠,並將Host的80埠轉發至容器的80埠
  • docker/getting-started :container Image 檔位置(在registry 中的位置)

把整個命令合起來,整個命令就是:讓Docker 把位於 docker/getting-started 的 Container Image 抓取下來,以分離的模式執行並且將宿主 os 的 80 埠轉發至容器的 80 埠

再來讓我們看看昨天下完指令後,在終端機跑出來的內容

一開始,因為先前沒有執行過 getting-started 這個 container,因此顯示 unable to find image locally ,接著會自動從 Docker 的儲存庫下載這個 Container 的映像內容;docker/getting-started,代表從docker 這個人的儲存庫抓取名為 Getting-started 這個 Container 。

Docker 的儲存庫名字叫做 Docker Hub ,其運作模式可以以GitHub或GitLab理解,之後也會講解怎麼把自己做的Image 內容推上 Docker hub.

Docker 的 Container Image 包含了執行環境的一切資訊,包含相依套件 Dependencies 、設定檔Configurations,當我們把 Image 抓下來的時候,就可以直接利用 image 內部的資源執行容器,類似把一個環境直接建好。
因此,當我們將 image 拉(pull)完之後,相關的檔案包含網站內容、nginx設定資訊等等,都被一起下載到本機端,隨後被 Docker 啟動的 container,自然而然就包含以上資訊了,詳情可以先去看看getting-started這個映像的Dockerfile檔,Github

Docker architecture


圖片來源:Docker overview | Docker Documentation

有了基本認知之後,就來套用專有名詞吧!
Docker 是 client-server 的架構,首先來講講 daemon,或 dockerddocker engine,也就是 Docker 在本機端的 server 部分,他負責 containers 的建置 (building) 、執行 (running) 和分配資源 (distributing),並接收來自 CLIDocker API 的請求 (利用 REST API、UNIX socket或其他網路介面)。

假設今天使用者利用 CLI 下了 docker run -i -t ubuntu /bin/bash 這個指令,如果本機端還沒有 ubuntu 的 image,docker 會向 docker registry 抓取 ubuntu的映像;此步驟等同於 docker pull ubuntu
映像抓取完成之後,docker 會自動建立容器(或可以用手動指令docker container create),並在容器中建立檔案系統 file system,以供後續的操作使用,
file system建立完之後,docker 會接著建立一個網路介面,因為我們有用 -t-i 兩個參數,分別代表 terminalinteractively,故docker 會接上 (Host OS的) 終端機,並可用鍵盤和
container 內的 bash 做互動。

Container?? Image??

打了那麼多,但好像還沒講到 Container 和 Image這兩個部分:

Container

Container 為一個可執行的Image檔實體 (runnable image instance),可藉由 Docker CLI 或Docker API 去啟動、停止、移動或刪除容器,也可以連接儲存空間 (docker volume)進行資料的永久儲存

Image

Image,他是 docker 中建立 container的唯讀樣板文件,而樣板文件的建置必須依賴Dockerfile的內容,因此透過Dockerfile的編寫,就可以控制Container的建置

今天這篇文寫了docker run這個指令下了之後,背後做了什麼事,以及 Docker 的一些架構知識,下一篇文,將會進入Docker 的核心,也就是Image樣板檔案--Dockerfile 的內容。


上一篇
Hello Docker, 咱們來召喚鯨魚吧
下一篇
Dockerfile
系列文
從認識Docker到精通30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言