docker:安装nginx并部署一个前端项目

文章目录

    • 导语
    • 传统方式
      • 1、下载镜像
      • 2、copy项目文件到docker中
      • 3、访问
    • 打包镜像的方式
      • 1、创建 Dockerfile
      • 2、创建 Nginx 配置文件
      • 3、构建 Docker 镜像
      • 4、运行 Docker 容器
      • 5、访问前端项目
    • 总结

导语

这篇博客将介绍 docker 使用 nginx 部署前端项目的两种方式

传统方式

1、下载镜像

docker pull nginx

2、copy项目文件到docker中

这里先介绍几个关键的路径和配置:

# 默认的配置文件路径
/etc/nginx/nginx.conf
# 一般上面的nginx.conf会引入conf.d/*.conf,所以conf.d目录下的文件都能生效
/etc/nginx/conf.d/default.conf
# 这个是默认的default.conf的项目路径,如下
/usr/share/nginx/html

default.conf

server {listen       80;listen  [::]:80;server_name  localhost;#access_log  /var/log/nginx/host.access.log  main;location / {root   /usr/share/nginx/html;index  index.html index.htm;}#error_page  404              /404.html;# redirect server error pages to the static page /50x.html#error_page   500 502 503 504  /50x.html;location = /50x.html {root   /usr/share/nginx/html;}# proxy the PHP scripts to Apache listening on 127.0.0.1:80##location ~ \.php$ {#    proxy_pass   http://127.0.0.1;#}# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000##location ~ \.php$ {#    root           html;#    fastcgi_pass   127.0.0.1:9000;#    fastcgi_index  index.php;#    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;#    include        fastcgi_params;#}# deny access to .htaccess files, if Apache's document root# concurs with nginx's one##location ~ /\.ht {#    deny  all;#}
}

以上我们知道,将项目放到 /usr/share/nginx/html/ 下就能使用 default.conf 配置了,我们将前端项目假设叫 index.html 复制到改目录下:

cd index.html所在的目录
docker cp index.html mynginx:/usr/share/nginx/html/

3、访问

127.0.0.1:80
上面配置的是80端口,也可以修改

打包镜像的方式

我们可以将以上所有的操作打包成一个镜像,只需运行镜像就能访问项目,而不需要上面的1/2/3步,这也是 docker 的正确使用方式,这样打包成一个镜像后,你的整个应用(前端项目和 Nginx)变得自包含,依赖关系清晰,更易于移植和部署。

1、创建 Dockerfile

在你的前端项目根目录下创建一个名为 Dockerfile 的文件,用于定义 Docker 镜像的构建过程。

# 使用 Nginx 作为基础镜像
FROM nginx:latest# 删除默认 Nginx 配置文件
RUN rm -rf /etc/nginx/conf.d/default.conf# 将本地的 Nginx 配置文件复制到容器中
COPY nginx.conf /etc/nginx/conf.d/# 将前端项目的静态文件复制到 Nginx 的默认发布目录
COPY dist /usr/share/nginx/html# 暴露 Nginx 的默认 HTTP 端口
EXPOSE 80# 启动 Nginx
CMD ["nginx", "-g", "daemon off;"]

2、创建 Nginx 配置文件

在同一目录下创建一个名为 nginx.conf 的 Nginx 配置文件,用于配置 Nginx 服务器。

server {listen 80;location / {root /usr/share/nginx/html;index index.html;try_files $uri $uri/ /index.html;}# 可以根据需要添加其他配置项
}

3、构建 Docker 镜像

在包含 Dockerfile 和 nginx.conf 文件的目录下,执行以下命令构建 Docker 镜像:

docker build -t your-frontend-image .

4、运行 Docker 容器

使用以下命令在 Docker 容器中运行你的前端项目:

docker run -p 8080:80 --name your-frontend-container -d your-frontend-image

这将映射宿主机的 8080 端口到容器的 80 端口,并在后台运行容器。

5、访问前端项目

现在,你可以通过访问 http://localhost:8080 来查看部署在 Docker 中的前端项目。

注意:上述步骤假设你的前端项目构建后的文件位于 dist 目录中。确保根据你的实际项目结构和构建输出调整 Dockerfile 中的路径和文件名。

总结

但是据我所知,前端项目一般不会像这样打包成镜像,因为前端对 nginx 没有那么的依赖,比如,两个人同时开发一个项目,基本就是 node 版本的不同可能会导致环境不同,但是最终都是打包成 dist 静态文件部署到 nginx 上,所以没必要把 nginx 和项目捆绑在一起。

所以,我遇到的前端项目基本就是服务器直接安装 nginx,并不使用 docker,当然用 docker 维护一个Nginx也是不错的选择。

而后端就不一样了,比如 java,本地要依赖 jdk 的版本,服务器也要依赖 jdk 的版本,所以后端更适合将 jdk 这种依赖和项目打包成一个镜像进行发布,这样就不会有环境不一致的问题了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/202291.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C语言给定数字0-9各若干个。你可以以任意顺序排列这些数字,但必须全部使用。目标是使得最后得到的数尽可能小(注意0不能做首位)

这个题目要求的输出是一串数字!!! 不是下面:输入在一行中给出 10 个非负整数,顺序表示我们拥有数字 0、数字 1、……数字 9 的个数。整数间用一个空格分隔。10 个数字的总个数不超过 50,且至少拥有 1 个非…

Python自动化测试之破解图文验证码

对于web应用程序来讲,处于安全性考虑,在登录的时候,都会设置验证码, 验证码的类型种类繁多,有图片中辨别数字字母的,有点击图片中指定的文字的,也有算术计算结果的,再复杂一点就是滑…

软考人数已超500万!请重视!

2020年40万,2021年94万,2022年129万,2023年软考报考人数已超500万!2年时间直翻10倍!如此火爆原因是什么? 不是打广告!不是打广告!不是打广告 千万不要上了”黑心培训结构“当&#x…

App的回归测试,有什么高效的测试方法?

直接抛出观点:高效的测试方法当然有,那就是采用【接口自动化】。 一、回归测试,测哪些东西 回归测试是软件测试过程中的一个重要的环节,如果说冒烟测试是对软件质量的抽检,那么回归测试就是保证软件质量的最后一道屏障…

集合01 - Java

集合 1、数组的不足2、集合3、集合的框架体系(背)CollectionMap 1、数组的不足 前面我们保存多个数据使用的是数组,那么数组有不足的地方,我们分析一下。 数组: 长度开始时必须指定,而且一旦指定,不能更改…

Linux环境变量与命令行参数

Linux环境变量与命令行参数 一.命令行参数1.语法2.应用1:简易计算器 二.环境变量1.环境变量的概念2.环境变量的作用3.进一步理解环境变量的作用4.常见环境变量5.导出环境变量(添加环境变量)6.环境变量的特性7.另一种获取环境变量的方式8.小功能:用于身份验证的代码9.补充:第三种…

SAP CA01/CA02 创建及更新工艺路线BAPI

前言 最近需要做一个routing的批导,初步查过资料后,发现下面几个BAPI: BAPI_ROUTING_CREATE:最常用的BAPI,只支持创建,没有对应的CHANGE BAPI; ROUTING_MAINTAIN:不支持创建,只支…

C/C++,优化算法——使用遗传算法的旅行商问题(traveling-salesman-problem)的源程序

1 文本格式 #include <bits/stdc.h> #include <limits.h> using namespace std; // Number of cities in TSP #define V 5 // Names of the cities #define GENES ABCDE // Starting Node Value #define START 0 // Initial population size for the algorith…

HDFS 3.x 数据存储新特性-纠删码

HDFS是⼀个⾼吞吐、⾼容错的分布式⽂件系统,但是HDFS在保证⾼容错的同时也带来⾼昂的存储成本,⽐如有5T的数据存储在HDFS上,按照HDFS的默认3副本机制,将会占⽤15T的存储空间。那么有没有⼀种能达到和副本机制相同的容错能⼒但是能⼤幅度降低存储成本的机制呢,有,就是在HD…

ahk系列-windows超级运行框-表达式计算(12)—功能汇总

1、环境准备 windows 7&#xff0c;8&#xff0c;10&#xff0c;11操作系统ahk 2.x_64位翻译功能需要联网使用 2、使用方式 输入winR打开windows运行框 get/getpath 命令获取配置文件环境变量set/sets 设置 “用户/系统” 环境变量或者pathencode/decode 中文编码和解码len…

【算法题】一种字符串压缩表示的解压(js)

输入&#xff1a;2dff 输出 !error 两个d不需要压缩&#xff0c;故输入不合法 输入:4eA 输出:!error 全部由小写英文字母组成&#xff0c;压缩后不会出现&#xff0c;故输出不合法 function solution(str) {const error "!error";// 只能包含小写字母和数字 [^a-z0…

详解线段树

前段时间写过一篇关于树状数组的博客树状数组&#xff0c;今天我们要介绍的是线段树&#xff0c;线段树比树状数组中的应用场景更加的广泛。这些问题也是在leetcode 11月的每日一题频繁遇到的问题&#xff0c;实际上线段树就和红黑树 、堆一样是一类模板&#xff0c;但是标准库…

【荣誉】科东软件荣获广州市软件行业协会双料大奖!

软件产业在数字经济中扮演着基础支撑的角色&#xff0c;对于优化产业结构、提高自主可控、赋能整体经济高质量发展具有关键作用。 近日&#xff0c;广州市软件行业第七届会员大会第三次会议成功召开&#xff01;此次会议旨在回顾过去一年的行业发展&#xff0c;展望未来的趋势和…

React useCallback 详解

在 React 中&#xff0c;useCallback 是一个非常实用的 Hook&#xff0c;它可以帮助我们避免在每次渲染时都创建新的函数&#xff0c;从而提高性能。useCallback 返回一个记忆化的回调函数&#xff0c;它只在其依赖项改变时才会改变。 下面是一个详细的 React useCallback 教程…

nginx编译安装及配置文件的修改

编译安装nginx 1.关闭防火墙&#xff0c;安全机制&#xff0c;去官网下载nginx压缩包&#xff0c;并进行解压 systemctl stop firewalld #关闭防火墙 systemctl disable --now firewalld #开机不自启并立即关闭防火墙 setenforce 0 #关闭安全机制 2.安装依赖包&#xff0…

CSU计算机学院2023秋C语言期中题目思路分享(前三道题)

文章目录 写在前面A&#xff1a;个税计算——阅读理解与数据类型转换原题输入输出样例输入样例输出 题目分析题目理解代码实现与问题解决 我的代码 B&#xff1a;时制转换——问题是一点点解决的原题输入输出样例输入样例输出 题目分析我的代码 C&#xff1a;统计进位——人教版…

编程语言分类

如果要将编程语言分成两大类&#xff0c;可以考虑以下分类方式&#xff1a; 编译型语言&#xff08;Compiled Languages&#xff09;&#xff1a;这类语言在运行之前需要通过编译器将源代码转换为机器码或类似形式的可执行代码。编译型语言的特点包括&#xff1a; 需要显式的编…

用PHP与html做一个简单的登录页面

用PHP与html做一个简单的登录页面 login.html的设计 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title&…

我一人全干!之二,vue3后台管理系统树形目录的实现。

一个完整的后台管理系统需要一个树形结构的目录&#xff0c;方便用户切换页面。 因为使用的是element-plus的ui库&#xff0c;所以首选el-menu组件&#xff0c;点击查看文档。 因为此组件不是树形结构的&#xff0c;所以需要封装成系统需要的树形结构组件。可以使用vue的递归组…

探索鸿蒙_ArkTs开发语言

ArkTs 在正常的网页开发中&#xff0c;实现一个效果&#xff0c;需要htmlcssjs三种语言实现。 但是使用ArkTs语言&#xff0c;就能全部实现了。 ArkTs是基于TypeScript的&#xff0c;但是呢&#xff0c;TypeScript是基于javascript的&#xff0c;所以ArkTs不但能完成js的工作&a…