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

embedded/2025/3/17 5:19:36/

在这里插入图片描述

文章目录

    • 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

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

dockercomposeyml_114">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 多阶段构建

dockerfile">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 环境变量

dockerfile">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.ppmy.cn/embedded/173255.html

相关文章

数学建模历程之初见

第一次接触数学建模是在上大学前&#xff0c;当时只是听过。起源于我在大学的老乡群里聊天&#xff0c;由于当时年轻有点傻&#xff0c;说的话太多了&#xff0c;什么都问哈哈哈哈哈。 后来有个学长从老乡群里加我&#xff0c;问我怎么话那么多&#xff0c;你们懂当时对我幼小…

从Online Softmax到FlashAttention

目录 前言0. Abstract1. The Self-Attention2. (Safe) Softmax3. Online Softmax4. FlashAttention结语参考 前言 最近在学习 FlashAttention&#xff0c;看到一份不错的手稿分享下&#x1f917; manuscript&#xff1a;From Online Softmax to FlashAttention 0. Abstract Fl…

golang开发支持onlyoffice的token功能

一直都没去弄token这块&#xff0c;想着反正docker run的时候将jwt置为false即可。 看了好多文章&#xff0c;感觉可以试试&#xff0c;但是所有文件几乎都没说思路。 根据我的理解和成功的调试&#xff0c;思路是&#xff1a; 我们先定义2个概念&#xff0c;一个是文档下载…

电子招采软件系统,如何实现10年可追溯审计

一、在当前经济环境下&#xff0c;中小企业面临着巨大的生存压力&#xff0c;传统产业的数字化转型迫在眉睫。AI技术为企业的低成本高效发展提供了新机会&#xff0c;混合办公成为新常态&#xff0c;数据安全法的深入落实则进一步推动企业重视数据安全。区块链存证技术凭借独特…

Mac下安装Zed以及Zed对MCP(模型上下文协议)的支持

Zed是当前新流行的一种编辑器&#xff0c;支持MCP&#xff08;模型上下文协议&#xff09; Mac下安装Zed比较简单&#xff0c;直接有安装包&#xff0c;在这里&#xff1a; brew install --cask zedMac Monterey下是可以安装上的&#xff0c;亲测有效。 配置 使用CtrlShiftP…

游戏引擎学习第157天

今天的计划 目标是完整制作一款游戏&#xff0c;从头到尾的开发过程完全展示。过程中没有使用任何游戏引擎或库&#xff0c;目的是展示一个全面的游戏开发过程&#xff0c;包括每一个细节&#xff0c;从最基础的像素开始&#xff0c;直到最终的视觉效果。在整个过程中&#xf…

深入理解 Reactor Netty 线程配置及启动命令设置

一、引言 在使用 Spring Boot 开发基于 Reactor Netty 的应用程序时&#xff0c;合理配置 Reactor Netty 的线程参数对于优化应用性能至关重要。本文将详细介绍 reactor.netty.ioSelectCount 和 reactor.netty.ioWorkerCount 这两个关键参数的作用、不同设置值的影响&#xff0…

基于stm32的视觉物流机器人

标题:基于stm32的视觉物流机器人 内容:1.摘要 本文围绕基于STM32的视觉物流机器人展开研究。背景是随着物流行业的快速发展&#xff0c;对物流自动化和智能化的需求日益增长&#xff0c;传统物流方式效率低且成本高。目的是设计一款基于STM32的视觉物流机器人&#xff0c;以提…