DockerCompose部署示例

news2025/1/17 1:10:06

目录

前言

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.25
    environment:
     MYSQL_ROOT_PASSWORD: 123456
    volumes:
     - "/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: standalone
    ports:
      - "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-service
  gateway:
    build: ./gateway
    ports:
        - "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;

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

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

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

相关文章

手把手构建Netty

1.Netty基础 Netty是一个提供了易于使用的API的客户端、服务器框架&#xff1b; 并发高-NIO(非阻塞IO) 传输快-零拷贝: 分析&#xff1a; 使用了NIO的零拷贝&#xff1b;java中内存是分为堆和栈&#xff0c;还有字符串常量池等等&#xff1b; 如果有一些数据需要从IO中读取&am…

28、美国国家冰雪中心(NSIDC)海冰密集度月数据处理:方法二

文章目录 1. 前言2. polarstereo-lonlat-convert-py 介绍2.1 安装方法3. 代码4. 其他1. 前言 在前文中已经详细介绍了如何使用Python对NSIDC的海冰密集度数据进行处理,将其从极地投影转换成常用的经纬度投影,但是方法较为麻烦,本文将基于另一个库,使用更加简便的方法对其进…

JVM—垃圾收集算法和HotSpot算法实现细节

1、分代回收策略 分代的垃圾回收策略&#xff0c;是基于这样一个事实&#xff1a;不同的对象的生命周期是不一样的。因此&#xff0c;不同生命周期的对象可以采取不同的收集方式&#xff0c;以便提高回收效率。 分代垃圾回收采用分治的思想&#xff0c;进行代的划分&#xff0…

π 随机数计算圆周率

如下图&#xff0c;圆与正方形面积比值等于圆内的点和总点数的比值 Disatance是点到原点的距离&#xff1a;SQRT(A2xA2B2xB2) 以下是在Excel中1.5万个点计算圆周率的结果。 InCircle公式&#xff1a;IF(C2<1,1,0) π计算公式&#xff1a;4*SUM(D2:D15000)/COUNT(D2:D15000)

leetcode 2181.合并零之间的结点

1.题目要求: /*** Definition for singly-linked list.* struct ListNode {* int val;* struct ListNode *next;* };*/struct ListNode* mergeNodes(struct ListNode* head){struct ListNode* cur head;int count 0;//1.遍历结点&#xff0c;求出结点数while(cur){co…

前后端demo-WarehouseManagement

前端 数据库 其他 1.git下来&#xff0c;解决依赖问题&#xff0c;前端报错因为字体文件丢失&#xff0c;下载字体放到fonts文件夹字体.zip官方版下载丨最新版下载丨绿色版下载丨APP下载-123云盘 2.后端login验证&#xff0c;前端需要账号格式&#xff0c;linqq.com 3.自己…

【React】实现消息列表的删除

工作小记&#xff0c;第一次接触react项目 1.增加删除对话项的函数 hooks\use-conversation.ts // 删除对话项的函数const deleteConversation (id: string) > {setConversationList(prevList > prevList.filter(item > item.id ! id))}return {deleteConversation,.…

OZON户外运动装备热卖产品

OZON平台上的户外运动装备热卖产品涵盖了多个类别&#xff0c;这些产品不仅满足了俄罗斯消费者对户外运动的需求&#xff0c;还体现了市场趋势和消费者偏好的变化。以下是一些主要的热卖户外运动装备产品&#xff1a; OZON户外运动装备热卖产品地址&#xff1a;D。DDqbt。COm/…

第十九天培训笔记

上午 1 、构建 vue 发行版本 [rootserver eleme_web]# nohup npm run serve& // 运行 vue 项目 [rootserver eleme_web]# mkdir /eleme [rootserver eleme_web]# cp -r /root/eleme_web/dist/* /eleme/ // 将项目整体 移动到 /eleme 目录下 [rootserver eleme_web]# …

区间贪心2

问题引入 上一节我们学习了贪心的基本概念、基本思路以及证明方法&#xff0c;下面我们一起来学习区间类贪心类问题&#xff0c;这里我们学习的重点依然是贪心的策略和证明。 算法原理区间贪心&#xff1a; 是指在区间上做贪心。区间贪心一般都是按左端点或者右端点排序&…

最短路问题中的朴素版Dijkstra算法

最短路问题的朴素版Dijkstra算法 题目 最短路问题需要用到下面的算法&#xff08;n代表点的数量&#xff0c;m代表边的数量&#xff09; 朴素版和堆优化版的Dijkstra算法的区别是&#xff0c;朴素版比较适合稠密图&#xff0c;堆优化版适合稀疏图&#xff0c;稠密图代表它的边…

模型优化—动量梯度下降

一、mini-batch 梯度下降&#xff08;gradient descent&#xff09;&#xff1a; SGD&#xff08;stochastic GD&#xff09;随机梯度下降&#xff1a;对一个样本做梯度下降 batch梯度下降&#xff1a;使用所有样本做梯度下降&#xff08;做一次又叫epoch&#xff09; mini…

人工智能算法工程师(高级)课程9-自然语言处理之词嵌入的介绍与代码详解

大家好,我是微学AI,今天给大家介绍一下人工智能算法工程师(高级)课程9-自然语言处理之词嵌入的介绍与代码详解。 词嵌入是一种将文本中的词语转换为数值向量的技术,广泛应用于自然语言处理领域。它通过将词语映射到多维向量空间,使得相似意义的词语在向量空间中距离较近,从…

【无标题配置jdk环境和tomcat环境

一&#xff0e;接着昨天的发布vue项目 npm run serve 构建项目 npm run build ls ls dist/ vim dist/index.html [rootweb eleme_web]# cd /usr/local/nginx/conf/ [rootweb conf]# ls 将静态的项目移动到nginx中 [rootweb nginx]# cd conf.d/ [rootweb conf.d]# ls…

用Python打造精彩动画与视频,3.3 添加音频和简单效果

3.3 添加音频和简单效果 在本节中&#xff0c;我们将学习如何使用 MoviePy 库为视频添加音频和一些简单的效果。这些操作可以让你的视频更具吸引力和个性化。 准备工作 首先&#xff0c;确保你已经安装了 MoviePy 和 pydub 库。你可以通过以下命令安装&#xff1a; pip ins…

Qt 实战(2)搭建开发环境 | 2.4、查看 Qt 源码

文章目录 一、查看 Qt 源码1、获取 Qt 源码2、添加源码路径3、配置定位器4、查看源码 前言&#xff1a; Qt 是一个跨平台的 C 图形用户界面应用程序开发框架&#xff0c;广泛应用于开发 GUI 程序以及非 GUI 程序&#xff0c;如控制台工具和服务器。查看 Qt 的源码不仅可以帮助你…

故障案例:网络访问慢

现象描述 FW作为中间设备的场景下&#xff0c;用户访问网页慢&#xff0c;报文延时大等。 相关告警与日志 相关告警 无 相关日志 ARP/4/ARP_DUPLICATE_IPADDR 原因分析 图1 网络访问慢故障定位思路 丢包 报文在网络链路上传输时&#xff0c;可能会有部分报文在链路中被丢…

用深度学习改进乳腺癌MRI诊断| 文献速递--AI辅助的放射影像疾病诊断

Title 题目 Improving breast cancer diagnostics with deep learning for MRI 用深度学习改进乳腺癌MRI诊断 01 文献速递介绍 乳腺磁共振成像&#xff08;MRI&#xff09;是一种检测乳腺癌的高度敏感的方式&#xff0c;报告的敏感性超过80%。传统上&#xff0c;其在筛查…

【算法】动态规划-斐波那契数列模型

目录 1、第N个泰波那契数 1.1 算法原理讲解 1.1.1 状态表示 1.1.2 状态转移方程 1.1.3 初始化 1.1.4 填表顺序 1.1.5 返回值 1.2 代码实现 1.3 空间优化 2、三步问题 2.1 算法原理讲解 2.1.1 状态表示 2.1.2 状态转移方程 2.1.3 初始化 2.1.4 填表顺序 2.1.5 返…

(四十一)大数据实战——spark的yarn模式生产环境部署

前言 Spark 是一个开源的分布式计算系统。它提供了高效的数据处理能力&#xff0c;支持复杂的数据分析和处理任务&#xff0c;是一种基于内存的快速、通用、可扩展的大数据分析计算引擎。Spark Core&#xff1a;实现了Spark的基本功能&#xff0c;包含任务调度、内存管理、错误…