Docker(项目部署)

部署服务端(后端)

1). 修改项目的配置文件,修改数据库服务地址(打包package)

然后,执行maven中的package生命周期,进行打包(跳过测试),并将打包后的jar包命名为 tlias.jar 。

2). 编写Dockerfile文件 (AI辅助)

文件名 Dockerfile:

bash 复制代码
# 使用 CentOS 7 作为基础镜像

FROM centos:7

# 添加 JDK 到镜像中

COPY jdk17.tar.gz /usr/local/

RUN tar -xzf /usr/local/jdk17.tar.gz -C /usr/local/ && rm /usr/local/jdk17.tar.gz

# 设置环境变量

ENV JAVA_HOME=/usr/local/jdk-17.0.10

ENV PATH=$JAVA_HOME/bin:$PATH

# 阿里云OSS环境变量

ENV OSS_ACCESS_KEY_ID=LTAI5tP6dc4cvccdvvySE39X ENV OSS_ACCESS_KEY_SECRET=ZSyIT31qhxIkS0dH1H9WzHqPiyM3Ot 

#统一编码 
ENV LANG=en_US.UTF-8 
ENV LANGUAGE=en_US:en 
ENV LC_ALL=en_US.UTF-8 
# 创建应用目录 

RUN mkdir -p /tlias WORKDIR /tlias 
# 复制应用 JAR 文件到容器 
COPY tlias.jar tlias.jar 
# 暴露端口 

EXPOSE 8080 
# 运行命令 
ENTRYPOINT ["java","-jar","/tlias/tlias.jar"]

由于项目要运行,需要依赖jdk的环境,所以这里我们需要将tlias.jar,jdk17.tar.gz,Dockerfile三个文件,上传到Linux服务器的 /root/tlias 目录下(如果没有这个目录,提前创建好)。

3). 构建Docker镜像,部署Docker容器,运行测试。

  • 构建Docker镜像

docker build -t tlias:1.0 .

  • 部署Docker容器

docker run -d --name tlias-server --network itheima -p 8080:8080 tlias:1.0

通过 docker logs -f 容器名,就可以查看容器的运行日志。

这样后端服务,就已经启动起来了。

部署前端

  • 需求:创建一个新的nginx容器,将资料中提供的前端项目的静态资源部署到nginx中。

  • 步骤:

    • 在宿主机上准备静态文件及配置文件存放目录(在 /usr/local 目录下创建 tlias-web 目录)。

      -v /usr/local/tlias-web/html:/usr/share/nginx/html

      -v /usr/local/tlias-web/conf/nginx.conf:/etc/nginx/nginx.conf

    • 部署nginx容器

1). 部署nginx容器(设置目录映射)。

  • 将 目录html和 配置文件存放目录 conf,上传至服务器端的 /usr/local/tlias-web目录下。
  • 执行如下命令,部署nginx容器
bash 复制代码
docker run -d \ 
--name nginx-tlias \
-v /usr/local/tlias-web/html:/usr/share/nginx/html \ 
-v /usr/local/tlias-web/conf/nginx.conf:/etc/nginx/nginx.conf \ 
--network itheima \ 
-p 80:80 \ 
nginx:1.20.2

前后端都部署完毕后,就可以打开浏览器,来测试一下。访问前端的nginx服务器 。

总结

先部署mysql然后是后端最后是前端

部署MySQL

在前面的这个本地目录挂载当中我们实现了mysql的操作容器数据目录,

配置文件,还有初始化脚本的目录

挂载而在初始化脚本当中有相关的数据库文件然后把它挂在上来

bash 复制代码
docker run -d \
 --name mysql \
 -p 3307:3306 \
 -e MYSQL_ROOT_PASSWORD=123 \
 -e TZ=Asia/Shanghai \
 -v /root/mysql/data:/var/lib/mysql \
 -v /root/mysql/init:/docker-entrypoint-initdb.d \
 -v /root/mysql/conf:/etc/mysql/conf.d \
 mysql:8

后端项目

如何部署一个后端项目

一般会按 "数据库 → 应用 → 容器化 → 部署验证" 这个思路来做:

  1. 先准备基础环境(数据库)

• 使用 Docker 启动 MySQL 容器

• 创建业务所需的数据库和表结构

• 确保数据库服务稳定可访问

  1. 处理后端应用本身(以 Java / Spring Boot 为例)

• 修改项目配置文件,把数据库地址改成容器或服务器对应的地址

• 调整日志配置(如 logback),把日志输出到容器可挂载的目录,方便后期运维

• 将项目打包成可运行的 jar 包

  1. 对后端应用进行容器化

• 编写 Dockerfile,指定基础 JDK 镜像

• 把 jar 包复制到镜像中,并设置启动方式

• 构建后端应用的 Docker 镜像

  1. 部署并运行容器

• 使用构建好的镜像启动容器

• 配置端口映射、环境变量、日志目录挂载

• 确认后端服务能正常启动并连接数据库

  1. 运行与验证

• 通过接口或前端访问验证服务是否正常

• 检查日志和数据库连接是否正常

一句总结

整个过程的核心是:先保证数据库可用,再让应用配置适配容器环境,最后通过 Docker 实现标准化部署和运行。

前端

前端项目你是怎么部署的?

一般是通过 Nginx + Docker 容器化 的方式来部署前端静态资源,整体思路是:

1️⃣ 创建并部署 Nginx 容器

• 使用 Docker 启动一个独立的 Nginx 容器

• 通过目录映射的方式:

• 将前端打包后的 静态资源 映射到 Nginx 的 html 目录

• 将自定义的 nginx.conf 配置文件 映射到容器中

• 这样做的好处是:

• 不用进容器改配置

• 前端资源和配置都可以在宿主机统一管理

2️⃣ 配置 Nginx 反向代理(重点)

• 在 nginx.conf 中配置 反向代理规则

• 直接使用 Docker 容器名作为 upstream 地址,而不是 IP

• 例如:

• 前端通过 Nginx

• Nginx 反向代理到后端容器 tlias-web-management

• 这是基于 Docker 内部网络的 容器名自动 DNS 解析机制

• 好处是:

• 容器重启 IP 改变也不受影响

• 服务之间解耦,部署更稳定

👉 面试时可以一句话点亮:

"Nginx 在 Docker 网络中可以直接通过容器名访问后端服务。"

3️⃣ 上传并部署前端资源

• 将前端项目打包后的静态文件上传到服务器

• 放入 Nginx 容器映射的目录中

• 同时准备好对应的 Nginx 配置文件

4️⃣ 启动并验证

• 启动 Nginx 容器

• 通过浏览器访问前端地址

• 验证:

• 静态资源是否正常加载

• 接口请求是否成功被反向代理到后端容器

总结一句话

前端通过 Nginx 容器提供静态资源服务,并利用 Docker 网络和容器名 实现对后端容器的反向代理,整体部署方式清晰、稳定、易维护。

相关推荐
御控工业物联网3 小时前
御控远程监控智慧运维系统
运维·物联网·边缘计算·数据采集·远程监控·mqtt协议·工业智能网关
ZFB00014 小时前
【麒麟桌面系统】V10-SP1 2503 系统知识——设置面板无法打开
linux·运维·kylin
计算机小手4 小时前
Docker 部署 weserv-images:打造非侵入式图片处理中间件
图像处理·经验分享·docker·中间件
2301_780943844 小时前
linux 对文件打补丁(Patch)
linux·运维·服务器
ICT董老师4 小时前
通过kubernetes部署nginx + php网站环境
运维·nginx·云原生·容器·kubernetes·php
原神启动14 小时前
K8S(八)—— Kubernetes Pod 资源限制 + 探针(Probe)解析
云原生·容器·kubernetes
敬往事一杯酒哈4 小时前
Ubuntu 20.04 安装Anacada
linux·运维·ubuntu
还在忙碌的吴小二4 小时前
Jenkins CLI (jcli) 使用手册
运维·jenkins