无缝集结:一键式部署前后端分离项目,快速构建强大的容器化应用

一键式部署前后端分离项目,快速构建强大的容器化应用

关于作者

  • 作者介绍

🍓 博客主页:作者主页

🍓 简介:JAVA领域优质创作者🥇、一名初入职场小白🎓、曾在校期间参加各种省赛、国赛,斩获一系列荣誉 🏆

🍓 关注我:关注我学习资料、文档下载统统都有,每日定时更新文章,励志做一名JAVA资深程序猿👨‍💻


在当今的软件开发领域,前后端分离项目极为流行。它们以其灵活性、可维护性和可扩展性而受到开发者的青睐。与此同时,容器化技术的崛起也为项目的部署和管理提供了全新的可能性。在本文中,我们将探索如何利用Docker容器化技术快速而高效地部署前后端分离项目。通过将前端和后端分别打包为独立的容器,我们能够实现快速部署、灵活扩展以及更好的资源隔离。无需担心依赖冲突或环境配置问题,我们将一键式地完成整个部署过程。接下来一起深入了解如何利用Docker为前后端分离项目搭建一个强大的容器化应用!

1.搜索nginx镜像

sql 复制代码
docker search nginx

2.拉取nginx镜像

docker pull nginx:latest

查看一下拉取的镜像

docker images

3.运行镜像

css 复制代码
docker run -d --name zsrnginx -p 80:80 -p 443:443 nginx:latest

查看运行情况:

docker ps

4.在/home/ 目录下新建目录 nginx

shell 复制代码
mkdir /home/nginx
cd /home/nginx

5.拷贝nginx配置文件到主机目录,为文件映射做准备(直接映射会出错)

nginx配置文件、html文件、logs日志文件

shell 复制代码
docker cp 42928253c136:/etc/nginx/nginx.conf /home/nginx/
docker cp 42928253c136:/etc/nginx/conf.d /home/nginx/conf/
docker cp 42928253c136:/usr/share/nginx/html /home/nginx/html
docker cp 42928253c136:/var/log/nginx/ /home/nginx/logs/

6.停止运行容器并删除容器

shell 复制代码
docker stop 42928253c136
shell 复制代码
docker rm 42928253c136

7.重新启动容器(映射相应的目录文件)

shell 复制代码
docker run -d  --name zsrnginx -p 8088:8088 -p 443:443 -v /home/nginx/nginx.conf:/etc/nginx/nginx.conf -v /home/nginx/logs:/var/log/nginx -v /home/nginx/html:/usr/share/nginx/html -v /home/nginx/conf:/etc/nginx/conf.d --privileged=true     -e TZ=Asia/Shanghai nginx:latest

查看运行情况:

docker ps

8.发布Vue项目

shell 复制代码
npm install
npm run build

#运行完成后在项目目录下生成dist文件

buil打包后vue pathRewrite不生效

vue.js - Vue 代理设置 在打包后是不是不生效了

9.配置nginx

配置完成后通过 ip+端口号 进行访问。

防火墙命令

shell 复制代码
#1.检验防火墙是否启动
firewall-cmd --state

#2. 检查8080 端口是否启动:
firewall-cmd --permanent --zone=public --list-ports

#3.开启 8080 端口:
firewall-cmd --zone=public --add-port=8080/tcp --permanent

#4.重新启动防护墙
firewall-cmd --reload

#5.验证8080 端口是否生效
firewall-cmd --zone=public --query-port=8080/tcp

#Centos 7中默认的linux的系统默认防火墙不是iptables,而是firewall,此时应该使用以下方式关闭防火墙了。

#开启、重启、关闭firewalld.service服务
service firewalld start 	#开启

service firewalld restart	#重启

service firewalld stop	#关闭

systemctl disable firewalld.service #禁止firewall开机启动

doker安装数据库

1. 拉取Mysql镜像版本

shell 复制代码
docker pull mysql:8.0

docker images

2. 启动Mysql镜像

shell 复制代码
docker run -itd --name mysql-8 -p 3306:3306 -e MYSQL_ROOT_PASSWORD=需要设置的mysql密码 mysql:8.0

参数说明:

  • -name mysql-8:所建容器的名称
  • -p 3306:3306 :映射容器服务的 3306 端口到宿主机的 3306 端口,外部主机可以直接通过 宿主机ip:3306 访问到 MySQL 的服务。
  • MYSQL_ROOT_PASSWORD=需要设置的mysql密码:设置 MySQL 服务 root 用户的密码
  • mysql:8.0:使用的镜像,即镜像名:tag(版本)

启动后:使用命令 docker ps 查看

3. 配置Mysql远程链接

shell 复制代码
# 进入镜像
docker exec -it mysql-8 /bin/bash

# 登录Mysql
mysql -u root -p

# 切换数据库
use mysql

# 设置远程访问
select host,user,plugin from user;
+-----------+------------------+-----------------------+
| host      | user             | plugin                |
+-----------+------------------+-----------------------+
| %         | root             | caching_sha2_password |
| localhost | mysql.infoschema | caching_sha2_password |
| localhost | mysql.session    | caching_sha2_password |
| localhost | mysql.sys        | caching_sha2_password |
| localhost | root             | mysql_native_password |
+-----------+------------------+-----------------------+
# 这里需要修改配置来允许远程登录
delete from user where user ='root' and host='%';

# 设置所有host都可以访问
update user set host='%' where user ='root';

# 修改加密方式
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '待修改密码';

# 刷新生效
FLUSH PRIVILEGES;

后端生成DockerFile打包镜像

将maven的test禁用 (选择test,点闪电),mysql的连接配置需要修改为服务器的ip端口和密码。

shell 复制代码
# 打包完成
[INFO] --- spring-boot-maven-plugin:2.1.2.RELEASE:repackage (repackage) @ exam ---
[INFO] Replacing main artifact with repackaged archive
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 15.112 s
[INFO] Finished at: 2022-11-09T10:46:57+08:00
[INFO] ------------------------------------------------------------------------

# 将target生成jar包放入linux文件夹
#到根目录
mkdir /home/zsr
#进入文件夹内
cd zsr  #将jar包放入该文件夹内

# 新建文件 Dockerfile文件
touch Dockerfile

# 编辑 Dockerfile文件
vim Dockerfile

# Dockerfile 文件内容
FROM java
VOLUME  /tmp
ADD exam-0.0.1-SNAPSHOT.jar exam.jar
EXPOSE 8080 #对外暴露的端口	 ↕ 这两个地方的名字必须一致
ENTRYPOINT ["java","-jar","/exam.jar"]

# 镜像构建build
docker build -f DockerFile -t exam .

# 运行容器
docker run -itd  --name exam -p 8080:8080 exam:latest

通过本文的学习,我们了解到了如何利用Docker容器化技术来部署前后端分离项目。我们学会了将前端和后端分别打包为独立的容器,实现了快速部署、灵活扩展和更好的资源隔离。使用Docker,我们能够轻松解决依赖冲突和环境配置的问题,大大提高了开发和部署的效率。无论是在本地开发环境还是生产环境,Docker都为我们提供了一种优雅而高效的解决方案。希望本文对你理解和应用Docker在前后端分离项目部署中的价值有所帮助。在容器化的世界里,构建出更加强大、可靠的应用程序。

参考文献:

Docker部署前后端分离项目

Docker安装Mysql 8.0

Docker 部署Vue项目

相关推荐
是芽芽哩!22 分钟前
【Kubernetes 指南】基础入门——Kubernetes 基本概念(二)
云原生·容器·kubernetes
soragui25 分钟前
【ChatGPT】OpenAI 如何使用流模式进行回答
linux·运维·游戏
Logintern091 小时前
Linux如何设置redis可以外网访问—执行使用指定配置文件启动redis
linux·运维·redis
娶不到胡一菲的汪大东1 小时前
Linux之ARM(MX6U)裸机篇----1.开发环境搭建
linux·运维·服务器
vvw&2 小时前
如何在 Ubuntu 22.04 上安装和使用 Composer
linux·运维·服务器·前端·ubuntu·php·composer
Hi202402172 小时前
ubuntu22.04上安装win10虚拟机,并采用noVNC+frp,让远程通过web访问桌面
运维·kvm·云桌面
几维安全2 小时前
如何通过运行时威胁洞察提升反欺诈策略
运维·网络·安全
X__cheng2 小时前
【C++】list模拟实现
c++·容器
怡雪~2 小时前
k8s使用ceph
ceph·容器·kubernetes
soragui3 小时前
【Ubuntu】如何轻松设置80和443端口的防火墙
linux·运维·ubuntu