# 六角鼠年鐵人賽 Week 3 - 介紹 Docker 重要元素 ==大家好,我是 "為了拿到金角獎盃而努力著" 的文毅青年 - Kai== ### 夜泊牛渚懷古 李白 :::info 牛渚西江夜,青天無片雲。登舟望秋月,空憶謝將軍。 余亦能高詠,斯人不可聞。明朝掛帆去,楓葉落紛紛。 ::: Docker 是由 **Image (映像檔)**、**Container (容器)**、**Repository (倉庫)** 所組成。 ==或有人使用 Registory 代替 Repository,前者是指倉庫註冊服務器,專門存放多個 Repository== 其應用的流程如下圖 (擷取自網路):  ## Image 映像檔 Image 是一個唯讀的環境模板,可由 Dockerfile 建構,是以單個或多個 Image Layers 組成,用來建構容器實體且可重複執行,建構內容可包含 Container 內的函式庫、環境設定檔、軟體與程式。 就像建一棟房子要有的設計圖、做一個模型要先有模板那樣的存在。Image 就是給 Docker 在建構 Container 時候參照的依據。 目前在 Docker Hub 中已存在許多發布的 Image,也可以透過在 Docker cmd 中下指令搜索想要的 Image,可根據 Stars 星星點數去得知該 Image 的評比,越多點數代表越多人使用或推薦。 ==Docker Hub 是一個類似 GitHub 的網站,使用者可以透過註冊後,在其建構公開或私人的空間存放 Image,私人的空間需要付費申請== 若都沒有找到喜歡的 Image,則可以自己編寫 DockerFile 建構,在 DockerFile 中每一行建構出的 Image Layer 共同組成一個完整的 Image,從而建構出 Container。 當在 Docker cmd 去 pull 一個公開的 Image 時,常會看到許多的[hashcode]:pull,這就是在下載該 Image 的所有 Image layers,而一個 Image layer 又是由許多不同的小檔案組成,可以想像成 Git 作業中:一個小功能由許多的 commit 組成,一個模組又是由許多的功能組成,而許多模組最後可以做成一個產品。 而當同一個環境下載過的 Image layers 是可以給不同的 Image 共用的,因此也常會看見[hashcode]:Already exists的訊息。 ==下圖是一個正在下載 tomcat image 的範例圖,可以看到下載了許多 image layers==  下列圖片取自 [Docker Doc](https://docs.docker.com/storage/storagedriver/#images-and-layers),可以更清楚瞭解其組成的結構。  Docker Image 不存在實際環境與程式的方式,使其檔案容量小,方便攜帶與分享,也就是這樣一種方式,讓 Docker 在建立環境上,不管是時間還是可靠性,都比 VM 來的更好。 ## Container 容器 若把 Image 比喻為 Java 的 Class,那 Container 就是透過 Class New 出來的實體。 容器是依據 Image 建構出的實體,且一個 Image 可重複建構相同的 Container,這些 Container 因 Namespaces 技術而得以獨立不受其他 Container 的干擾,就算他們是從同一個 Image 建構而來。 [詳細可參考 Wikipedia Linux Namespaces](https://en.wikipedia.org/wiki/Linux_namespaces) 容器是個獨立實體,可以進行啟動、停止與刪除,且當透過 Image 建立時,Container 會在其最上層加疊一層 Writable layer,又作可寫層或擴充層,讓 Container 保有延伸增減功用的彈性,而當 Container 移除時,該層也會一同被移除,但其基本的 Image 是不會被移除的,因此不必擔心 Local 端的 Image 或 Image layers 檔案不見,除非是手動刪除了。  ## Repository 倉庫 Repository 是集中存放 Images 的地方,而這些 Repository 則會建構於 Rigestory (倉庫註冊伺服器),因此有不少教學直接教 Rigestory 而不是 Repository。 目前來說開發者最常瀏覽的 Docker Hub,亦是目前公開 Images 數量最多的地方,且就像是 GitHub 一樣,不論是開發者 pull 自己想要的 Image 還是上傳自己建構的 Image,只需要註冊即可免費使用服務,開源的方式也讓更多便利的 Images 被建構提供出來,減少許多開發者建構 Images 的時間,把精力放在開發主要項目上。 ==目前 Docker Hub 提供一個帳號 一個免費 private Repository 的額度== ## 結語 :::danger 下篇將會分享操作 **Docker Images** 的學習心得 [六角鼠年鐵人賽 Week 4 - Docker Images 操作指令](/VXlsyHahSMOTT1CPLy_iyw) ::: 首頁 [Kai 個人技術 Hackmd](/2G-RoB0QTrKzkftH2uLueA) ###### tags: `Docker`,`w3HexSchool`
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up