Docker构建Nginx镜像并部署前台应用

news2024/12/23 17:28:58

文章目录

    • 1. 简介
    • 2. 准备工作
    • 3. 编写Dockerfile
    • 4. 编写nginx.conf
    • 5. 构建镜像
    • 6. 查看镜像是否构建成功
    • 7. 运行容器
    • 8. 访问Web应用
    • 9. 总结

1. 简介

Docker是一个开源的容器化平台,它可以帮助我们快速构建、发布和运行应用程序,实现应用程序的环境隔离和依赖管理。在本文中,我们将使用Docker构建一个Nginx镜像,并部署一个Web应用。

2. 准备工作

在开始构建Docker镜像之前,我们需要准备一些资源,包括

  1. 前台包dist
  2. Nginx配置文件nginx.conf
  3. Dockerfile

3. 编写Dockerfile

首先,我们需要创建一个Dockerfile,用于定义如何构建我们的Nginx镜像。以下是一个简单的Dockerfile示例:

# 指定基础镜像
FROM nginx:alpine

# 复制文件或目录到镜像中。可以将本地文件或目录复制到镜像的指定位置。
COPY ./dist /project/dist
# 用本地的nginx配置文件覆盖镜像的Nginx配置
COPY nginx.conf /etc/nginx/nginx.conf

# 设置环境变量
# 添加时区环境变量,亚洲,上海
ENV TZ=Asia/Shanghai

# 声明要监听的端口
EXPOSE 16001

在上述Dockerfile中,我们使用了Nginx官方提供的latest版本作为基础镜像。然后,我们将本地的dist目录复制到镜像中的/project/dist/目录下,这将是我们Web应用的静态文件。同时,我们将本地的nginx.conf配置文件复制到镜像的/etc/nginx/nginx.conf位置,这样我们可以覆盖默认的Nginx配置。

接下来,我们设置了一个时区的环境变量TZ,将时区设为亚洲/上海。最后,我们声明容器要监听的端口为16001,这样我们在启动容器时可以将宿主机的16001端口映射到容器中。

4. 编写nginx.conf

以下是一个简单的Nginx配置示例,配置文件要根据自己的项目地址、端口、路径进行配置
, 用于部署一个Vue.js前端项目和代理后端API请求。

#user  nobody;
worker_processes  1;

#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;

#pid        logs/nginx.pid;


events {
    worker_connections  1024;
}


http {
    include       mime.types;
    default_type  application/octet-stream;
    server_tokens off;    #关闭版本号
    client_max_body_size 5120m; #允许用户最大上传数据大小
	
    sendfile        on;
    #tcp_nopush     on;

    #keepalive_timeout  0;
    keepalive_timeout  65;

    #gzip  on;

    server {
    	listen       16001;
        server_name  localhost;
        charset utf-8;
	
	location / {
        root		/project/dist;
        #需要指向下面的@router否则会出现vue的路由在nginx中刷新出现404
	    try_files 	$uri 		$uri/ 		@router;
        index  		index.html;
    }

    #对应上面的@router,主要原因是路由的路径资源并不是一个真实的路径,所以无法找到具体的文件
    #因此需要rewrite到index.html中,然后交给路由在处理请求资源
	location @router {
		rewrite ^.*$ 	/index.html 	last;
	}

	location /code-safe {
		proxy_pass 		    http://192.168.225.28:16000/code-safe;
		proxy_redirect		off;
		proxy_set_header 	Host			    $host:$server_port;
		proxy_set_header 	X-Real-IP		    $remote_addr;
		proxy_set_header	X-Forwarder-For		$http_x_forwarded_for;
		# enables WS support
		proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "Upgrade";
        proxy_read_timeout 600s;
	}

	error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }
}

简要说明

在这个Nginx配置示例中,我们定义了一个简单的Nginx服务,监听在端口16001上。该服务用于部署一个Vue.js前端项目,并通过反向代理转发后端API请求。

首先,我们指定了Nginx的worker进程数为1。然后,设置了一些常用的Nginx配置项,如sendfile、keepalive_timeout等。我们还关闭了Nginx的版本号显示,以增加安全性。

接下来,我们定义了一个服务器块,监听在端口16001,并将域名设置为localhost。在这个服务器块中,我们定义了两个location块。

第一个location块用于处理前端Vue.js项目的请求。我们将前台包所在的目录设置为/project/dist,并使用try_files指令处理路由请求,以避免在Nginx中刷新出现404错误。对于无法找到具体文件的路由请求,我们使用rewrite将其指向index.html。

第二个location块用于反向代理后端API请求。我们将所有以/code-safe开头的请求代理到http://192.168.225.28:16000/code-safe地址,并设置了一些代理的头信息,以支持WebSocket。

最后,我们定义了一个错误页面,并指定了错误页面的处理方式。

以上就是一个简单的Nginx配置示例,用于部署前端项目并代理后端API请求。希望本文对您有所帮助!

5. 构建镜像

  1. 准备好资源
  2. 将资源dist,nginx.conf,Dockerfile 放在同一个目录中
  3. 使用docker build命令来构建我们的Nginx镜像
docker build -t web .

其中,-t选项指定镜像的名称为web,.表示Dockerfile所在的当前目录。

在这里插入图片描述

在这里插入图片描述

6. 查看镜像是否构建成功

docker images

在这里插入图片描述

7. 运行容器

完成镜像的构建后,我们可以使用docker run命令来运行容器:

docker run -d -p 16001:16001 --name myweb web:latest

-d选项表示以后台守护进程方式运行容器
-p选项将容器的16001端口映射到宿主机的16001端口
–name 定义容器的名称 web是我们之前构建的镜像名称。

查看容器是否运行成功

docker ps -a

在这里插入图片描述

8. 访问Web应用

现在,我们的Nginx容器已经在后台运行,并且容器的16001端口已经映射到了宿主机的16001端口。我们可以通过浏览器访问http://localhost:16001来查看我们的Web应用。

9. 总结

本文介绍了如何使用Docker构建Nginx镜像并部署Web应用。通过Docker,我们可以轻松构建、发布和管理容器化的应用,大大简化了应用部署和管理的过程。

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

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

相关文章

全国大学生数据统计与分析竞赛2021年【本科组】-B题:用户消费行为价值分析

目录 摘 要 1 任务背景与重述 1.1 任务背景 1.2 任务重述 2 任务分析 3 数据假设 4 任务求解 4.1 任务一:数据预处理 4.1.1 数据清洗 4.1.2 数据集成 4.1.3 数据变换 4.2 任务二:对用户城市分布情况与分布情况可视化分析 4.2.1 城市分布情况可视化分析 4…

PWM定时器精准定时实现led闪烁(S3C2440裸机开发)

文章目录 前言一、PWM定时器原理二、使用步骤总结 前言 上期和大家分享了使用PWM定时器输出周期方波驱动蜂鸣器,那么本期分享的内容是使用PWM定时器实现定时器的功能,有了上期的基础,这期分享的内容大家理解起来应该非常easy,接下…

Psyco模块能优化Python的运行速度吗

目录 什么是Psyco模块 Psyco模块有什么作用 什么时候用Psyco模块 Psyco模块能优化Python的运行速度吗 总结 什么是Psyco模块 Psyco是一个用于优化Python代码的第三方模块。它的目标是通过即时编译(Just-In-Time Compilation)技术来提高Python程序的…

如何把pdf转成word文档格式?分享三个好用方法!

PDF文件和Word文档是我们日常生活和工作中最常见的两种文档格式。尽管PDF以其稳定的格式和出色的跨平台兼容性受到人们的喜爱,但在文本编辑方面,Word文档更具有灵活性。因此,将PDF转换为Word文档的需求在我们日常生活中非常常见。这篇文章将为…

微信小程序入门教程||微信小程序 小程序宿主环境||微信小程序 小程序协同工作和发布

微信小程序 小程序宿主环境 小程序宿主环境 我们称微信客户端给小程序所提供的环境为宿主环境。小程序借助宿主环境提供的能力,可以完成许多普通网页无法完成的功能。 上一章中我们把小程序涉及到的文件类型阐述了一遍,我们结合 QuickStart 这个项目来…

Access设置或取消密码

数据库密码”解决办法 Access设置或取消密码提示““必须保持数据库打开才可专门用于设置或删除数据库密码”” 解决方法: 按照提示的描述,需要“打开转属项”。 其实,这里是指需要以独占方式打开文件,打开方式如下&#xff1a…

常用协议的相关

远程登录协议: 23端口,TCP连接。 C/S方式。 文本传输协议FTP: C/S方式。 建立两条TCP连接,一条用于传送控制信息,一条用于传送文件内容。 FTP的控制连接采用了Telent协议。主要是用来进行简单的身份认证系统&…

中文人物关系知识图谱(含码源):中文人物关系图谱构建、数据回标、基于远程监督人物关系抽取、知识问答等应用.

项目设计集合(人工智能方向):助力新人快速实战掌握技能、自主完成项目设计升级,提升自身的硬实力(不仅限NLP、知识图谱、计算机视觉等领域):汇总有意义的项目设计集合,助力新人快速实…

opencv hand openpose

使用opencv c 来调用caffemodel 使用opencv 得dnn 模块调用 caffemodel得程序,图片自己输入就行,不做过多得解释,看代码清单。 定义手指关节点 const int POSE_PAIRS[20][2] { {0,1}, {1,2}, {2,3}, {3,4}, // thumb {0,5}, {5,6}, {6,7}…

前端技术搭建(动态图片)拖拽拼图!!(内含实现原理)

文章目录 前端技术搭建(动态图片)拖拽拼图(内含实现原理)导言功能介绍效果演示链接(觉得不错的,请一键三连嘤嘤嘤)项目目录页面搭建css样式设置工具函数游戏实现逻辑 开源地址总结 前端技术搭建(动态图片&a…

热门洗地机评测|追觅VS希亦VS米博洗地机,哪款更值得入手?

智能科技的发展越来越方便人们的生活,特别是现今人们生活水平不断提高,房子越住越大,需要顾及的房屋卫生打扫面积也越来越广。而单是通过人工去拖扫不仅很累还很浪费时间。于是洗地机的出现让很多深陷家务劳动的朋友得以解脱。因为很多洗地机…

人工智能-Dlib+Python实现人脸识别(人脸检测以及68点特征提取)

Dlib是一个现代的C ++工具包,包含机器学习算法和工具,用于在C ++中创建复杂的软件来解决实际问题。它广泛应用于工业界和学术界,包括机器人,嵌入式设备,移动电话和大型高性能计算环境。Dlib的开源许可 允许您在任何应用程序中免费使用它 Dlib可以使用pip install来安装或…

基于开源IM即时通讯框架MobileIMSDK:RainbowChat v9.0版已发布

关于MobileIMSDK MobileIMSDK 是一套专门为移动端开发的开源IM即时通讯框架,超轻量级、高度提炼,一套API优雅支持UDP 、TCP 、WebSocket 三种协议,支持iOS、Android、H5、标准Java平台,服务端基于Netty编写。 工程开源地址是&am…

OpenMLDB荣登ACM旗舰期刊

日前,最新一期的ACM(国际计算机学会)旗舰期刊《Communications of the ACM》(ACM 通讯) 刊登了开源机器学习数据库项目 OpenMLDB 的文章,获得了期刊编辑主席团的一致认可。 文章链接:https://cacm.acm.org/magazines/2…

opencv对相机进行畸变矫正,及矫正前后的坐标对应

文章目录 1.背景2.需求分析3.解决方案3.1.镜头畸变矫正3.2.知道矫正后的画面坐标(x,y),求其在原画面的坐标(x,y)3.2.知道原画面坐标(x1,y1),求其在…

【Linux】网络基础之TCP协议

目录 🌈前言🌸1、基本概念🌺2、TCP协议报文结构🍨2.1、源端口号和目的端口号🍩2.2、4位首部长度🍪2.3、32位序号和确认序号(重点)🍫2.4、16位窗口大小🍬2.5、…

解决rosdep网络问题

众所周知,想要使用rosdep,需要两个步骤: sudo rosdep init rosdep update其中,第一步就是下载了一个文件,第二步是从服务器下载一些数据。 但是因为国内的网络的原因,这两步都有一点困难。但是可以使用tun…

P3611 [USACO17JAN] Cow Dance Show S

思路&#xff1a;二分K&#xff0c;查看当前K能否满足总时间不超过最大时间 ACcode: #include<bits/stdc.h> using namespace std; #define int long long const int N1e410; int n,tmax,a[N]; bool check(int x) {priority_queue < int, vector < int >, gre…

ASCII码、UniCode码、字符转换、中文、英文、二进制、十进制、十六进制

文章目录 效果图htmlJavaScript 效果图 html <div class"w_680 p_t_20 p_b_20 p_l_6 p_r_6"><div class"w_100_ d_f jc_c"><textarea class"w_97_ h_86 fs_16 resize_none outline_none" oninput"oninputF(event)">…

OpenAI重磅官宣ChatGPT安卓版本周发布,现已开启下载预约,附详细预约教程

7月22号&#xff0c;OpenAI 突然宣布&#xff0c;安卓版 ChatGPT 将在下周发布&#xff01;换句话说&#xff0c;本周安卓版 ChatGPT正式上线&#xff01; 最早&#xff0c;ChatGPT仅有网页版。 今年5月&#xff0c;iOS版ChatGPT正式发布&#xff0c;当时OpenAI表示Android版将…