手把手教你通过 Docker 部署前后端分离项目(亲测可用)

news2024/10/2 6:36:19
  • 安装Docker

  • 安装Nginx

  • 安装Mysql

  • 部署SpringBoot项目

  • 部署Vue项目

一、安装Docker

1、安装:

yum install docker 

2、启动/停止/重启docker服务

service docker start 
service docker stop 
service docker restart 

3、查看docker版本信息

docker version

4、运行helloword,因为不存在此镜像,docker会自动下载运行本镜像

docker run hello-world

5、查看所有docker镜像

docker images

二、安装Nginx

1、拉取Nginx镜像文件

docker pull nginx

2、查看下载好的镜像文件

docker images

3、创建并运行Nginx容器

docker run -d --name nginx01 -p 3344:80 nginx
命令详解:
# docker run 启动一个镜像
# -d 表示后台允许
# --name nginx01  表示为当前容器起一个别名
# -p 3344:80 表示将本机的3344端口映射到nginx镜像的80端口

4、查看正在运行的容器

docker ps

5、查看Nginx是否部署成功

curl localhost:3344

拓展

1、进入Nginx容器当中

docker exec -it nginx01 /bin/bash
命令详解:
# docker exec 在运行的容器中执行命令
# -i 以交互模式运行容器,通常与 -t 同时使用;例如-it
# -t 为容器重新分配一个伪输入终端,通常与 -i 同时使用;例如-it
# nginx01 容器名
# /bin/bash 其实就是表示载入容器后运行bash(命令语言解释程序), 因为docker中必须要保持一个进程(运行的程序)的运行,要不然整个容器就会退出,所以说,bash就担任起了docker中运行的那个进程的角色!
#而/bin/bash则是bash在linux下的位置

2、在容器中查询出nginx的相关配置文件存放位置

whereis nginx

3、退出容器,回到本地linux系统

exit

4、停止并移除Nginx容器

docker stop bedfd2a72585 #停止容器
docker rm bedfd2a72585 #移除容器
# bedfd2a72585表示容器的ID,即:CONTAINER ID

5、本地创建管理目录

mkdir -p /data/nginx
mkdir -p /data/nginx/www 
mkdir -p /data/nginx/conf
mkdir -p /data/nginx/logs

6、将容器中的相应文件copy到刚创建的管理目录中

docker cp bedfd2a72585:/etc/nginx/nginx.conf /data/nginx/
docker cp bedfd2a72585:/etc/nginx/conf.d /data/nginx/conf/
docker cp bedfd2a72585:/usr/share/nginx/html/ /data/nginx/www/
docker cp bedfd2a72585:/var/log/nginx/ /data/nginx/logs/

注:docker cp bedfd2a72585中的 "bedfd2a72585" 为容器ID(docker ps可查看)

7、再次启动容器并作目录挂载

docker run --name nginx -p 80:80 -v /data/nginx/nginx.conf:/etc/nginx/nginx.conf -v /data/nginx/www/:/usr/share/nginx/html/ -v /data/nginx/logs/:/var/log/nginx/ -v /data/nginx/conf/:/etc/nginx/conf.d --privileged=true -d nginx

ps:-p 80:80 端口进行映射,将本地 80端口映射到容器内部的 80 端口。

三、安装Mysql

1、下拉mysql镜像文件

docker pull mysql  #默认最新版本
 
docker pull mysql:xxx  #指定版本号

2、查看当前镜像

docker images

3、启动mysql容器

第一种:

docker run --name mysql01 -d -p 3310:3306 -e MYSQL_ROOT_PASSWORD=root mysql

命令详解:

# --name 自定义容器名称
# -d 后台运行
# -p 指定映射的端口号
# -e MYSQL_ROOT_PASSWORD=root 数据库密钥

第二种:

docker run --restart=always --privileged=true -d -v /home/mysql/data:/var/lib/mysql -v /home/mysql/conf:/etc/mysql/conf.d -v /home/mysql/my.cnf:/etc/mysql/my.cnf -p 3311:3306 --name mysql02 -e MYSQL_ROOT_PASSWORD=root mysql
  • --restart=always 代表开启启动

  • --privileged=true 代表进入容器内部为管理员身份

  • -d 表示后台运行容器 并返回容器Id

  • -v 把mysql产生的数据同步到本地 防止数据丢失

  • -e 容器传参  设置mysql的初始密码

4、查看正在运行的容器

docker ps

5、测试数据库连接

四、部署SpringBoot项目

1、整合后端成Jar包并编写Dockerfile文件

2、Dockerfile内容详解

FROM java:8  #工程java版本
 
COPY *.jar /app.jar  #将所有的jar包整合为app.jar
 
EXPOSE 9099  #暴露后端端口号
 
ENTRYPOINT ["java","-jar","app.jar"]  #执行jar包

3、将文件上传到Linux服务器上面,必须放在同级目录一起!

4、构建镜像

docker build -t api .  #点千万别漏了,这里取名镜像为api,可以随便取名!

5、查看当前镜像

docker images

6、创建一个新的容器并运行

docker run -d -p 9099:9099 --name httapi api 
#将9099端口映射到9099端口,端口记得放开
#httapi为自定义容器名字
#api是镜像名字

7、查看正在运行的容器

docker ps

8、使用postman测试接口

五、部署Vue项目

1、打包Vue工程并同时编写default.conf文件和Dockerfile文件

2、default.conf文件和Dockerfile文件详细

  • default.conf配置

server {
    listen       80;
    server_name  ip地址; # 修改为docker服务宿主机的ip
 
    location / {
        root   /usr/share/nginx/html;
        index  index.html index.htm;
        try_files $uri $uri/ /index.html =404;
    }
     location /api {
      proxy_pass http://ip地址:端口号/;
    }
 
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   html;
    }
}
  • Dockerfile配置

# 基础镜像使用Nginx
FROM nginx
# 作者
MAINTAINER htt
# 添加时区环境变量,亚洲,上海
ENV TimeZone=Asia/Shanghai
# 将前端dist文件中的内容复制到nginx目录
COPY dist  /usr/share/nginx/html/
# 用本地的nginx配置文件覆盖镜像的Nginx配置
COPY default.conf /etc/nginx/conf.d
# 暴露端口
EXPOSE 80

3、上传这三个文件到Linux服务器的同一个文件夹当中,务必放在一起!

4、构建镜像

docker build -t vue . #点千万别漏了,这里取名镜像为vue,可以随便取名!

5、查看当前镜像

docker images

6、创建一个新的容器并运行

docker run -d -p 8088:80 --name httvue vue 
#将8088端口映射到80端口,端口记得放开
#httvue为自定义容器名字
#vue是镜像名字

7、查看正在运行的容器

docker ps

8、访问前端页面并测试接口

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/437367.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

UDS 14229-1 诊断服务,两万字长文Trace版详细解读

🍅 我是蚂蚁小兵,专注于车载诊断领域,尤其擅长于对CANoe工具的使用🍅 寻找组织 ,答疑解惑,摸鱼聊天,博客源码,点击加入👉【相亲相爱一家人】🍅 玩转CANoe&…

Tomcat—javaEE

文章目录 1.定义及启动2.熟悉重点目录作用2.1bin2.2conf/server.xml2.3日志文件2.4webapps 3.部署和访问 1.定义及启动 (1)Tomcat属于web服务器的一种,也是servlet的一种 (2)Windows下,双击Tomcat下/bin/s…

ArcGIS|一文彻底搞懂GIS图斑编号

实际工作中,经常会有对各类图斑进行编号的需求。数据中图斑数比较少时,我们可以手动进行编号,但数据量较大时就必须得想办法自动实现图斑编号。今天,将分享几种常见的图斑自动编号方式,主要包括:图斑顺序编…

Mysql 触发器(复习)

今天考虑一个删除记录回收站的时候,突然想到了触发器这个东西,基本上之前也很少使用。废话不不多说,先看它的解释: 在MySQL中,触发器(Trigger)是一种特殊的存储过程,它会在指定的事…

[java/初学者]java常用API(2)——字符串

前言 所谓的字符串其实就是一串连续的字符,它是由许多单个字符连接而成的。如多个英文字母所组成的一个英文单词。字符串中可以包含任意字符,这些字符必须包含在一对双引号之内,例如“Dufeng”。 而与字符串相关的类都放在java.lang包中&…

Nuitka打包PyQt项目快速上手

之前用pyinstaller打包python程序,听说Nuitka比较快,用它打包PyQt的程序练练手。 Nuitka 问了问chatGPT,总结几点:将python编译成C/C,提高速率、跨平台、编译后程序直接运行(不需要python解释器&#xff0…

【云原生】Kubernetes集群升级

【云原生】Kubernetes集群升级指南 前言一、集群升级过程辅助命令二、升级master节点2.1、升级kubeadm。2.2、验证升级计划2.3、master节点升级 三、升级node节点总结 前言 本文演示kubernetes集群从v1.24.1升级到v1.25.5。 相关文档。 一、集群升级过程辅助命令 &#xff0…

linux系统中MongoDB数据库安装及分片集群搭建

史上最全的mongodb分片集群搭建,从介绍安装到集群搭建授权,你再也找不到比他更加详细的资料了,未经允许禁止转载!! 一、简介 MongoDB是一个便于开发和扩展设计的文档数据库,属于NoSQL数据库的一种。Mongo…

计算机笔试/面试常见逻辑题/智力题汇总

说明:按种类汇总,难度不分先后,做了分级罗列,方便后续扩充,大家有比较有意思的题目可以在讨论区讨论。 下面有的题题解相对复杂的直接参考了网上的一些解答,而有的题解我认为并不好的也做了补充&#xff0c…

2023年值得关注的3个品牌趋势,帮你弯道超车

2023年,大环境开放,压抑三年的消费蓄势待发,品牌如何唤醒消费者的、热情成了重中之重的大事。 春风和煦,万物生长。又到了各类品牌、各位营销人踌躇满志、斗志昂扬的时候了,浅析一下2023品牌宣传趋势,抓住…

OpenCV 图像处理学习手册:1~5

原文:Learning Image Processing with OpenCV 协议:CC BY-NC-SA 4.0 译者:飞龙 本文来自【ApacheCN 计算机视觉 译文集】,采用译后编辑(MTPE)流程来尽可能提升效率。 当别人说你没有底线的时候,…

Redis删除键命令: 入门用del,老手用unlink,有何区别?

在Redis中,删除键是一项常见操作。Redis提供了两种删除键的方式:del和unlink。这两种方式看似类似,但实际上它们之间存在着不同之处。在本文中,我们将深入探讨这两种删除键的区别以及它们在实际应用中的使用。 一、del命令 del…

【OpenCV技能树】——二值图像处理

前言: 😊😊😊欢迎来到本博客😊😊😊 目前正在进行 OpenCV技能树的学习,OpenCV是学习图像处理理论知识比较好的一个途径,至少比看书本来得实在。本专栏文章主要记录学习Op…

SDUT操作系统课程(CATS)专题二+专题四(参考总结)

专题二+进程调度算法 RR q=1(含做题代码) 总结:到达时间一到对应进程进入,执行队首进程一次,对应的服务时间划一记号(推荐用正字),队首进程未执行到完成的话重新进入队尾,队首进程执行到完成的话出队,下一秒继续执行队首进程,当5个进程全部入队之后只要执行后两步操…

STM32-互补输出带死区和刹车断路笔记

互补输出带死区控制 比如说,高级控制定时器(TIM1 和 TIM8)可以输出两路互补信号,并管理输出的关断与接通瞬间。这段时间通常称为死区,由于硬件设备的延迟和一些设备转换的用时,这时候进行操作可能会导致比…

如何把Spring Boot的Jar包做成exe?生成自己的程序,超详细教程奉上

近期做了一个前后端合并的spring boot项目,但是要求达成exe文件,提供给不懂电脑的小白安装使用,就去研究了半天,踩了很多坑,写这篇文章,是想看到这篇文章的人,按照我的步骤走,能少踩…

神马转债,海顺转债,柳工转2,能辉转债上市价格预测

神马转债 基本信息 转债名称:神马转债,评级:AAA,发行规模:30.0亿元。 正股名称:神马股份,今日收盘价:7.83元,转股价格:8.38元。 当前转股价值 转债面值 / 转…

【cpolar 内网穿透】Openwrt 软路由实现内网穿透

cpolar 是一种安全的内网穿透云服务,它将内网下的本地服务器通过安全隧道暴露至公网。使得公网用户可以正常访问内网服务。 文章目录 前言一、上传 cpolar 安装包二、配置cpolar环境变量三、安装并配置 cpolar 服务3.1 安装 cpolar3.2 启动 cpolar3.3 进行其他配置 …

RabbitMQ (HelloWord 消息应答 持久化 不公平分发 预取值)

文章目录 HelloWord工作队列工作线程代码启动两个工作线程工作队列(生产者代码)工作队列(结果成功) 消息应答自动应答手动消息应答multiple的解释消息自动重新入队手动应答代码消息手动应答(生产者)消息手动…

网络编程之TCP

hi,大家好,今天为大家带来TCP协议的相关知识 这里写目录标题 认识TCP的相关方法实现TCP版本的回显服务器实现多线程版本的TCP回显服务器实现线程池版本的TCP回显服务器 认识TCP方法 认识TCP的相关方法 实现TCP版本的回显服务器 实现多线程版本的TCP回显服务器 实现线程池版…