」工欲善其事,必先利其器。「—孔子《論語.錄靈公》
首頁 > 程式設計 > CKA 完整課程日 ulti Stage Docker 構建

CKA 完整課程日 ulti Stage Docker 構建

發佈於2024-11-04
瀏覽:462

CKA Full Course Day ulti Stage Docker Build

在這篇文章中,我們將探索 Docker 並逐步使用簡單的 Nginx 應用程式建立多階段 Docker 建置。如果你剛開始使用 Docker,別擔心,我會一步一步分解所有內容,以便你可以跟著做!

Dockerfile

這是我們將要使用的 Dockerfile:

FROM node:18-alpine AS installer

WORKDIR /app

COPY package*.json ./

RUN npm install

COPY . .

RUN npm run build

FROM nginx:latest AS deployer

COPY --from=installer /app/build /usr/share/nginx/html

解壓縮 Dockerfile

現在,讓我們一步一步解開這個 Dockerfile 中發生的事情:

1. 來自節點:18-alpine AS安裝程式

此行從 Docker Hub 中提取官方 Node.js 映像(Alpine Linux 上的版本 18)。將 Docker Hub 視為一個映像庫。透過使用這一行,我們指定要使用 Node.js 作為建立第一階段的基礎鏡像。

2. WORKDIR /應用程式

此指令將容器內的工作目錄設定為/app。您可以將其視為在容器內為您的應用程式建立一個專用資料夾,類似於您在桌面上組織文件的方式。

3. 複製包*.json ./

在這裡,我們將 package.json 和 package-lock.json 檔案從本機目錄複製到容器的工作目錄。這些文件包含有關我們的應用程式所需的依賴項的資訊。

4. 運行 npm install

此指令執行 npm install,它會安裝 package.json 中指定的所有相依性。

5. 複製。 .

這一行將其餘的應用程式檔案複製到容器中。它將本機目錄中的所有內容帶到容器內的 /app 目錄中。

6. RUN npm run build

現在我們使用指令 npm run build 編譯我們的應用程式。此步驟通常將我們的程式碼(在本例中通常是 React)轉換為靜態包,準備好提供給使用者。此命令的輸出將放置在 /app 內的建置目錄中。

7. 來自 nginx:最新 AS 部署程式

在這一行中,我們切換到一個新的基礎鏡像:Nginx。 Nginx 是一個功能強大的 Web 伺服器,可以提供靜態文件,就像我們剛剛建立的那樣。這是多階段建構過程第二階段的開始。

8. COPY --from=installer /app/build /usr/share/nginx/html

在這裡,我們將前一階段(安裝程式)建置的應用程式檔案複製到 Nginx 服務目錄中。 --from=installer 標誌告訴 Docker 從我們剛剛定義的安裝程式階段取得檔案。

運行你的 Docker 容器

設定好 Dockerfile 後,您可以使用以下指令建置並執行 Docker 容器:

docker build -t your-app-name .
docker run -dp 3000:80 your-app-name

確保將 your-app-name 替換為您選擇的名稱。 -dp 標誌將分離您的容器並將主機上的連接埠 3000 對應到容器中的連接埠 80,讓您可以透過 http://localhost:3000 存取您的應用程式。

結論

這就是你得到的!您剛剛創建了一個多階段 Docker 構建,該構建使用 Nginx 將您的應用程式從開發帶到生產。如果您對此過程有任何疑問或想法,請隨時在下面發表評論!

陷阱:需要注意的事項

使用此設定時的常見問題是忘記映射正確的連接埠號碼。 Nginx 通常會偵聽容器內的連接埠 80,但如果您嘗試存取本機電腦上的應用程序,則需要將正確的連接埠從容器轉送到您的電腦。例如,如果您想存取 localhost:3000 上的應用程序,則需要使用 -p 3000:80 標誌運行容器,以將電腦上的連接埠 3000 對應到容器中的連接埠 80。

錯過這一步,您會發現自己想知道為什麼一切都構建得很完美,但您無法在瀏覽器中訪問該應用程式!


標籤和提及

@piyushsachdeva
第三天影片

版本聲明 本文轉載於:https://dev.to/lloydrivers/cka-full-course-2024-day-340-multi-stage-docker-build-2ld3?1如有侵犯,請聯絡[email protected]刪除
最新教學 更多>
  • 表單刷新後如何防止重複提交?
    表單刷新後如何防止重複提交?
    在Web開發中預防重複提交 在表格提交後刷新頁面時,遇到重複提交的問題是常見的。要解決這個問題,請考慮以下方法: 想像一下具有這樣的代碼段,看起來像這樣的代碼段:)){ //數據庫操作... 迴聲“操作完成”; 死(); } ? > ...
    程式設計 發佈於2025-05-19
  • Python讀取CSV文件UnicodeDecodeError終極解決方法
    Python讀取CSV文件UnicodeDecodeError終極解決方法
    在試圖使用已內置的CSV模塊讀取Python中時,CSV文件中的Unicode Decode Decode Decode Decode decode Error讀取,您可能會遇到錯誤的錯誤:無法解碼字節 在位置2-3中:截斷\ uxxxxxxxx逃脫當CSV文件包含特殊字符或Unicode的路徑逃...
    程式設計 發佈於2025-05-19
  • Python不會對超範圍子串切片報錯的原因
    Python不會對超範圍子串切片報錯的原因
    在python中用索引切片範圍:二重性和空序列索引單個元素不同,該元素會引起錯誤,切片在序列的邊界之外沒有。 這種行為源於索引和切片之間的基本差異。索引一個序列,例如“示例” [3],返回一個項目。但是,切片序列(例如“示例” [3:4])返回項目的子序列。 索引不存在的元素時,例如“示例” [9...
    程式設計 發佈於2025-05-19
  • Java開發者如何保護數據庫憑證免受反編譯?
    Java開發者如何保護數據庫憑證免受反編譯?
    在java 在單獨的配置文件保護數據庫憑證的最有效方法中存儲憑據是將它們存儲在單獨的配置文件中。該文件可以在運行時加載,從而使登錄數據從編譯的二進製文件中遠離。 使用prevereness class import java.util.prefs.preferences; 公共類示例{ 首選...
    程式設計 發佈於2025-05-19
  • CSS強類型語言解析
    CSS強類型語言解析
    您可以通过其强度或弱输入的方式对编程语言进行分类的方式之一。在这里,“键入”意味着是否在编译时已知变量。一个例子是一个场景,将整数(1)添加到包含整数(“ 1”)的字符串: result = 1 "1";包含整数的字符串可能是由带有许多运动部件的复杂逻辑套件无意间生成的。它也可以是故意从单个真理...
    程式設計 發佈於2025-05-19
  • 哪種方法更有效地用於點 - 填點檢測:射線跟踪或matplotlib \的路徑contains_points?
    哪種方法更有效地用於點 - 填點檢測:射線跟踪或matplotlib \的路徑contains_points?
    在Python Matplotlib's path.contains_points FunctionMatplotlib's path.contains_points function employs a path object to represent the polygon.它...
    程式設計 發佈於2025-05-19
  • 如何在php中使用捲髮發送原始帖子請求?
    如何在php中使用捲髮發送原始帖子請求?
    如何使用php 創建請求來發送原始帖子請求,開始使用curl_init()開始初始化curl session。然後,配置以下選項: curlopt_url:請求 [要發送的原始數據指定內容類型,為原始的帖子請求指定身體的內容類型很重要。在這種情況下,它是文本/平原。要執行此操作,請使用包含以下標頭...
    程式設計 發佈於2025-05-19
  • 如何在GO編譯器中自定義編譯優化?
    如何在GO編譯器中自定義編譯優化?
    在GO編譯器中自定義編譯優化 GO中的默認編譯過程遵循特定的優化策略。 However, users may need to adjust these optimizations for specific requirements.Optimization Control in Go Compi...
    程式設計 發佈於2025-05-19
  • 如何使用Regex在PHP中有效地提取括號內的文本
    如何使用Regex在PHP中有效地提取括號內的文本
    php:在括號內提取文本在處理括號內的文本時,找到最有效的解決方案是必不可少的。一種方法是利用PHP的字符串操作函數,如下所示: 作為替代 $ text ='忽略除此之外的一切(text)'; preg_match('#((。 &&& [Regex使用模式來搜索特...
    程式設計 發佈於2025-05-19
  • Java字符串非空且非null的有效檢查方法
    Java字符串非空且非null的有效檢查方法
    檢查字符串是否不是null而不是空的 if(str!= null && str.isementy())二手: if(str!= null && str.length()== 0) option 3:trim()。 isement(Isement() trim whitespace whites...
    程式設計 發佈於2025-05-19
  • 如何從PHP中的數組中提取隨機元素?
    如何從PHP中的數組中提取隨機元素?
    從陣列中的隨機選擇,可以輕鬆從數組中獲取隨機項目。考慮以下數組:; 從此數組中檢索一個隨機項目,利用array_rand( array_rand()函數從數組返回一個隨機鍵。通過將$項目數組索引使用此鍵,我們可以從數組中訪問一個隨機元素。這種方法為選擇隨機項目提供了一種直接且可靠的方法。
    程式設計 發佈於2025-05-19
  • 同實例無需轉儲複製MySQL數據庫方法
    同實例無需轉儲複製MySQL數據庫方法
    在同一實例上複製一個MySQL數據庫而無需轉儲在同一mySQL實例上複製數據庫,而無需創建InterMediate sqql script。以下方法為傳統的轉儲和IMPORT過程提供了更簡單的替代方法。 直接管道數據 MySQL手動概述了一種允許將mysqldump直接輸出到MySQL cli...
    程式設計 發佈於2025-05-19
  • 如何在Chrome中居中選擇框文本?
    如何在Chrome中居中選擇框文本?
    選擇框的文本對齊:局部chrome-inly-ly-ly-lyly solument 您可能希望將文本中心集中在選擇框中,以獲取優化的原因或提高可訪問性。但是,在CSS中的選擇元素中手動添加一個文本 - 對屬性可能無法正常工作。 初始嘗試 state)</option> < o...
    程式設計 發佈於2025-05-19
  • 解決MySQL插入Emoji時出現的\\"字符串值錯誤\\"異常
    解決MySQL插入Emoji時出現的\\"字符串值錯誤\\"異常
    Resolving Incorrect String Value Exception When Inserting EmojiWhen attempting to insert a string containing emoji characters into a MySQL database us...
    程式設計 發佈於2025-05-19
  • 在JavaScript中如何獲取實際渲染的字體,當CSS字體屬性未定義時?
    在JavaScript中如何獲取實際渲染的字體,當CSS字體屬性未定義時?
    Accessing Actual Rendered Font when Undefined in CSSWhen accessing the font properties of an element, the JavaScript object.style.fontFamily and objec...
    程式設計 發佈於2025-05-19

免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。

Copyright© 2022 湘ICP备2022001581号-3