docker部署springboot 前后端分离项目

Docker 学习之路 springboot 前后端分离部署

加深docker学习映像 安装多个项目可能所用软件 把开发项目打成镜像运行

镜像的各种版本号 具体可查看 Dokerhub 官网:Docker Hub

特别提醒:像数据存储之类的容器 最好是选择数据卷挂载 这样才能更好的保存数据,否则因失误操作删除容器数据丢失悔不则已。

Springboot -vue 前后端分离项目 通过 idea 打包为镜像

(1)首先 确保idea 是否连接上了咱们服务器上的docker

image-20200531131441769

(2)然后在后端项目中 编写Dockerfile 文件

image-20200531131552119

#基础镜像依赖
FROM java:8
#作者信息 也可用 LABEL 指定
MAINTAINER lei<leileideve@163.com>
#信息 随意指定吗
LABEL version=1.0
#挂载路径
VOLUME /tmp
#将项目打包后的jar 复制到容器 且更名为application.jar
ADD leilei-web.jar application.jar
#指定端口
EXPOSE 6543
#随意输出一句
CMD ["echo","success---build"]
#容器启动时执行什么命令
ENTRYPOINT ["java","-jar","application.jar"]
(3)pom.xml 中添加 docker 插件

为了 快捷推送到 阿里云等 我们还可以指定我们的镜像前缀 或者 docker 所在服务器Ip 端口

image-20200531132000447

docker 打包插件 我这里 将 docker:build 与maven 的 package结合到了一起

            <!-- docker插件 -->
            <plugin>
                <groupId>com.spotify</groupId>
                <artifactId>docker-maven-plugin</artifactId>
                <version>1.2.0</version>
                <configuration>
                    <!-- 私有仓库配置,需要settings.xml文件配合serverId对应的服务地址 -->
<!--                    <serverId>${docker.serverId}</serverId>-->
                    <!-- docker私服地址 -->
<!--                    <registryUrl>${docker.registry}</registryUrl>-->
                    <!-- 指定docker server的地址,该配置不需要本机安装docker -->
                    <dockerHost>${docker.host}</dockerHost>
                    <imageName>${docker.image.prefix}/${project.artifactId}</imageName>
                    <imageTags>
                        <imageTag>latest</imageTag>
                    </imageTags>
                    <!-- Dockerfile 文件所在位置  -->
                    <dockerDirectory>${project.basedir}/docker</dockerDirectory>
                    <resources>
                        <resource>
                            <targetPath>/</targetPath>
                            <directory>${project.build.directory}</directory>
                            <include>${project.build.finalName}.jar</include>
                        </resource>
                    </resources>
                </configuration>
                <executions>
                    <!-- package之前清除上一次构建的image -->
                    <execution>
                        <id>remove-image</id>
                        <phase>package</phase>
                        <goals>
                            <goal>removeImage</goal>
                        </goals>
                        <configuration>
                            <imageName>
                                ${docker.image.prefix}/${project.artifactId}
                            </imageName>
                            <imageTags>
                                <imageTag>latest</imageTag>
                            </imageTags>
                        </configuration>
                    </execution>
                    <!-- 将docker:build绑定到package这个phase  -->
                    <execution>
                        <id>build-image</id>
                        <phase>package</phase>
                        <goals>
                            <goal>build</goal>
                        </goals>
                        <configuration>
                            <!-- imageName中若不指定tag,则会打上latest -->
                            <imageName>${docker.image.prefix}/${project.artifactId}</imageName>
                            <imageTags>
                                <imageTag>latest</imageTag>
                            </imageTags>
                            <!-- 可以使用<imageTags>标签打其他额外的tag -->
                        </configuration>
                    </execution>
                </executions>
            </plugin>

我这里执行打包命令就会将咱们的项目打成一个docker 镜像然后推到服务器

image-20200531132227774

当然 也可以执行命令

mvn clean package docker:build

image-20200531132734580

image-20200531132801903

然后咱们先启动我们的后端服务 镜像

image-20200531133136497

(4)vue 前端项目 打为镜像

编写前端项目 所需 Dockerfile

image-20200531133341732

# 所需基础镜像
FROM nginx
# 作者信息
MAINTAINER lei<leileideve@163.com>
# 标签信息
LABEL version=999
# 端口指定
EXPOSE 8888
# 指定工作目录
WORKDIR /usr/share/nginx/html
# 文件拷贝 将打包后的前端项目 拷贝到。。。。。
COPY dist/ /usr/share/nginx/html
#拷贝nginx 配置文件到。。。。。。。
COPY nginx.conf /etc/nginx/conf.d/default.conf

因为 vue 前端项目打包后 依赖与 nginx 所以我们需要对nginx 做一些额外配置

server {
    listen       8888;
    server_name  localhost;

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

    location / {
        root   /usr/share/nginx/html;
        index  index.html index.htm;
        try_files $uri $uri/ @router;
    }
    location @router {
                rewrite ^.*$ /index.html last;
    }
    location /prod-api/{
        proxy_set_header Host $http_host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header REMOTE-HOST $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_pass http://你的后端服务器IP:端口/;
    }
    #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;
    }
}

但是由于目前学习水平存在局限 (本想在idea 中 打包前端项目为镜像的,但是查了半天资料 ,并无头绪),所以我这里只是将这个文件传到服务器 ,通过打包命令来打成docker镜像了

有知道 如何在idea 中 打包前端文件 为docker镜像的大佬,看到了麻烦带带我!!!

我这里首先对前端项目进行打包

 npm run build:prod

然后将我们的 nginx.conf dist 文件夹 以及 Dockerfile 文件上传至我们服务器一个目录下

image-20200531134748446

执行镜像打包命令

docker build -t app-fontend .

image-20200531135020648

image-20200531135057479

我们根据打的前端镜像 启动一个容器,测试是否能够访问我们的后端服务

docker run -d -p 8888:8888 --name app-web app-fontend

image-20200531135239531

页面访问试试

image-20200531135345105

登录测试 判断是否可以连接到我们的另一个正在运行的容器( 后端服务)

image-20200531135518155

也能成功登录

那么目前的 docker 软件安装 以及 前后端分离项目 docker 部署就在这里告一段落了,至于 idea 中打包前端项目为镜像 我也会继续研究的。。

### 使用Docker镜像部署基于Spring Boot的前后端分离项目 #### 准备工作 为了成功地使用Docker容器化并部署一个前后端分离的应用程序,需要准备前端和后端两个独立的服务。对于后端服务而言,通常会创建一个带有`@SpringBootApplication`注解的启动类来简化配置过程[^1]。 #### 构建Dockerfile 针对后端部分,编写一个名为 `Dockerfile` 的文件用于定义构建流程: ```dockerfile FROM openjdk:17-jdk-alpine VOLUME /tmp COPY target/myapp.jar app.jar ENTRYPOINT ["java","-jar","/app.jar"] ``` 此脚本指定了基础镜像为Alpine版本的OpenJDK 17,并复制编译好的应用程序包到容器内的指定位置,最后设置运行命令以执行该Jar包。 对于前端应用,则可以采用Node.js作为基础环境来进行打包处理。同样通过编写相应的 `Dockerfile.frontend` 文件完成自动化构建操作: ```dockerfile FROM node:lts-alpine as build-stage WORKDIR /app COPY package*.json ./ RUN npm install COPY . . RUN npm run build --prod FROM nginx:alpine COPY --from=build-stage /app/dist /usr/share/nginx/html EXPOSE 80 CMD ["nginx", "-g", "daemon off;"] ``` 这段代码首先利用Node.js环境安装依赖项并对源码进行生产模式下的优化编译;之后切换至Nginx服务器映射静态资源目录以便于提供HTTP访问支持。 #### 编写docker-compose.yml 为了让前后两端能够协同工作,在同一网络下通信,推荐使用 `docker-compose.yml` 来管理多容器间的协作关系: ```yaml version: '3' services: backend: image: my-backend-image ports: - "8080:8080" environment: SPRING_PROFILES_ACTIVE: prod frontend: image: my-frontend-image depends_on: - backend ports: - "80:80" ``` 上述YAML文档描述了一个由两个服务组成的系统架构——其中一个是负责业务逻辑运算的Java Web API接口(`backend`),另一个则是承载用户界面展示功能的Web页面(`frontend`)。两者之间可以通过内部DNS解析相互调用API接口实现数据交互。 #### 部署与测试 当所有的准备工作完成后,只需在一个终端窗口中输入如下指令即可一键启动整个分布式系统的全部组件: ```bash docker-compose up -d ``` 这将会按照设定自动拉取所需的官方镜像、构建自定义镜像以及依次启动各个容器实例。此时应该可以在浏览器地址栏里键入http://localhost尝试浏览已上线的应用首页了。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值