Docker 映像檔介紹

一個 Docker 映像檔就是一個 容器的模板。 一切始於一個 Docker 映像檔。 當你告訴 Docker 使用 docker run 從映像檔建立一個容器時,它會執行相應的操作(建立檔案系統、初始化相依性等),然後容器就會被建立。 映像檔是透過使用 docker build 命令從 Dockerfile 構建,並可以儲存在本地或發佈到像 Docker Hub 這樣的 Docker 註冊表中,你可以在其中儲存公開和私有映像檔。 如果你訪問 https://hub.docker.com/,你會看到許多映像檔,你可以自由使用而不必建立自己的映像檔。 通常這些映像檔都是由特定技術背後的開發團隊官方製作的。 舉個例子,這是官方的 Node.js Docker 映像檔:https://registry.hub.docker.com/_/node。 我們很快就會談到如何使用映像檔和容器的更多細節。

Dockerfiles

什麼是 Dockerfile 以及如何使用它 Dockerfile 是建構 Docker 映像檔的配方。 這是工作流程:首先建立一個 Dockerfile,然後使用 docker build 從中建立一個 Docker 映像檔,最後從映像檔執行容器。 Dockerfile 是一個包含建構映像檔指令的文字檔案。 這些指令是部分組態語言,其中包含 FROM、LABEL、RUN、COPY、ENTRYPOINT、CMD、EXPOSE、ENV 等關鍵字。 讓我們建立我們的第一個 Dockerfile: 假設你有一個包含簡單 Node.js 應用程式的資料夾,由一個 app.js 檔案組成,該檔案列出了在運行應用程式之前需要安裝的幾個相依性,以及 package-lock.json。 在其中,創建一個名為 Dockerfile 的純文字檔案,不要加上副檔名,並包含以下內容: FROM node:14 WORKDIR /usr/src/app COPY package\*.json app.js ./ RUN npm install EXPOSE 3000 CMD ["node", "app.js"] 注:CMD 行中使用雙引號。單引號會導致錯誤。 在第一行中,我們指定要從哪個映像檔開始。這將是我們的基底映像檔。在這個案例中,它將使用基於 Alpine Linux 的官方 Node.js 映像檔,使用 Node 14。當從 Dockerfile 建立容器時,Docker 將從 Docker Hub 獲取該映像檔。 接下來,我們將工作目錄設定為 /usr/src/app,這意味著我們的所有命令都將在該資料夾中執行,直到我們再次更改它。這是我們已知在 Node 映像檔中存在的資料夾。 我們複製位於當前資料夾中的 package.json、package-lock.json(使用星號萬用字元)和 app.js 檔案到工作目錄中。...

Docker介紹

Docker是一個改變我們部署應用程式和分發應用程式方式的工具之一。 它是一項非常受歡迎且廣受大多數使用者喜愛的技術,將其列入履歷中是一件很棒的事情。 使用Docker,我們可以創建一個封裝整個應用程式的容器。 不僅如此,它可以封裝整個應用程式並保存為映像以便輕鬆複製。 在這裡,複製是關鍵詞。使用Docker,我們可以創建運行在你的電腦、客戶的電腦、你的服務器等任何地方的獨立環境,並使用我們想要運行的軟體的特定版本。 這有助於解決從配置錯誤和不同環境之間版本不匹配導致的各種問題。 Docker很複雜,但我認為它用相對用戶友好的方式處理了許多複雜的問題。 這就是為什麼"理解它"可以從你作為開發者和作為軟體使用者的生活中減少很多複雜性的原因。 不再有"但在我的電腦上運行正常"這樣的問題了。你不再需要這樣說,別人也不需要再這樣對你說了。 我們都知道調試是困難的,當某些東西在你測試過的所有環境中運行正常,但在某些奇怪的配置上卻不正常時,這就更難了。有太多的變動部分。 Docker也非常適合分發你創建的軟體,但你不想應對來自於試圖在所有可能的Web伺服器和配置上安裝它的人們所提出的無數支援請求。 我知道受歡迎的論壇應用程式Discourse在很大程度上依賴於Docker。我現在找不到參考資料,但我敢肯定我讀過他們只會支援運行官方Docker映像的安裝問題。我在這裡可能錯了,但這個想法聽起來並不是無稽之談: 如果你作為一個程式設計師可以創建一個在任何你可以部署Docker容器的地方運行的映像,那麼作為一個使用者,你絕對應該利用這一點。 Docker的另一個重大好處是能夠運行不同版本同一套軟體堆疊的多個應用程式,如果沒有類似的解決方案,這將變得困難或至少令人困惑。 在接下來的教程中,我們將介紹幾個Docker的概念,並探索如何使用以下內容: Docker映像 Docker容器 Dockerfile 基於Docker映像更新已部署容器 如何提交更改到Docker映像 如何在Docker容器外部訪問檔案 在Docker Hub上共享Docker映像 從命令行操作Docker映像 從命令行操作Docker容器 如果Docker容器立即退出該怎麼辦 從頭開始創建一個簡單的Node.js Hello World Docker容器 使用Docker Desktop管理容器 安裝Docker後的第一步 在macOS上安裝Docker 等等!