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

DockerCompose部署示例

目录

前言

1. 初识DockerCompose

2. 安装DockerCompose

3. 部署微服务项目

1)找一个目录,创建一个新的cloud-demo文件夹。

2)在cloud-demo文件夹创建一个docker-compose.yml文件,然后编写下面内容:

3)在cloud-demo下创建以mysql、user-service、gate-way、order-service命名的文件夹,用于存放部署时要用到的东西:

4) 因为要给mysql挂载一个配置文件和一个本地数据,所以在mysql文件夹里创建conf和data目录:

5)在mysql的conf文件夹里,创建hmy.cnf文件 

 6)将本地的mysql的data数据复制到cloud-demo/mysql/data下面:

7)将之前没编写完的docker-compose文件,把mysql的数据卷的挂载信息写上:

8) 在gateway目录下新建Dockerfile文件,内容如下:

9)使用maven打包工具,将项目中的每个微服务都打包为app.jar,我的就是gateway、order-service和user-service:

10)将docker-compose.yml文件补全:

11)将整个cloud-demo上传到虚拟机的任意目录下面,我这里的是上传到/tmp目录下面:

4. 如果mysql密码不一致如何解决


前言

Docker Compose可以基于Compose文件帮我们快速的部署分布式应用,而无需手动一个个创建和运行容器。

1. 初识DockerCompose

Compose文件是一个YAML文本文件,通过指令定义集群中的每个容器如何运行。示例如下:

version: "3.8"services:mysql:image: mysql:5.7.25environment:MYSQL_ROOT_PASSWORD: 123456volumes:- "/tmp/mysql/data:/var/lib/mysql"- "/tmp/mysql/conf/hmy.cnf:/etc/mysql/conf.d/hmy.cnf"web:build: .ports:- "8090:8090"

上面的Compose文件就描述一个项目,其中包含两个容器:

  • mysql:一个基于mysql:5.7.25镜像构建的容器,并且挂在了两个目录
  • web:一个基于docker build临时构建的镜像容器,映射端口是8090 

DockerCompose的详细语法参考官网:https://docs.docker.com/compose/compose-file/。

其实DockerCompose文件可以看作是将多个docker run命令写到一个文件,只是语法稍有差异。

2. 安装DockerCompose

我的CentOS7安装Docker里面有详细操作。

3. 部署微服务项目

需求:将自己的cloud-demo微服务项目利用DockerCompose部署

步骤:

1)找一个目录,创建一个新的cloud-demo文件夹。

2)在cloud-demo文件夹创建一个docker-compose.yml文件,然后编写下面内容:

我这里用到的微服务只有user-service、order-service和gateway。因为feign-api是自己独立出来的一个模块,没有对外暴露的接口,供自己项目依赖引用的,后续打包userservice或orderservice的时候,会作为依赖打包进去,所以不需要在docker-compose文件中写出来,这里已经用到了nacos,所以eureka-service也不用了。

3)在cloud-demo下创建以mysql、user-service、gate-way、order-service命名的文件夹,用于存放部署时要用到的东西:

4) 因为要给mysql挂载一个配置文件和一个本地数据,所以在mysql文件夹里创建conf和data目录:

5)在mysql的conf文件夹里,创建hmy.cnf文件 

内容如下:

[mysqld]
skip-name-resolve
character_set_server=utf8
datadir=/var/lib/mysql
server-id=1000
  • skip-name-resolve:这个配置项告诉 MySQL 服务器在用户登录时不要进行域名解析,可以提高连接速度。
  • character_set_server=utf8:表示服务器端使用的字符集为 utf8,这是为了确保数据的正确存储和检索
  • datadir=/var/lib/mysql:这个配置项指定了 MySQL 数据库文件的存储路径,即数据库的数据文件将存储在 /var/lib/mysql 目录下
  • server-id=1000:这个配置项指定了 MySQL 服务器的唯一标识号,用于在主从复制等场景中识别不同的服务器

 6)将本地的mysql的data数据复制到cloud-demo/mysql/data下面:

这里面包括了我这次要部署的项目需要用到的cloud-order和cloud-user库,也包括了安装本地数据库时设置的root的用户信息,以及全部权限信息,所以找到本地数据库的数据存储目录,最好一起拷贝过来,另外,docker-compose文件里面写的mysql的root密码一定要跟本地的root密码一致,不然docker部署之后,会出现很多意想不到的问题(问就是我踩过这个坑)。

7)将之前没编写完的docker-compose文件,把mysql的数据卷的挂载信息写上:

后续我们启动docker-compose的时候,是在docker-compose.yml文件的目录下启动的,后续不管把这里的cloud-demo上传到虚拟机的哪个目录,都能通过$PWD这个命令找到当前目录,保证我们写的配置文件以及本地环境的数据环境能够在mysql镜像中能使用。

8) 在gateway目录下新建Dockerfile文件,内容如下:

FROM java:8-alpine
COPY ./app.jar /tmp/app.jar
ENTRYPOINT java -jar /tmp/app.jar

这就是一个自定义的镜像文件。然后把这个文件在user-service和order-service文件夹中各拷贝一份。

9)使用maven打包工具,将项目中的每个微服务都打包为app.jar,我的就是gateway、order-service和user-service:

在上面上个微服务的pom文件中加上下面的内容就可以,这里的filename指的就是将微服务打包成app.jar。

<build><finalName>app</finalName><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins>
</build>

打包好之后将这里的app.jar包复制到各自对应的文件夹下面。

10)将docker-compose.yml文件补全:

docker-compose.yml文件到这里就全部写完了,全部内容如下:

version: "3.2" # docker-compose 文件格式版本
services:nacos:image: nacos/nacos-server # 指定的使用镜像,如果本地或虚拟机里没有会自动从远程仓库拉取,我这里没有指定nacos-server的版本号,所以会去拉取最新版本environment:MODE: standaloneports:- "8848:8848"mysql:image: mysql:5.7.25 # 指定使用的mysql镜像,我这里指定了版本,是因为跟我本地保持一致,后续数据卷映射的时候,需要使用到本地的mysql数据文件environment:MYSQL_ROOT_PASSWORD: 123456 # 设置镜像mysql的root密码,跟本地保持一致,后续用到本地数据的时候,不会报错volumes:- "$PWD/mysql/data:/var/lib/mysql" # 数据卷映射,把本地的mysql/data目录挂载到镜像的/var/lib/mysql目录下,这样,我们本地的数据文件,在镜像里也是存在的,其中$PWD表示当前目录- "$PWD/mysql/conf:/etc/mysql/conf.d/" # 同上,把本地的mysql/conf目录挂载到镜像的/etc/mysql/conf.d/目录下,这样,我们本地的配置文件,在镜像里也是存在的userservice:build: ./user-service # 指定构建镜像的目录,会自动去该目录下寻找Dockerfile文件,然后构建镜像,这里的./user-service表示去当前目录下的user-service目录找Dockerfile文件orderservice:build: ./order-servicegateway:build: ./gatewayports:- "10010:10010"

11)将整个cloud-demo上传到虚拟机的任意目录下面,我这里的是上传到/tmp目录下面:

 然后进入docker-compose.yml文件目录下(/tmp/cloud-demo),运行命令:

docker-compose up -d

t通过命令docker ps可以看到启动的服务有哪些:

服务都启动之后,访问cloud-demo的对外接口,http://虚拟机IP:10010/user/1?authorization=admin,可以得到结果:

 访问cloud-demo的对外接口,http://虚拟机IP:10010/order/101?authorization=admin,可以得到结果:

另外,在服务部署的时候要善于使用docker-compose --help命令,这里介绍了很多,包括查看服务启动的日志等。 

如果在部署过程中出现微服务注册到nacos里报错的话,在确保nacos服务启动成功之后,重启其他微服务就可以了。

4. 如果mysql密码不一致如何解决

如果mysql配置的密码和你的项目不一致,先用下面命令进入mysql容器:

docker exec -it 你的mysql容器名字

再通过下面命令进入mysql:

mysql -u root -p

 然后修改你的登录MySQL的登录密码,下面的host='%',代表的是不止本地登录,你可以先查查你的mysql的user表看看root的host是不是%还是localhost:

update mysql.user set authentication_string=password('你的新密码') where user ='root and host = '%';flush privileges;

 然后更新授予用户权限,这里的root@%指的就是user的host为%(任意地方登录):

grant all privileges on *.* to root@'%' identified by 'root' with grant option;flush privileges;

这样不管你是虚拟机登录还是外部浏览器访问微服务接口,就都能调用数据库了。 

相关文章:

DockerCompose部署示例

目录 前言 1. 初识DockerCompose 2. 安装DockerCompose 3. 部署微服务项目 1&#xff09;找一个目录&#xff0c;创建一个新的cloud-demo文件夹。 2&#xff09;在cloud-demo文件夹创建一个docker-compose.yml文件&#xff0c;然后编写下面内容&#xff1a; 3&#xff09…...

【云原生】Helm来管理Kubernetes集群的详细使用方法与综合应用实战

✨✨ 欢迎大家来到景天科技苑✨✨ &#x1f388;&#x1f388; 养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; &#x1f3c6; 作者简介&#xff1a;景天科技苑 &#x1f3c6;《头衔》&#xff1a;大厂架构师&#xff0c;华为云开发者社区专家博主&#xff0c;…...

电源插头应该统一方向

大家在使用插排的时候就会发现&#xff0c;有的横向&#xff0c;有的竖向。 国家强制规定&#xff0c;统一方向&#xff0c;插排能方便使用。...

大学新生编程入门最佳攻略

引言 编程的重要性&#xff1a;简述编程在当今社会的地位&#xff0c;为何它是大学生的必备技能。目标设定&#xff1a;明确文章旨在帮助新生从零基础开始&#xff0c;逐步成长为编程高手。 方向一&#xff1a;编程语言选择 1. 编程语言概览 介绍几种流行语言&#xff1a;如…...

MySQL 的binlog 、undolog 、redolog

Binlog (二进制日志) bin Log 作用 用于记录所有修改数据库数据的 SQL 语句或行级别的变化&#xff0c;主要用于主从复制和数据恢复。 binlog格式 STATEMENT模式&#xff1a;binlog里面记录的就是SQL语句的原文。优点是并不需要记录每一行的数据变化&#xff0c;减少了binlo…...

【计算机网络】三次握手、四次挥手

问&#xff1a;三次握手 四次挥手 TCP 连接过程是 3 次握手&#xff0c;终止过程是 4 次挥手 3次握手 第一步&#xff1a;客户端向服务器发送一个带有 SYN&#xff08;同步&#xff09;标志的包&#xff0c;指示客户端要建立连接。 第二步&#xff1a;服务器收到客户端的请求…...

Spring Boot中的全局异常处理:@RestControllerAdvice的应用

在现代Web开发中&#xff0c;异常处理是一个不可或缺的部分。良好的异常处理不仅能提高系统的健壮性&#xff0c;还能提升用户体验。在Spring Boot中&#xff0c;全局异常处理的实现可以通过使用RestControllerAdvice注解来完成。本文将详细介绍如何使用RestControllerAdvice和…...

指令数据的构建

文章目录 基于现有的 NLP 任务数据集构建基于日常对话数据构建基于合成数据构建指令微调(Instruction Tuning)是指使用自然语言形式的数据对预训练后的大语言模型进行参数微调,这一术语由谷歌研究员在 2022 年的一篇 ICLR 论文中正式提出。在另外一些参考文献中,指令微调也…...

论文解读(14)-GeoCLIP

加油&#xff0c;加油&#xff01; 原文&#xff1a; GeoCLIP: Clip-Inspired Alignment between Locations and Images for Effective Worldwide Geo-localization &#xff08;2309.16020 (arxiv.org)&#xff09; 这一篇的重点在于范围放宽到全球了 摘要 首先指出了目前…...

MySQL基础练习题16-电影评分

题目 准备数据 分析数据 总结 题目 查找评论电影数量最多的用户名。如果出现平局&#xff0c;返回字典序较小的用户名。 查找在 February 2020 平均评分最高 的电影名称。如果出现平局&#xff0c;返回字典序较小的电影名称。 准备数据 ## 创建库 create database db; u…...

CRMEB-众邦科技 使用笔记

1.启动项目报错 Unable to load authentication plugin ‘caching_sha2_password’. 参考&#xff1a;http://t.csdnimg.cn/5EqaE 解决办法&#xff1a;升级mysql驱动 <dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</ar…...

npm与webpack的学习笔记

npm 定义&#xff1a;npm是Node.js标准的软件包管理器。它起初是作为下载和管理Node.js包依赖的方式&#xff0c;但其现在也已成为前端JavaScript中使用的工具。 包 包&#xff1a;将模块、代码、其他资料聚合成一个文件夹 包的分类&#xff1a; 项目包&#xff1a;主要用…...

Vue 生命周期选项:2.x 与 3.x 的全面解析及案例分享二

目录 Vue3.X生命周期 介绍 流程图 案例 ​​​​​​​this.$nextTick Vue 生命周期选项:2.x 与 3.x 的全面解析及案例分享一-CSDN博客 Vue3.X生命周期 介绍 beforeCreate:在实例初始化之后,数据观测 (data observer) 和 event/watcher 事件配置之前被调用。此时无法访…...

Linux centos7 安装sftp

这里写自定义目录标题 指定 SSH 默认端口 (通常是22)添加自定义端口确保 SFTP 子系统配置存在匹配自定义端口的配置 在 CentOS 7 上安装 SFTP 并使用自定义端口 22345 启动&#xff0c;同时不影响现有的 SSH 登录&#xff0c;可以按照以下步骤进行配置&#xff1a; 步骤 1: 安…...

Java未来还是霸主吗?Java 在当今企业中的未来到底是什么?

Java 及其生态系统对于许多现代企业的成功至关重要。它是一种多功能语言&#xff0c;对许多用例提供强大支持&#xff0c;并具有强大的新功能来应对棘手的情况。但您可能会问自己&#xff1a;Java 的未来是什么&#xff1f; 尽管自 1999 年以来 Java 一直是软件开发领域的关键角…...

【C++】类和对象——Lesson2

Hi~&#xff01;这里是奋斗的小羊&#xff0c;很荣幸您能阅读我的文章&#xff0c;诚请评论指点&#xff0c;欢迎欢迎 ~~ &#x1f4a5;&#x1f4a5;个人主页&#xff1a;奋斗的小羊 &#x1f4a5;&#x1f4a5;所属专栏&#xff1a;C &#x1f680;本系列文章为个人学习笔记…...

常用传感器讲解十五--触摸传感器(KY-036)

常用传感器讲解十五–触摸传感器&#xff08;KY-036&#xff09; 具体讲解 这个比较简单&#xff0c;就是触摸后给个信号 电路连接 在Arduino上将VCC引脚连接到5V。 将GND连接到Arduino的GND。 将OUT连接到Arduino上的D2 代码实现 void setup() {pinMode(2, INPUT);Seri…...

web后端--Spring事务管理

事务也要日志配置 !!!!debug前面记得加空格 logging:level:org.springframework.jdbc.support.JdbcTransactionManager: debugrollbackFor 默认情况下&#xff0c;只有出现RunTimeException才会回滚事务&#xff0c;rollbackfor属性用于控制出现何种异常类型&#xff0c;回滚…...

【Docker系列】Docker 中-d 和-it 的区别

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…...

PHP回收废品平台系统小程序源码

&#x1f30d;绿色行动&#xff0c;从“回收废品平台系统”开始&#xff01;&#x1f69a; &#x1f6aa;【家门口的环保站&#xff0c;废品不再无处安放】 你是否曾为家里的旧报纸、空瓶子、废旧电器等废品头疼不已&#xff0c;不知该如何处理&#xff1f;现在&#xff0c;“…...

IIS解析漏洞~ IIS7.漏洞分析

IIS解析漏洞 文件解析漏洞是由于中间件错误的将特殊格式的文件解析成可执行网页文件(脚本)&#xff0c;配合文件上传漏洞进行GetShell的漏洞&#xff01; 1.2&#xff1a;IIS7.X 在IIS7.0和IIS7.5版本下也存在解析漏洞&#xff0c;在默认Fast-CGI开启状况下&#xff0c;在一个文…...

基于python+django的病人人信息管理系统及安全策略分析设计与实现

博主介绍&#xff1a; 大家好&#xff0c;本人精通Java、Python、C#、C、C编程语言&#xff0c;同时也熟练掌握微信小程序、Php和Android等技术&#xff0c;能够为大家提供全方位的技术支持和交流。 我有丰富的成品Java、Python、C#毕设项目经验&#xff0c;能够为学生提供各类…...

前端必知必会-html表单的input属性

文章目录 HTML 输入属性value 属性readonly 属性disabled 属性size 属性maxlength 属性min 和 max 属性multiple 属性pattern 属性placeholder 属性required 属性step 属性autofocus 属性height 和 width 属性list 属性autocomplete 属性总结 HTML 输入属性 本章介绍 HTML <…...

设计模式:详细拆解策略模式

策略模式 既然是详解&#xff0c;就不以案例开头了&#xff0c;直奔主题&#xff0c;先来看看什么是策略模式。 模式定义 定义一系列的算法&#xff0c;把它们一个个封装起来&#xff0c;并且使它们可相互替换。本模式 使得算法可独立于使用它的客户而变化。 结构 Strategy&a…...

Python正则表达式面试题分析总结

Python正则表达式面试题主要围绕Python内置的re模块展开&#xff0c;考察的是应聘者对于正则表达式的理解、使用以及在实际问题中的应用能力。以下是对这些面试题的详细分析总结&#xff1a; 正则表达式基础&#xff1a; re模块简介&#xff1a;Python中的re模块提供了正则表达…...

LeetCode题练习与总结:超过经理收入的员工--181

一、题目描述 SQL Schema > Pandas Schema > 表&#xff1a;Employee ---------------------- | Column Name | Type | ---------------------- | id | int | | name | varchar | | salary | int | | managerId | int | ----…...

LInux:循环语句

LInux&#xff1a;循环语句 if-else语句 if 语句语法格式 if [ $a -gt $b ]; then echo "a>b" fiif [ $a -gt $b ]; then echo "a>b"echo "a!b"echo "true" fiif-else语句 if-else 语句语法格式 if [ $a -gt $b ]; then echo &q…...

NumPy和Pandas中的布尔索引

布尔索引&#xff08;Boolean Indexing&#xff09;是数据分析中一种强大且常用的技术&#xff0c;用于通过布尔值数组&#xff08;即包含 True 和 False 的数组&#xff09;来选择数据子集。布尔索引可以用于 NumPy 数组、Pandas 数据框等数据结构。 布尔索引是一种非常有用的…...

.NET 一款反序列化打入冰蝎内存马的工具

01阅读须知 此文所提供的信息只为网络安全人员对自己所负责的网站、服务器等&#xff08;包括但不限于&#xff09;进行检测或维护参考&#xff0c;未经授权请勿利用文章中的技术资料对任何计算机系统进行入侵操作。利用此文所提供的信息而造成的直接或间接后果和损失&#xf…...

FPGA实现SDI视频接收转USB3.0传输,GS2971+FT601方案,提供4套工程源码和QT上位机源码

目录 1、前言工程概述免责声明 2、相关方案推荐本博已有的 SDI 编解码方案本博已有的FPGA驱动USB通信方案FPGA基于GS2971的SDI视频解码方案FPGA基于FT601的USB3.0视频传输方案 3、详细设计方案设计原理框图SDI 相机GS2971-SDI解码芯片解读BT1120转RGB888图像缓存FT601-USB3.0芯…...

天津做网站推广的公司/免费单页网站在线制作

前言&#xff1a; iview的左侧菜单&#xff0c;使用后发现有刷新选中效果就不对了&#xff0c;在这里是把他的name值设置跟路径一样来完美的解决这个问题的。 效果图&#xff1a; 下来是组件代码&#xff1a;LeftMenu.vue <template><Sider ref"leftMenu"…...

webmin 添加网站/网站查找工具

最近在弄zabbix监控MySQL和Redis事宜&#xff0c;发现shell脚本无法解决字符串转换为整数操作&#xff0c;于是想到了Python&#xff0c;这里就用Python3环境 首先安装pymysql pip install pymysql 1 #!/usr/bin/env python2 # -*- coding: utf8 -*-3 import pymysql4 mysql_co…...

商丘企业网站建设费用多少钱/国内seo公司

一、MyBatis入门简要介绍&#xff08;百科&#xff09; MyBatis 是支持普通 SQL查询&#xff0c;存储过程和高级映射的优秀持久层框架。MyBatis 消除了几乎所有的JDBC代码和参数的手工设置以及结果集的检索。MyBatis 使用简单的 XML或注解用于配置和原始映射&#xff0c;将接口…...

找个人做网站开不出发票怎么办/排名第一的手机清理软件

在类中的位置不同 成员变量&#xff1a;在类中方法外局部变量&#xff1a;在方法定义中或者方法声明上在内存中的位置不同 成员变量&#xff1a;在堆内存&#xff08;成员变量属于对象&#xff0c;对象进堆内存&#xff09;局部变量&#xff1a;在栈内存&#xff08;局部变量属…...

网站建设开源代码/东莞seo推广机构帖子

安装nfs NFS是Network File System的缩写&#xff0c;即网络文件系统。客户端通过挂载的方式将NFS服务器端共享的数据目录挂载到本地目录下。 由于NFS支持的功能很多&#xff0c;不同功能会使用不同程序来启动&#xff0c;因此&#xff0c;NFS对应的功能所对应的端口无法固定。…...

编写软件/seo交互论坛

马尔可夫不等式切比雪夫不等式弱大数定理强大数定理马尔可夫不等式 证明&#xff1a;对于&#xff0c;令 由于&#xff0c;所以恒有 两边同求期望&#xff0c; ,即为 作为推论&#xff0c;有切比雪夫定理&#xff1a; 证明&#xff1a;略 注&#xff1a;马尔可夫不等式和切比雪…...