当前位置: 首页 > news >正文

使用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

相关文章:

  • 基于Spring Boot的在线学习系统的设计与实现
  • 虚幻引擎资源加密方案解析
  • vue3+threejs新手从零开发卡牌游戏(十四):调整卡组位置,添加玩家生命值HP和法力值Mana信息
  • 在项目中缓存如何优化?SpringCache接口返回值的缓存【CachePut、CacheEvict、Cacheable】
  • 【Java八股面试系列】中间件-Redis
  • android 13 相册和拍照问题
  • css简单动画实现
  • 记录关于智能家居的路程的一个bug___Segmentation fault(段错误)
  • 基于springboot实现网页时装购物系统项目【项目源码+论文说明】
  • 深度学习pytorch——卷积神经网络(持续更新)
  • 安卓调试桥ADB
  • Godot 学习笔记(5):国际化多语言翻译,包含常用10种语言机翻!
  • Java自带的线程池及调用、ThreadPoolExecutor类(线程池的7大参数)、任务队列及底层原理
  • QT+Opencv+yolov5实现监测
  • 阿里云短信服务免费100条
  • 【编码】-360实习笔试编程题(二)-2016.03.29
  • Cumulo 的 ClojureScript 模块已经成型
  • electron原来这么简单----打包你的react、VUE桌面应用程序
  • JavaSE小实践1:Java爬取斗图网站的所有表情包
  • Promise面试题,控制异步流程
  • python 装饰器(一)
  • python学习笔记-类对象的信息
  • 搞机器学习要哪些技能
  • 聚类分析——Kmeans
  • 每天一个设计模式之命令模式
  • 使用 QuickBI 搭建酷炫可视化分析
  • 使用 Xcode 的 Target 区分开发和生产环境
  • 使用SAX解析XML
  • 推荐一个React的管理后台框架
  • 学习笔记DL002:AI、机器学习、表示学习、深度学习,第一次大衰退
  • ​LeetCode解法汇总307. 区域和检索 - 数组可修改
  • ​低代码平台的核心价值与优势
  • # 深度解析 Socket 与 WebSocket:原理、区别与应用
  • #FPGA(基础知识)
  • $ git push -u origin master 推送到远程库出错
  • (1)常见O(n^2)排序算法解析
  • (done) ROC曲线 和 AUC值 分别是什么?
  • (Git) gitignore基础使用
  • (补)B+树一些思想
  • (二)斐波那契Fabonacci函数
  • (非本人原创)史记·柴静列传(r4笔记第65天)
  • (附源码)springboot宠物医疗服务网站 毕业设计688413
  • (机器学习的矩阵)(向量、矩阵与多元线性回归)
  • (转)AS3正则:元子符,元序列,标志,数量表达符
  • (转)shell调试方法
  • .bat批处理(二):%0 %1——给批处理脚本传递参数
  • .equal()和==的区别 怎样判断字符串为空问题: Illegal invoke-super to void nio.file.AccessDeniedException
  • .NET Core 实现 Redis 批量查询指定格式的Key
  • .NET Core中Emit的使用
  • .NET 常见的偏门问题
  • .Net 代码性能 - (1)
  • .net(C#)中String.Format如何使用
  • .net2005怎么读string形的xml,不是xml文件。
  • .Net的DataSet直接与SQL2005交互
  • .NET开源的一个小而快并且功能强大的 Windows 动态桌面软件 - DreamScene2