使用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.mzph.cn/news/783615.shtml

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

相关文章

百度云加速方法「Cheat Engine」

加速网盘下载 相信经常玩游戏的小伙伴都知道「Cheat Engine」这款游戏内存修改器,它除了能对游戏进行内存扫描、调试、反汇编 之外,还能像变速齿轮那样进行本地加速。 这款专注游戏的修改器,被大神发现竟然还能加速百度网盘资源下载&#xf…

c++前言

目录 1. 什么是 C 2. C 发展史 3. C 的重要性 4. 如何学习 C 5. 关于本门课程 1. 什么是C C语言是结构化和模块化的语言,适合处理较小规模的程序。对于复杂的问题,规模较大的 程序,需要高度的抽象和建模时, C 语言则不合适…

【uC/OS-III篇】uC/OS-III 移植到 STM32 简明教程

uC/OS-III 移植到 STM32 简明教程 一、uC/OS-III 介绍 二、获取UCOS-III源码 三、建立项目工程 四、解决工程编译报错 五、修改项目文件 下一篇博客: 【uC/OS-III篇】uC/OS-III 创建第一个任务(For STM32) 移植后的工程自取方式&#xf…

玩转Django分页器

一、Pagination 分页器编程步骤 View, 导入django.core.paginator.Paginator类,创建Paginator 对象时,输入qs对象,以及每页显示条数。 接收 URL, 从请求参数中读取page数值 ,通过 paginator.page(page_num) 返回请求页的page_obj…

从 PG 技术峰会南京站汲取的那些干货

3月30日下午,“PostgreSQL 数据库技术峰会”南京站圆满举办。 这场峰会同步在线上直播,近 2000 人在线观看。 感谢各位大佬带来精彩演讲。 1. 可观测性 第一场正式演讲是白鳝前辈带来的《PostgreSQL 数据库的可观测性能力》。 数据库的可观测性的重要性不…

Mysql数据库:MHA高可用架构

目录 前言 一、MHA概述 1、什么是MHA 2、MHA的特点 3、MHA的组成 4、MHA的工作原理 5、故障切换备选主库的算法 二、部署MHA高可用架构 1、环境部署 2、部署主从同步 2.1 修改主配置文件并创建软链接 2.1.1 master 修改主配置文件并创建软连接 2.1.2 slave1 修改主…

算法学习——LeetCode力扣补充篇5 (52. N 皇后 II、649. Dota2 参议院、1221. 分割平衡字符串、5. 最长回文子串)

算法学习——LeetCode力扣补充篇5 52. N 皇后 II 52. N 皇后 II - 力扣(LeetCode) 描述 n 皇后问题 研究的是如何将 n 个皇后放置在 n n 的棋盘上,并且使皇后彼此之间不能相互攻击。 给你一个整数 n ,返回 n 皇后问题 不同的…

免费!微软推出全球第一个生成式AI认证

微软在官网宣布一项新的人工智能计划,包括与 LinkedIn联合推出免费的生成式AI课程和专业认证证书;微软与数据平台data.org、开源社区GitHub 等合作,发一起全球生成式AI挑战赛,为参赛的组织提供资金、技术、培训等帮助。 用户学习…

文生图大模型三部曲:DDPM、LDM、SD 详细讲解!

1、引言 跨模态大模型是指能够在不同感官模态(如视觉、语言、音频等)之间进行信息转换的大规模语言模型。当前图文跨模态大模型主要有: 文生图大模型:如 Stable Diffusion系列、DALL-E系列、Imagen等 图文匹配大模型:如CLIP、Chinese CLIP、…

力扣刷题Days28-第二题-11.盛水最多的容器(js)

目录 1,题目 2,代码 3,学习与总结 3.1思路回顾 1,如何遍历 2,算法流程 3.2剖析问题 1,题目 给定一个长度为 n 的整数数组 height 。有 n 条垂线,第 i 条线的两个端点是 (i, 0) 和 (i, h…

Keil界面乱了,某些图标消失

文章目录 如图 如图 我都不知道怎么搞的第一个 重启界面解决了

学习【零拷贝】这一篇就够了

目录 1. 什么是零拷贝2. 传统的IO执行流程3. 零拷贝相关知识3-1. 内核空间和用户空间3-2. 什么是用户态、内核态3-3. 什么是上下文切换3-4. 虚拟内存3-5. DMA技术 4. 零拷贝实现的几种方式4-1. mmapwrite实现的零拷贝4-2. sendfile实现的零拷贝4-3. sendfileDMA scatter/gather…

深度学习网络缝合模块学习

主干网络缝合模块------>缝模块对其通道数 1缝合模块只看通道数 2把模块复制到模型中 3在forward中查看通道数是多少 4在init中进行实例化,注意通道数是上一步forward的通道数 5在forward中加载init中的实例化 6模型实例化测试模块是否加入 模块和模块之前…

程序数据模型由OS还是硬件架构决定?

文章目录 前言硬件架构的作用OS的作用编译器的角色OS的数据模型参考 前言 在文章 1>>32的结果是1还是0 中提到了数据模型 L P 64 LP64 LP64 ,并提出这个数据模型主要是由 U n i x Unix Unix 以及类 U n i x Unix Unix 的操作系统使用居多,例如…

C++教学——从入门到精通 6.ASCII码与字符型

如何把小写字母转换成大写字母呢? 这个问题问的好,首先我们要新学一个类型——char 这个类型就是字符型 再来说说ASCII码 给大家举几个例子 空格————32 0————48 9————57 A————65 Z————90 a————97 z————122 我们…

若依框架学习使用

若依官网项目拉取下来介绍 | RuoYi 项目运行: 1.idea安装,可以运行前后端 编辑器idea、jdk环境安装、数据库mysql、navicat工具、redis(redis-server启动)安装 2.navicat数据库连接, 创建数据库ry-vue并导入数据脚本ry_2021xxxx.sql,qua…

二. CUDA编程入门-Stream与Event

目录 前言0. 简述1. 执行一下我们的第九个CUDA程序2. Stream是什么3. Streams实验(单流vs多流)4. 如何隐藏延迟(memory)5. 如何隐藏延迟(kernel)6. 如何隐藏延迟(kernelmemory)7. 代码分析总结参考 前言 自动驾驶之心推出的 《CUDA与TensorRT部署实战课程》,链接。记…

MD5 计算 (下一代加密辅助类, Win32, C++)

CCNGHelper.h #pragma once #include <string> #include <tchar.h> #include <windows.h> #include <bcrypt.h>#ifdef _UNICODE using _tstring std::wstring; #else using _tstring std::string; #endif// 下一代加密辅助类 // 客户端: Windows Vi…

7种2024年算法优化BP,实现回归,单/多变量输入,单/多步预测功能,机器学习预测全家桶再更新!...

截止到本期MATLAB机器学习预测全家桶&#xff0c;一共发了19篇关于机器学习预测代码的文章。算上这一篇&#xff0c;一共20篇&#xff01;参考文章如下&#xff1a; 1.五花八门的机器学习预测&#xff1f;一篇搞定不行吗&#xff1f; 2.机器学习预测全家桶&#xff0c;多步预测…

wails 创建Go 项目

##wails是一个可以让go和web技术编写桌面应用#安装wails go install github.com/wailsapp/wails/v2/cmd/wailslatest#检查环境 wails doctor 创建项目wails init -n AuxiliaryTools -t vue-ts拉取go.mod的依赖项 go mod tidy进入 frontend 前端安装依赖项npm install /pnpm ins…