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;

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

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

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

相关文章

【视频讲解】后端增删改查接口有什么用?

B站视频地址 B站视频地址 前言 “后端增删改查接口有什么用”&#xff0c;其实这句话可以拆解为下面3个问题。 接口是什么意思&#xff1f;后端接口是什么意思&#xff1f;后端接口中的增删改查接口有什么用&#xff1f; 1、接口 概念&#xff1a;接口的概念在不同的领域中…

R语言统计分析——自编函数

参考资料&#xff1a;R语言统计分析【第2版】 一个函数的结构大致如此&#xff1a; myfunction<-function(arg1,arg2,...){ statements return(object) } 函数中的对象只在函数内部使用。返回对象的数据类型是任意的。 假设我们要编写一个函数&#xff0c;用来计算数据对象…

2、postgresql运行架构

2 运行架构 以为编译安装为模板讲解各个文件功能作用&#xff0c;切换为postgres用户 目录位置数据库数据目录/pgdata/10/data安装包目录/opt/pg10/ 2.1 安装包目录详解 -bash-4.2$ pwd /opt/pg10 -bash-4.2$ tree -L 1 . . ├── bin #应用程序 ├── include #c/c…

Debian12 安装Docker 用 Docker Compose 部署WordPress

服务器准备&#xff1a; 以root账号登录&#xff0c;如果不是root&#xff0c;后面指令需要加sudo apt update apt install apt-transport-https ca-certificates curl gnupg lsb-release添加GPG密钥&#xff0c;推荐国内源 curl -fsSL https://mirrors.aliyun.com/docker…

c语言指针中“数组名的理解”以及“一维数组传参”的本质

数组名的理解 数组名就是数组首元素的地址。 例如&#xff1a;输入一个数组的所有元素&#xff0c;再打印出来。 另一种写法 以上可以看出&#xff1a;*arri&#xff09; arr[i] 也即是&#xff1a;*(iarr)i[arr] 本质上无区别 1&#xff1a;数组就是数组&#xff0c;是一块…

DirectX修复工具下载安装指南:电脑dll修复拿下!6种dll缺失修复方法!

在日常使用电脑的过程中&#xff0c;不少用户可能会遇到“DLL文件缺失”的错误提示&#xff0c;这类问题往往导致程序无法正常运行或系统出现不稳定现象。幸运的是&#xff0c;DirectX修复工具作为一款功能强大的系统维护软件&#xff0c;能够有效解决大多数DLL文件缺失问题&am…

8.Redis的List类型

Redis中的list跟java中的LinkedList比较相似&#xff0c;可以看做是一个双向链表的结构。 既可以支持正向检索和反向检索。 特点 1.有序 2.元素可以重复 3.插入和删除快 4.查询速度一般 应用场景 点赞和评论功能&#xff0c;都会存在一个顺序&#xff0c;谁先评论&…

从入门到自动化:一篇文章掌握Python的80%

Python作为一种高级编程语言&#xff0c;以其简洁明了的语法和强大的功能性&#xff0c;在全球编程社区内享有极高的声誉。本文将带领你从Python的基础语法入手&#xff0c;介绍其常用库的应用&#xff0c;以及如何将Python用于数据分析、网络爬虫和简单的自动化任务&#xff0…

写一个图片裁剪的js,JavaScript图片裁剪插件PlusCropper

在前端开发中&#xff0c;图片裁剪是一个常见的需求。本文将深入解析一个功能完善的JavaScript图片裁剪插件——PlusCropper&#xff0c;带你一步步了解其实现原理和使用方法。 一、插件概述 PlusCropper是一个轻量级的JavaScript插件&#xff0c;它允许用户在网页上交互式地…

报表系统之Cube.js

Cube.js 是一个开源的分析框架&#xff0c;专为构建数据应用和分析工具而设计。它的主要目的是简化和加速构建复杂的分析和数据可视化应用。以下是对 Cube.js 的详细介绍&#xff1a; 核心功能和特点 1. 多数据源支持 Cube.js 支持从多个数据源中提取数据&#xff0c;包括 SQ…

为什么我工作 10 年后转行当程序员?逆袭翻盘!

今天文章的主人公暂且称他为 A 君。不过 A 君有点特别&#xff0c;非科班&#xff0c;工作 10 年后才转行 iOS 程序员。今年 36 岁&#xff0c;目前在某行业头部企业任职前端负责人&#xff0c;管理 40 人的前端团队。 废话不多说&#xff0c;我们开始 A 君&#xff08;为了描…

二维码门楼牌管理应用平台建设:重塑社区管理新篇章

文章目录 前言一、平台背景与意义二、平台核心功能解析三、平台应用成效与展望 前言 随着智慧城市建设的不断深入&#xff0c;社区管理迎来了前所未有的变革。二维码门楼牌管理应用平台的诞生&#xff0c;正是这一变革中的璀璨明珠。该平台依托先进的地理信息系统&#xff08;…

10年仓库管理经验:“管、存、发、盘”一文搞定!

前段时间去一家仓储设备公司交流学习&#xff0c;和一位有着10年经验的老仓管聊了个痛快&#xff0c;从他那儿学到了不少仓库管理的实践方法。 回来自己整理了一套仓库管理高效的实用方法&#xff0c;现在就来跟大家伙儿聊聊仓库管理中那些常见问题&#xff0c;以及我是怎么琢…

AI技术和大模型对人才市场的影响

012024 AI技术和大模型 2024年AI技术和大模型呈现出多元化和深入融合的趋势&#xff0c;以下是一些关键的技术方向和特点&#xff1a; 1. 生成式AI 生成式AI&#xff08;Generative AI&#xff09;在2024年继续快速发展&#xff0c;它能够创造全新的内容&#xff0c;而不仅仅…

月薪竟然高达60k,AI大模型凭什么?

你是不是最近经常看到或听到“AI大模型”这个关键词&#xff1f;我也是&#xff01;所以好奇去Boss直聘上搜了下工作机会。看到结果时&#xff0c;我有点不淡定了&#xff01;薪资竟然这么高&#xff01; 这是我随便搜的结果&#xff0c;发出来给大家看看。 下面&#xff0c;我…

微信小程序之计算器

在日常生活中&#xff0c;计算器是人们广泛使用的工具&#xff0c;可以帮助我们快速且方便地计算金额、成本、利润等。下面将会讲解如何开发一个“计算器”微信小程序。 一、开发思路 1、界面和功能 “计算器”微信小程序的页面效果如图所示 在计算器中可以进行整数和小数的…

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

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

【C++】初识C++

目录 命名空间域的概念命名空间的概念示例1示例2 命名空间的嵌套定义命名空间的访问指定命名空间访问using访问命名空间对于嵌套命名空间的访问 输入&输出输入输出输入输出的特性换行 命名空间 在C/C中&#xff0c;变量、函数和类的定义很多&#xff0c;在某些方面我们难免…

一刷代码随想录(贪心5)

56. 合并区间 题意&#xff1a; 给出一个区间的集合&#xff0c;请合并所有重叠的区间。 示例 1: 输入: intervals [[1,3],[2,6],[8,10],[15,18]]输出: [[1,6],[8,10],[15,18]]解释: 区间 [1,3] 和 [2,6] 重叠, 将它们合并为 [1,6]. 示例 2: 输入: intervals [[1,4],[4…

windows子系统wsl完成本地化设置locale,LC_ALL

在 Windows 的子系统 Linux&#xff08;WSL&#xff09;环境中&#xff0c;解决本地化设置问题可以采取以下步骤&#xff1a; 1. **检查本地化设置**&#xff1a; 打开你的 WSL 终端&#xff08;比如 Ubuntu、Debian 等&#xff09;&#xff0c;运行以下命令来查看当前的本…