使用 Docker 部署前端項目全攻略

在這里插入圖片描述

文章目錄

    • 1. Docker 基礎概念
      • 1.1 核心組件
      • 1.2 Docker 工作流程
    • 2. 環境準備
      • 2.1 安裝 Docker
      • 2.2 驗證安裝
    • 3. 項目配置
      • 3.1 項目結構
      • 3.2 創建 Dockerfile
    • 4. 構建與運行
      • 4.1 構建鏡像
      • 4.2 運行容器
      • 4.3 訪問應用
    • 5. 使用 Docker Compose
      • 5.1 創建 docker-compose.yml
      • 5.2 啟動服務
      • 5.3 查看日志
    • 6. 高級配置
      • 6.1 多階段構建
      • 6.2 環境變量
      • 6.3 數據卷
    • 7. 最佳實踐建議
      • 7.1 鏡像優化
      • 7.2 安全建議
    • 8. 常見問題與解決方案
      • 8.1 問題列表
      • 8.2 調試技巧
    • 9. 擴展閱讀

1. Docker 基礎概念

1.1 核心組件

組件描述
鏡像包含應用及其依賴的只讀模板
容器鏡像的運行實例
Dockerfile定義鏡像構建步驟的腳本

1.2 Docker 工作流程

編寫 Dockerfile
構建鏡像
運行容器
訪問應用

2. 環境準備

2.1 安裝 Docker

# Ubuntu
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io# CentOS
sudo yum install -y yum-utils
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
sudo yum install docker-ce docker-ce-cli containerd.io# macOS
brew install --cask docker

2.2 驗證安裝

docker --version
docker-compose --version

3. 項目配置

3.1 項目結構

my-app/
├── dist/
├── src/
├── package.json
├── Dockerfile
└── docker-compose.yml

3.2 創建 Dockerfile

# 使用官方 Node.js 鏡像作為基礎鏡像
FROM node:14 as build-stage# 設置工作目錄
WORKDIR /app# 復制 package.json 和 package-lock.json
COPY package*.json ./# 安裝依賴
RUN npm install# 復制項目文件
COPY . .# 構建項目
RUN npm run build# 使用 Nginx 鏡像作為運行環境
FROM nginx:stable-alpine as production-stage# 復制構建結果到 Nginx 目錄
COPY --from=build-stage /app/dist /usr/share/nginx/html# 暴露端口
EXPOSE 80# 啟動 Nginx
CMD ["nginx", "-g", "daemon off;"]

4. 構建與運行

4.1 構建鏡像

docker build -t my-app .

4.2 運行容器

docker run -d -p 8080:80 my-app

4.3 訪問應用

打開瀏覽器訪問 http://localhost:8080


5. 使用 Docker Compose

5.1 創建 docker-compose.yml

version: '3'
services:web:build: .ports:- "8080:80"volumes:- ./dist:/usr/share/nginx/htmlrestart: always

5.2 啟動服務

docker-compose up -d

5.3 查看日志

docker-compose logs -f

6. 高級配置

6.1 多階段構建

FROM node:14 as build-stage
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
RUN npm run buildFROM nginx:stable-alpine as production-stage
COPY --from=build-stage /app/dist /usr/share/nginx/html
EXPOSE 80
CMD ["nginx", "-g", "daemon off;"]

6.2 環境變量

ENV NODE_ENV=production
# docker-compose.yml
environment:- NODE_ENV=production

6.3 數據卷

volumes:- ./dist:/usr/share/nginx/html

7. 最佳實踐建議

7.1 鏡像優化

  1. 使用輕量級基礎鏡像:如 alpine 版本
  2. 減少層數:合并 RUN 指令
  3. 清理緩存:刪除不必要的文件

7.2 安全建議

  1. 非 root 用戶運行:提高安全性
  2. 限制資源使用:防止資源耗盡
  3. 定期更新鏡像:修復安全漏洞

8. 常見問題與解決方案

8.1 問題列表

問題原因解決方案
構建失敗依賴問題檢查 package.json
容器無法啟動端口沖突更改端口映射
訪問失敗網絡配置問題檢查防火墻設置

8.2 調試技巧

  1. 查看日志
    docker logs <container_id>
    
  2. 進入容器
    docker exec -it <container_id> /bin/sh
    
  3. 檢查網絡
    docker network inspect <network_name>
    

9. 擴展閱讀

  • Docker 官方文檔
  • Dockerfile 最佳實踐
  • 前端性能優化指南

通過本文的深度解析,開發者可以全面掌握使用 Docker 部署前端項目的方法與技巧。建議結合實際項目需求,合理配置 Docker,以提升部署效率和系統穩定性。
在這里插入圖片描述

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/73427.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/73427.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/73427.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Vue中使用到的padStart方法是什么

padStart() 是 JavaScript 字符串對象的一個方法&#xff0c;用于在字符串的開頭填充指定的字符&#xff0c;直到字符串達到指定的長度。這在需要對字符串進行格式化&#xff0c;使其保持固定長度時非常有用&#xff0c;比如在日期格式化時&#xff0c;確保月份、日期等為兩位數…

springboot集成flink實現DM數據庫同步到ES

前言 今天分享的其實是一個面試上機方案&#xff0c;就是監測DM數據庫數據&#xff0c;同步到ES&#xff0c;使用flink實現。基本套路&#xff0c;其實也沒啥好說的&#xff0c;非要說也就是&#xff0c;國家隊還是很多不跟你玩啊&#xff0c;雖然flink有阿里在背后&#xff0c…

springboot jackson 日期格式配置

一、JacksonProperties JacksonProperties是一個用ConfigurationProperties(prefix“spring.jackson”)注解修飾的類&#xff0c;所以可以通過以spring.jackson為前綴的配置去賦值。 JacksonAutoConfiguration會通過Jackson2ObjectMapperBuilderCustomizer實現類根據JacksonPr…

【藍橋杯】24省賽:數字串個數

思路 本質是組合數學問題&#xff1a; 9個數字組成10000位數字有9**10000可能 不包括3的可能8**10000 不包括7的可能8**10000 既不包括3也不包括77**10000 根據容斥原理&#xff1a;結果為 9 ? ? 10000 ? 8 ? ? 10000 ? 8 ? ? 10000 7 ? ? 10000 9**10000 - 8**10…

AGI大模型(7):提示詞應用

1 生成數據 LLM具有?成連貫?本的強?能?。使?有效的提示策略可以引導模型產?更好、更?致和更真實的響應。LLMs還可以特別有?地?成數據,這對于運?各種實驗和評估?常有?。例如,我們可以使?它來為情感分類器?成快速樣本,如下所示: 提示: ?成10個情感分析的范…

Unity開發中對象池設計與使用

一、設計目的 為了避免頻繁創建和銷毀對象&#xff08;例如 UI 元素、事件對象等&#xff09;帶來的內存分配和垃圾回收壓力&#xff0c;可以使用對象池來管理對象來提高游戲的性能&#xff0c;避免游戲卡頓。 二、代碼實現 public interface IRecycle {/// <summary>…

JVM并發編程AQSsync鎖ReentrantLock線程池ThreadLocal

并發編程2 synchronized鎖實現**AQS****ReentrantLock實現****JUC 常用類**池的概念 ThreadLocalThreadLocal原理內存泄露強引用:軟引用弱引用虛引用ThreadLocal內存泄露 synchronized鎖實現 synchronized是一個關鍵字,實現同步,還需要我們提供一個同步鎖對象,記錄鎖狀態,記錄…

【JavaEE】網絡原理之初識

1.????前言~&#x1f973;&#x1f389;&#x1f389;&#x1f389; Hello, Hello~ 親愛的朋友們&#x1f44b;&#x1f44b;&#xff0c;這里是E綿綿呀????。 如果你喜歡這篇文章&#xff0c;請別吝嗇你的點贊????和收藏&#x1f4d6;&#x1f4d6;。如果你對我的…

操作系統-八股

進程基礎&#xff1a; 進程定義&#xff1a;運行中的程序&#xff0c;有獨立的內存空間和地址&#xff0c;是系統進行資源調度和分配的基本單位。 并發&#xff0c;并行 并發就是單核上面輪詢&#xff0c;并行就是同時執行&#xff08;多核&#xff09;&#xff1b; 進程上下…

ffmpeg面試題整理

1. 基礎概念 問題&#xff1a;FFmpeg 是什么&#xff1f;它的核心功能有哪些&#xff1f; 編解碼&#xff1a;支持幾乎所有音視頻格式&#xff08;如 H.264, AAC, MP3&#xff09;。轉換&#xff1a;在不同容器格式之間轉換&#xff08;如 MP4 → MKV&#xff09;。流處理&…

chrome瀏覽器插件拓展捕獲頁面的響應體內容

因為chrome extension官方沒有的直接獲取響應體的方法&#xff0c;所以需要自己實現方法來獲取&#xff0c;實現的方式有很多種&#xff0c;這是記錄的第二種&#xff0c;第一種就是使用vconsole來實現&#xff0c;vconsole是一個開源框架&#xff0c;一個輕量、可拓展、針對手…

探索天然分子swertiamarin調控脂肪生成的新機制

隨著生活方式的改變和環境的惡化&#xff0c;糖尿病這一全球性健康挑戰日益嚴峻。據世界衛生組織統計&#xff0c;全球糖尿病患者數量不斷攀升&#xff0c;其中2型糖尿病&#xff08;T2DM&#xff09;占據了絕大多數。T2DM不僅影響患者的生活質量&#xff0c;還給醫療系統帶來了…

沐數科技數據開發崗筆試題2025

描述性統計 標準差 答案: A 解析: 標準差 衡量數據集中數值變化或離散程度的一種度量。它反映了數據集中的各個數值與數據集的平均值&#xff08;均值&#xff09;之間的偏離程度。標準差越大&#xff0c;表明數據的分布越分散&#xff1b;標準差越小&#xff0c;表明數據…

Java 集合遍歷過程中修改數據觸發 Fail-Fast 機制 ,導致報ConcurrentModificationException異常

Java Fail-Fast 機制 Fail-Fast 機制是 Java 集合框架中的一種錯誤檢測機制&#xff0c;用于在遍歷集合時檢測結構修改。如果在迭代器創建之后&#xff0c;集合被修改&#xff08;例如添加或刪除元素&#xff09;&#xff0c;并且這種修改不是通過迭代器自身的 remove() 方法進…

Qt-ZMQ的使用補充(pub-sub)

之前寫過一篇Qt使用ZMQ的博客Qt網絡編程-ZMQ的使用&#xff0c;本文是其的補充部分。 Linux上編譯使用 首先這次實在Linux上進行演示&#xff0c;下載zmq源碼&#xff0c;安裝cmake&#xff0c;使用cmake進行編譯。下載之后解壓&#xff1a; 輸入命令&#xff1a; cd ..mkdi…

C++的名稱空間

C++的名稱空間(namespace)是一種用于組織代碼、防止命名沖突的機制。以下是名稱空間的詳細說明和使用建議: 1. 名稱空間的定義 使用namespace關鍵字定義,內部可包含變量、函數、類等: namespace MyNamespace {int a;void func() {} }2. 訪問方式 作用域解析運算符:::顯…

記錄致遠OA服務器硬盤升級過程

前言 日常使用中OA系統突然卡死&#xff0c;刷新訪問進不去系統&#xff0c;ping服務器地址正常&#xff0c;立馬登錄服務器檢查&#xff0c;一看磁盤爆了。 我大腦直接萎縮了&#xff0c;誰家OA系統配400G的空間啊&#xff0c;過我手的服務器沒有50也是30臺&#xff0c;還是…

[測試]自動化的概念 及使用Selenium實現Web自動化測試

文章目錄 1. 自動化1.1 自動化概念1.2 自動化分類1.2.1 接口自動化1.2.2 UI自動化 1.3 自動化測試金字塔 2. Web自動化測試2.1 驅動 3. Selenium3.1 一個簡單的Web自動化示例3.2 Selenium 驅動 瀏覽器的工作原理 1. 自動化 1.1 自動化概念 自動化是指自動地代替人的行為完成…

Python教程(三):類對象、閉包、裝飾器、類型注解、MRO

Python總結&#xff08;三&#xff09; 本系列其他教程&#xff1a; Python教程(一)&#xff1a;基本語法、流程控制、數據容器 Python教程(二)&#xff1a;函數、異常、模塊&包、文件讀取、常用模塊 文章目錄 Python總結&#xff08;三&#xff09;一、類&對象1.1 成…

什么是 HTML?

HTML 是用來描述網頁的一種語言。 HTML 指的是超文本標記語言: HyperText Markup LanguageHTML 不是一種編程語言&#xff0c;而是一種標記語言標記語言是一套標記標簽 (markup tag)HTML 使用標記標簽來描述網頁HTML 文檔包含了HTML 標簽及文本內容HTML文檔也叫做 web 頁面 HT…