当前位置: 首页 > news >正文

docker 运行自定义化的服务-前端

运行自定义化的前端服务

具体如下:

①打包前端项目,形成dist包

②编写dockerfile文件,文件内容如下:

# 基础镜像(镜像名:版本号TAG)
FROM nginx:1.0
# 镜像作者和相关元数据
LABEL maintainer="Atb" \
      version="1.0" \
      description="Custom Nginx image with custom config and web files"

# 保留或者删除此行,取决于是否需要挂载目录
# 挂载目录
VOLUME /home/soft/app/webapp
# 创建目录
RUN mkdir -p /home/soft/app/webapp
# 指定路径
WORKDIR /home/soft/app/webapp

# 复制文件{注意:文件中的前面的内容都是容器外的 后面的内容为容器内的}
# 将自定义的 Nginx 配置文件复制到容器中的正确位置
COPY nginx.conf /etc/nginx/nginx.conf

# 将自定义网页文件复制到 Nginx 的默认网页目录
COPY dist/ /usr/share/nginx/html/
 
# 指定容器内端口
EXPOSE 8182

# 启动命令
CMD ["nginx", "-g", "daemon off;"]

其中,下面这些事按需添加的

# 保留或者删除此行,取决于是否需要挂载目录
# 挂载目录
VOLUME /home/soft/app/webapp

VOLUME 指令表示一个挂载点,通常用于持久化数据或与宿主机共享数据。如果你希望容器内部的 /home/soft/app/webapp 目录被外部映射,可以使用 VOLUME。但是,如果你仅仅是创建一个工作目录并复制文件,没有必要在此处使用 VOLUME。

# 创建目录
RUN mkdir -p /home/soft/app/webapp

在镜像构建时创建目录是完全可以的,但如果没有需要额外写入的文件(例如日志文件等),则没有必要创建该目录。通常,Nginx 配置文件和网页文件会自动创建所需目录。

# 指定路径
WORKDIR /home/soft/app/webapp

WORKDIR 指令用于设置容器内的工作目录。如果你后续命令涉及在该目录中操作(例如复制文件、执行脚本等),可以使用它。此行合理,但要确保该目录对最终容器内的应用有用。

③修改nginx的配置,内容如下:

    server {
            root   /usr/share/nginx/html;
            index  index.html index.htm;
			# 当访问的资源不存在时,返回index.html页面
			try_files $uri $uri/ /index.html;
        #}
		
		#location / {
		
        # 允许跨域访问 # 允许所有域名访问,你也可以指定具体的域名,如 'https://yourdomain.com'
        add_header 'Access-Control-Allow-Origin' '*';
		# 允许的 HTTP 方法
        add_header 'Access-Control-Allow-Methods' 'GET, POST, PUT, DELETE, OPTIONS';
		# 允许的请求头
        add_header 'Access-Control-Allow-Headers' 'Origin, X-Requested-With, Content-Type, Accept, Authorization';
		# 是否允许携带凭证(如 Cookies)
        add_header 'Access-Control-Allow-Credentials' 'true';

        # 如果是 OPTIONS 请求,直接返回 200 OK
        if ($request_method = 'OPTIONS') {
            add_header 'Access-Control-Allow-Origin' '*';
            add_header 'Access-Control-Allow-Methods' 'GET, POST, PUT, DELETE, OPTIONS';
            add_header 'Access-Control-Allow-Headers' 'Origin, X-Requested-With, Content-Type, Accept, Authorization';
			# 缓存预检请求的结果,单位秒
            add_header 'Access-Control-Max-Age' 1728000;
			# 返回204响应,表示请求成功但没有返回内容
            return 204;
			}
		}

        #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   html;
        }

    }

最后把前端包、dockerfile、nginx.conf(Nginx配置)放到一个文件夹webapp中

上传到服务器中

构建docker镜像:docker build -t 容器名:版本号 .

docker build -t my-webapp:1.0 .

运行镜像

docker run --restart=always -d -p 8182:8182 my-webapp:1.0

然后就可以正常访问了

http://www.dtcms.com/a/121499.html

相关文章:

  • Memcached缓存系统:从部署到实战应用指南
  • 银河麒麟系统虚拟机网络ping不通的解决方法
  • 题目练习之位运算
  • OpenAI Operator:开启 AI 智能体的无限可能
  • 力扣DAY40-45 | 热100 | 二叉树:直径、层次遍历、有序数组->二叉搜索树、验证二叉搜索树、二叉搜索树中第K小的元素、右视图
  • 8个方向使用DeepSeek打磨完美课题申报书!
  • 我谈冈萨雷斯关于离散傅里叶变换(DFT)的两点误解
  • esp32cam -> 服务器 | 手机 -> 服务器 直接服务器传输图片
  • 从 0 到上线:Java 项目打包 Docker 镜像全流程实战
  • 宁德时代25年校招演绎数字推理SHL测评题库题型及真题分析
  • 机器学习01-支持向量机(SVM)(未完)
  • 【从零开始学习JVM | 第一篇】快速认识JVM
  • Vue3 结合 Element Plus 和 Vue Router 的完整安装配置及使用详解
  • Django REST Framework系列教程(9)——过滤与排序
  • C++初阶-C++的讲解1
  • 每日一题——BMN3 小红炸砖块
  • CompletableFuture 和 List<CompletableFuture> allOf() join() get() 使用经验
  • qq邮箱群发程序
  • 从零到精通:GoFrame框架i18n国际化实践指南——优势、功能与项目实战经验
  • sqli-labs靶场 less4
  • Flutter报错:Warning: CocoaPods is installed but broken
  • python中用open的函数方式在已有的文本内追加其他内容
  • 【C++】list底层封装和实现
  • ffmpeg编解码器相关函数
  • 文件相关:treecpmv命令扩展详解
  • 缓存淘汰算法LRU与LFU实现原理与JAVA实现
  • 98页PPT波士顿咨询:制造业数字化转型战略规划方案及变革指南
  • JSP运行环境安装及常用HTML标记使用
  • esp32cam远程图传:AI Thinker ESP32-CAM -》 服务器公网 | 服务器 -》 电脑显示
  • LangChain4j(5):LangChain4j实现RAG之RAG简介