使用Docker Compose一键部署前后端分离项目(图文保姆级教程)

一、安装Docker和docker Compose

1.Docker安装

//下载containerd.io包
yum install https://download.docker.com/linux/fedora/30/x86_64/stable/Packages/containerd.io-1.2.6-3.3.fc30.x86_64.rpm
//安装依赖项
yum install -y yum-utils device-mapper-persistent-data lvm2
//设置镜像仓库
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
//安装docker
yum install -y docker-ce
//安装docker-compose 下载很慢
curl -L "https://github.com/docker/compose/releases/download/1.25.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
二、查看版本信息

//文件授权
chmod +x /usr/local/bin/docker-compose
//查看docker版本
docker version
//查看docker-compose版本
docker-compose --version

在这里插入图片描述

二、创建工作目录并编写dockerfile文件

1、创建目录文件夹

//进入home目录
cd /home
//创建工作目录
mkdir lory
//进入lory目录
cd lory
//创建conf文件夹 用来存放redis.conf和nginx.conf配置文件
mkdir conf
//创建db文件夹 用来存放数据库初始化脚本
mkdir db
//创建jar文件 用来存放jar包
mkdir jar
//创建html文件 用来存放前端编译文件
mkdir html

在这里插入图片描述
2、将jar包、dist文件、sql脚本通过xftp上传到服务器对应文件夹,打包时记得将前后端数据库和redis改成服务器ip
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2、编写dockerfile

a.编写mysql-dockerfile

//进入lory文件夹
cd /home/lory
//查看mysql-dockerfile文件后键盘输入i将下面文件输入进去后,摁键盘esc后输入:wq保存并退出
vim mysql-dockerfile
# 基础镜像
FROM mysql:5.7
# author
MAINTAINER lory
# 执行sql脚本
ADD ./db/*.sql /docker-entrypoint-initdb.d/

在这里插入图片描述
在这里插入图片描述
b.编写nginx-dockerfile
主要功能是在容器内创建 /home/projects/front目录,并将该目录与宿主机挂载

//进入lory文件夹
cd /home/lory
//查看nginx-dockerfile文件后键盘输入i将下面文件输入进去后,摁键盘esc后输入:wq保存并退出
vim nginx-dockerfile
# 基础镜像
FROM nginx
# author
MAINTAINER lory
# 挂载目录
VOLUME /home/projects/front
# 创建目录
RUN mkdir -p /home/projects/front
# 指定路径
WORKDIR /home/projects/front
# 复制conf文件到路径
COPY ./conf/nginx.conf /etc/nginx/nginx.conf
# 复制html文件到路径
COPY ./html/dist /home/projects/front

在这里插入图片描述
在这里插入图片描述
c.编写redis-dockerfile
主要功能是在容器内创建 /home/projects/redis目录,并将该目录与宿主机挂载

//进入lory文件夹
cd /home/lory
//查看redis-dockerfile文件后键盘输入i将下面文件输入进去后,摁键盘esc后输入:wq保存并退出
vim redis-dockerfile

# 基础镜像
FROM redis
# author
MAINTAINER lory
# 挂载目录
VOLUME /home/projects/redis
# 创建目录
RUN mkdir -p /home/projects/redis
# 指定路径
WORKDIR /home/projects/redis
# 复制conf文件到路径
COPY ./conf/redis.conf /home/projects/redis/redis.conf

在这里插入图片描述

在这里插入图片描述
d.编写purchase-dockerfile (xxx-dockerfile:xxx可以随便取到时候对应上其他配置文件就行)
主要功能是在容器内创建 /home/projects/jar目录,并执行jar包

//进入lory文件夹
cd /home/lory
//查看redis-dockerfile文件后键盘输入i将下面文件输入进去后,摁键盘esc后输入:wq保存并退出
vim purchase-dockerfile

# 基础镜像
FROM openjdk:8
# author
MAINTAINER lory
# 挂载目录
VOLUME /home/projects/jar
# 创建目录
RUN mkdir -p /home/projects/jar
# 指定路径
WORKDIR /home/projects/jar
# 复制jar文件到路径
COPY ./jar/*.jar /home/projects/jar/purchase-admin.jar
# 启动应用
ENTRYPOINT ["java","-jar","purchase-admin.jar"]

在这里插入图片描述
在这里插入图片描述
e、编写docker-compose.yml文件

//进入lory文件夹
cd /home/lory
//查看redis-dockerfile文件后键盘输入i将下面文件输入进去后,摁键盘esc后输入:wq保存并退出
vim docker-compose.yml
version : '3'
services:mysql:container_name: mysqlimage: mysql:5.7build:context: .dockerfile: mysql-dockerfileports:- "3306:3306"volumes:- ./mysql/conf:/etc/mysql/conf.d  - ./mysql/logs:/logs- ./mysql/data:/var/lib/mysqlcommand: ['mysqld','--innodb-buffer-pool-size=80M','--character-set-server=utf8mb4','--collation-server=utf8mb4_unicode_ci','--default-time-zone=+8:00','--lower-case-table-names=1']environment:MYSQL_DATABASE: 'purchase_system' #数据库MYSQL_ROOT_PASSWORD: 123456  #数据库root用户密码redis:container_name: redisimage: redisbuild:context: .dockerfile: redis-dockerfileports:- "6379:6379"volumes:- ./conf/redis.conf:/home/projects/redis/redis.conf  #对应工作目录上的conf文件路径和redis-dockefile挂载目录路径- ./redis/data:/datacommand: redis-server /home/projects/redis/redis.confnginx:container_name: nginximage: nginxbuild:context: .dockerfile: nginx-dockerfileports:- "80:80"volumes:- ./html/dist:/home/projects/front       #对应上工作目录和nginx-dockerfile挂载目录- ./conf/nginx.conf:/etc/nginx/nginx.conf- ./nginx/logs:/var/log/nginx- ./nginx/conf.d:/etc/nginx/conf.ddepends_on:- purchase-serverlinks:- purchase-serverpurchase-server:container_name: purchase-serverbuild:context: .dockerfile: purchase-dockerfileports:- "9800:9800"volumes:- ./jar/purchase-admin.jar:/home/projects/server/purchase-admin.jar  #对应上工作目录和purchase-dockerfile挂载目录- ./purchase/logs:/home/projects/logs- ./home/uploadPath:/home/projects/uploadPathdepends_on:- mysql- redislinks:- mysql- redis

在这里插入图片描述
在这里插入图片描述
3、编写nginx.conf配置文件

//进入conf文件夹
cd /home/lory/conf
//查看 nginx.conf 文件后键盘输入i将下面文件输入进去后,摁键盘esc后输入:wq保存并退出
vim nginx.conf
worker_processes  1;events {worker_connections  1024;
}http {include       mime.types;default_type  application/octet-stream;sendfile        on;keepalive_timeout  65;server {listen       80;server_name  localhost;location / {root   /home/projects/front;  #nginx-dockerfile挂载目录try_files $uri $uri/ /index.html;index  index.html index.htm;}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://purchase-server:9800/;  #purchase-server为docker-compose.yml文件对应服务container_name}error_page   500 502 503 504  /50x.html;location = /50x.html {root   html;}}
}

在这里插入图片描述
在这里插入图片描述

4、编写redis.conf配置文件

//进入conf文件夹
cd /home/lory/conf
//查看 redis.conf 文件后键盘输入i将下面文件输入进去后,摁键盘esc后输入:wq保存并退出
vim redis.conf
#解除本地限制 注释bind 127.0.0.1  
#bind 127.0.0.1
#设置密码
#requirepass 123456
# 服务器运行模式,Redis以守护进程方式运行,默认为no,改为yes意为以守护进程方式启动,可后台运行,除非kill进程,改为yes会使配置文件方式启动redis失败,如果后面redis启动失败,就将这个注释掉
daemonize no
#默认为no,redis持久化,可以改为yes
appendonly yes

在这里插入图片描述
在这里插入图片描述
写完后主要文件目录如下
在这里插入图片描述
如果使用tree命令提示:-bash: tree: command not found
安装一下即可

yum -y install tree

在这里插入图片描述

三、构建并启动

1、构建docker服务

//进入工作目录lory文件
cd /home/lory
//启动docker
systemctl start docker
//构建
docker-compose build

在这里插入图片描述
2、启动docker容器

docker-compose up -d
//如果后端jar启动失败多数是因为数据库初始化的时候太慢了,导致jar包没有连接成功,这个时候在执行一次docker-compose up -d即可

在这里插入图片描述
3、修改msyql可以远程连接

//查看容器
docker ps
//进入容器 mysql:容器名字NAME
docker exec -it mysql bash

在这里插入图片描述
连接数据库设置远程连接

//登陆数据库
mysql -u root -p
use mysql
//设置远程连接
update user set host = '%' where user = 'root';
//更改数据库密码这里password和user需要自己指定,host为%,很多网上的教程都是localhost,如果为localhost修改的是本地的密码,就是在进入到mysql容器里面登录时用的密码,而你在外部连接时的密码照样没修改。
UPDATE USER SET authentication_string=PASSWORD('123') WHERE USER='root' AND HOST='%';
//刷新权限
flush privileges;
//退出mysql
quit;
//退出容器
exit

如果报错:ERROR 1062 (23000): Duplicate entry ‘%-root’ for key ‘PRIMARY’ 说明已经设置了远程连接
在这里插入图片描述
最后就实现了使用docker一键部署前后端服务,后面更新jar包直接通过命令docker-compose build构建在通过docker-compose up -d 启动即可
页面部署成功界面:
在这里插入图片描述
docker扩展命令

//启动docker
systemctl start docker
//重启docker
systemctl restart  docker
//关闭docker
systemctl stop docker
//进入容器   my_mysql:容器名字
docker exec -it my_mysql bash                
//构建docker服务
docker-compose build            
//启动所有docker容器
docker-compose up -d 
//命令查看服务的日志,purchase-server:要查看的服务名  
docker-compose logs purchase-server 
//查看镜像
docker images     
//删除单个镜像
docker rmi 镜像id(IMAGE ID)       
//停止镜像
docker stop NAME  
//查看容器
docker ps
//删除容器
docker rm container_name/container_id

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

OpenGL的MVP矩阵理解

OpenGL的MVP矩阵理解 右手坐标系 右手坐标系与左手坐标系都是三维笛卡尔坐标系,他们唯一的不同在于z轴的方向,如下图,左边是左手坐标系,右边是右手坐标系 OpenGL中一般用的是右手坐标系 1.模型坐标系(Local Space&…

软件设计师:10-面向对象

一、面向对象 二、对象和消息 属性:也叫成员变量、状态 消息:对象名.方法名(传入你想要传递的参数) 三、方法重载 方法名相同(同名),但是参数个数或者参数类型不同叫方法重载 四、封装…

SpringBoot+Prometheus+Grafana实现应用监控和报警

一、背景 SpringBoot的应用监控方案比较多&#xff0c;SpringBootPrometheusGrafana是目前比较常用的方案之一。它们三者之间的关系大概如下图&#xff1a; 关系图 二、开发SpringBoot应用 首先&#xff0c;创建一个SpringBoot项目&#xff0c;pom文件如下&#xff1a; <…

分布式数据库技术的演进和发展方向

前言 这些年大家都在谈分布式数据库&#xff0c;各大企业也纷纷开始做数据库的分布式改造。那么&#xff0c;所谓的分布式数据库到底是什么&#xff1f;采用什么架构&#xff1f;优势在哪&#xff1f;为什么越来越多企业选择它&#xff1f;分布式数据库技术会向什么方向发展&a…

C/C++ 内存管理

1、C/C内存分布 首先我们来了解在一个程序中&#xff0c;代码主要存储在哪些地方&#xff1b; 1.栈&#xff1a;又叫堆栈&#xff0c;其中一般存储非静态局部变量、函数参数、返回值等&#xff0c;栈的增长是向下的。 2.内存映射段&#xff1a;是高效的 I/O 映射方式&#xff0…

华为2023年年度报告启示:技术工程师应该如何成长?

华为2023年年度报告显示了公司在面对复杂环境与挑战时的稳健发展&#xff0c;以及在技术创新、生态构建、社会责任等方面取得的显著成就。对于技术工程师而言&#xff0c;这份报告不仅是华为战略与成果的全景展示&#xff0c;更是蕴含了对未来技术趋势的洞见以及对工程师职业发…

前端性能优化:掌握解决方案

课程介绍 我们常说性能永远是第一需求&#xff0c;作为一个前端工程师&#xff0c;不管使用什么框架&#xff0c;不管从事什么类型的网站或应用开发&#xff0c;只要是项目被用户使用&#xff0c;性能优化就永远是你需要关注的问题。通常情况下&#xff0c;工程师们在深入了解…

云原生(七)、Kubernetes初学 + 裸机搭建k8s集群

Kubernetes简介 Kubernetes&#xff08;通常简称为K8s&#xff09;是一个开源的容器编排平台&#xff0c;最初由Google设计和开发&#xff0c;现在由Cloud Native Computing Foundation&#xff08;CNCF&#xff09;维护。它旨在简化容器化应用程序的部署、扩展和管理。 Kube…

Unity类银河恶魔城学习记录11-7 p109 Aplly item modifiers源代码

Alex教程每一P的教程原代码加上我自己的理解初步理解写的注释&#xff0c;可供学习Alex教程的人参考 此代码仅为较上一P有所改变的代码 【Unity教程】从0编程制作类银河恶魔城游戏_哔哩哔哩_bilibili ItemData_Equipment.cs using System.Collections; using System.Collecti…

如何检查电脑的最近历史记录?这里提供详细步骤

如果你怀疑有人在使用你的计算机,并且你想查看他们在做什么,下面是如何查看是否有访问内容的痕迹。 如何检查我的计算机的最近历史记录 要检查计算机的最近历史记录,应该从web浏览器历史记录开始,然后移动到文件。但是,可以修改或删除浏览器历史记录,也可以隐藏Windows…

牛角工具箱源码 轻松打造个性化在线工具箱,附带系统搭建教程

这是一款在线工具箱程序&#xff0c;您可以通过安装扩展增强她的功能 通过插件模板的功能&#xff0c;您也可以把她当做网页导航来使用~ &#x1f38a; 环境要求 PHP > 7.2.5 MySQL > 5.7 fileinfo扩展 使用Redis缓存需安装Redis扩展 去除禁用函数proc_open、putenv、s…

C语言:文件操作

前言&#xff1a;为什么使用文件? 如果没有文件&#xff0c;我们写的程序的数据是存储在电脑的内存中&#xff0c;如果程序退出&#xff0c;内存回收&#xff0c;数据就丢失了&#xff0c;等再次运行程序&#xff0c;是看不到上次程序的数据的&#xff0c;如果要将数据进行持久…

day22.二叉树part08

day22.二叉树part08 235.二叉搜索树的最近公共祖先 原题链接 代码随想录链接 思路&#xff1a;因为本题是二叉搜索树&#xff0c;利用它的特性可以从上往下进行递归遍历树&#xff0c;这里需要理解一点就是如果遍历到的一个节点发现该节点的值正好位于节点p和节点q的值中间…

基于 SymPy 的反函数求解

原文&#xff1a;https://blog.iyatt.com/?p14396 例一 f(x) 2x 3 这个函数很简单&#xff0c;可以看出它的反函数是&#xff08;令 yf(x) &#xff09;&#xff1a;$$x\frac{y-3}{2}$$ 使用 SymPy 求解可以采用这样的思路&#xff1a; 已知函数 f(x)2x3, 令 y f(x), 即构…

FMEA与智能机器人:提升机器人可靠性与安全性的关键

随着科技的飞速发展&#xff0c;智能机器人已经深入到我们生活的方方面面&#xff0c;从工业生产到家庭服务&#xff0c;从深海探险到太空探索&#xff0c;处处都有它们的身影。然而&#xff0c;随着应用的日益广泛&#xff0c;机器人系统的复杂性和不确定性也在增加&#xff0…

【JavaEE】Thread类中run和start的区别

文章目录 先说结论Run方法Start方法 先说结论 当你想要创建一个新的线程并执行某些任务时&#xff0c;你应该重写run方法以提供任务的具体实现&#xff0c;并通过调用start方法来启动新线程 run方法包含了线程应该执行的代码&#xff0c;但直接调用它并不会启动新的线程。 s…

pip永久修改镜像地址

修改命令&#xff1a; pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple/ 效果&#xff1a; 会在C:\Users\PC(用户名)\AppData\Roaming\pip目录下新增或修改文件pip.ini 文件内容&#xff1a; [global] index-url https://pypi.tuna.tsinghua.e…

OSCP靶场--Zipper

OSCP靶场–Zipper 考点(php zip:// rce[文件上传] CVE-2021-4034提权7z 通配符提权) 1.nmap扫描 ┌──(root㉿kali)-[~/Desktop] └─# nmap 192.168.249.229 -sV -sC -Pn --min-rate 2500 Starting Nmap 7.92 ( https://nmap.org ) at 2024-03-29 07:40 EDT …

电动汽车充放电V2G模型(Matlab代码)

目录 1 主要内容 1.1 模型背景 1.2 目标函数 1.3 约束条件 2 部分代码 3 效果图 4 下载链接 1 主要内容 本程序主要建立电动汽车充放电V2G模型&#xff0c;采用粒子群算法&#xff0c;在保证电动汽车用户出行需求的前提下&#xff0c;为了使工作区域电动汽车尽可能多的…

【CTFshow 电子取证】套的签到题

&#x1f36c; 博主介绍&#x1f468;‍&#x1f393; 博主介绍&#xff1a;大家好&#xff0c;我是 hacker-routing &#xff0c;很高兴认识大家~ ✨主攻领域&#xff1a;【渗透领域】【应急响应】 【Java、PHP】 【VulnHub靶场复现】【面试分析】 &#x1f389;点赞➕评论➕收…