docker构建nginx+vue+spring boot的基础镜像,并进行部署

本文介绍如何使用Dockerfile构建SpringBoot、Vue及Nginx的集成镜像,解决前后端分离部署的跨域问题,实现一个容器内同时运行三者。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Spring Boot + VUE + Ningx 前后端分离部署

spring boot + vue 前后端分离,会遇到跨域问题,所以一般使用nginx作代理,以避免跨域。最近本人在做一个工具,使用前后端分离,想使用docker部署,把nginx + spring boot+ vue部署在一个容器里面,但是发现网上找不到直接可以试用的镜像。本次教程将会从头开始使用Dockerfile构建一个基础镜像。

1. 部署结构

在一个容器实例里面,同时部署nginx(80端口)、spring boot(tomcat 8080端口)和vue静态文件
在这里插入图片描述

2. 准备文件

nginx + openjdk8基础镜像dockerfile
FROM nginx:1.16-alpine

ENV LANG C.UTF-8

RUN echo "http://mirrors.aliyun.com/alpine/latest-stable/main/" > /etc/apk/repositories && \
    echo "http://mirrors.aliyun.com/alpine/latest-stable/community/" >> /etc/apk/repositories && \
    apk update && \
    apk add --no-cache ca-certificates && \
    apk add --no-cache curl bash tree tzdata && \
    cp -rf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime	
	
RUN { \
		echo '#!/bin/sh'; \
		echo 'set -e'; \
		echo; \
		echo 'dirname "$(dirname "$(readlink -f "$(which javac || which java)")")"'; \
	} > /usr/local/bin/docker-java-home \
	&& chmod +x /usr/local/bin/docker-java-home
ENV JAVA_HOME /usr/lib/jvm/java-1.8-openjdk
ENV PATH $PATH:/usr/lib/jvm/java-1.8-openjdk/jre/bin:/usr/lib/jvm/java-1.8-openjdk/bin

ENV JAVA_VERSION 8u212
ENV JAVA_ALPINE_VERSION 8.212.04-r0

RUN set -x \
	&& apk add --no-cache \
		openjdk8="$JAVA_ALPINE_VERSION" \
	&& [ "$JAVA_HOME" = "$(docker-java-home)" ]
spring boot工程dockerfile
FROM test/nginx-jdk8:alpine
MAINTAINER xiuzhu
RUN echo "Asia/Shanghai" > /etc/timezone
VOLUME /tmp
COPY ./target/*.jar /home/app.jar
WORKDIR /home
RUN echo "nginx" >>/etc/start.sh
RUN echo "java -jar /home/app.jar" >>/etc/start.sh
CMD ["/bin/sh","/etc/start.sh"]
vue工程dockerfile
FROM test/java_app
MAINTAINER xiuzhu

COPY dist/  /usr/share/nginx/html/
ADD default.conf /etc/nginx/conf.d/
WORKDIR /usr/share/nginx/html
RUN chmod -R a+rx *

vue工程nginx的 default.conf
server {
  listen       80;

  #charset koi8-r;
  access_log  /var/log/nginx/host.access.log;

  location / {
    root   /usr/share/nginx/html;
    index  index.html index.htm;
    try_files $uri $uri/ /index.html;
  }
  
  location /api/ {
    proxy_pass  http://127.0.0.1:8080;
  }
  #error_page  404              /404.html;
  error_page   500 502 503 504  /50x.html;
  location = /50x.html {
    root   /usr/share/nginx/html;
  }
}

3. Docker构建镜像

  1. 构建基础镜像nginx + openJdk8, 使用2-1的dockerfile
    docker build -t nginx_jdk1.8:alpine .
  2. 构建spring boot docker镜像
    首先编译 mvn package
    然后执行命令 docker build -t test/java_app .
  3. 基于java镜像,构建前端镜像
    首先进行编译 npm install,
    之后执行 npm run build
    再执行docker build -t test/java_app_web .

4. 使用镜像进行测试

使用镜像执行:
docker run --name test_vue_app -p 80:80 -p 8080:8080 -d test/java_app_web
然后访问 http://127.0.0.1/index.html即可!

### 部署包含Spring Boot、Redis、NginxVue3项目的指南 #### 使用Docker部署综合项目结构 为了成功地使用Docker部署一个Spring Boot后端、Redis缓存服务、Nginx作为反向代理以及Vue.js前端组成的复杂Web应用程序,通常需要创建多个容器来分别处理各个组件的服务。这可以通过定义`docker-compose.yml`文件实现多容器编排。 对于具体的配置细节,在`docker-compose.yml`中可以指定不同服务之间的依赖关系和服务本身的属性,比如暴露的端口号、挂载的数据卷等[^4]。 #### 构建前后端分离的应用架构 - **后端部分**:基于Spring Boot框架开发API接口,通过Maven或Gradle工具构建可执行JAR包。在对应的Dockerfile中应指明基础镜像(如采用官方OpenJDK镜像),复制打包好的jar文件至目标位置设置入口点命令启动Java应用;同时利用环境变量传递必要的配置项给应用程序实例,例如数据库连接字符串或者密钥等敏感信息[^3]。 如果遇到类似`ADD failed: file not found in build context or excluded by .dockerignore`这样的错误,则可能是由于`.dockerignore`文件排除了所需的资源或者是当前工作目录下的相对路径不正确所引起的。确保项目根目录存在有效的输出制品且未被忽略规则匹配上是解决问题的关键所在[^2]。 - **前端部分**:以Vue CLI脚手架为基础建立单页面应用(SPA),经过npm run build指令产出静态网页资产放置于特定文件夹内供后续集成调优阶段引用。针对Vue Router的历史模式(History Mode)特性做适配调整时,需配合Nginx服务器设定恰当的位置路由规则以便正确解析URL地址映射到实际存在的HTML文档片段之上[^1]。 ```yaml version: '3' services: backend: image: springboot-app ports: - "8080:8080" environment: SPRING_DATASOURCE_URL: jdbc:mysql://db:3306/mydatabase?useSSL=false&serverTimezone=UTC SPRING_REDIS_HOST: redis depends_on: - db - redis frontend: image: nginx volumes: - ./frontend/dist:/usr/share/nginx/html ports: - "80:80" db: image: mysql/mysql-server:latest environment: MYSQL_ROOT_PASSWORD: jeecg123456 volumes: - db_data:/var/lib/mysql redis: image: redis:alpine volumes: db_data: ``` 上述YAML片断展示了如何组合各独立部件形成统一的整体解决方案。其中特别强调了关于MySQL密码默认值的信息[^5]。 #### 注意事项 确保所有涉及的安全凭证都妥善保管起来,不要硬编码进源代码或是公开版本控制系统里面去。另外考虑到生产环境中可能涉及到更复杂的网络策略与安全组规则等因素的影响,建议提前做好充分测试验证再正式上线发布。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值