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

使用docker、docker-compose部署微服务

使用docker、docker-compose部署微服务

  • 一、使用docker部署
    • 1、准备
    • 2、上传jar包
    • 3、编写dockerfile文件
    • 3、构建镜像和容器
  • 二、使用docker-compose部署
    • 1、准备服务的jar包和dockerfile文件
    • 2、编写docker-compose.yml文件
    • 3、docker-compose常用命令
      • (1)、前台创建镜像并启动容器
      • (2)、后台创建镜像并启动容器
      • (3)、查看启动的容器
    • 4、停止服务(含删除)
    • 5、启动服务容器
    • 6、关闭服务容器
    • 7、重启服务容器

一、使用docker部署

1、准备

这里已经在docker安装并启动好了Redis、nacos,配置好了“ruoyi-gateway-prod.yml”文件。

注意如果配置文件中有Redis、MySQL、nacos这些的连接信息,需要把IP地址改为服务器的公网地址或者内网地址,不会连接不到。
在这里插入图片描述

2、上传jar包

我这里以微服务版若依的网关服务为例,上传到指定目录。

在这里插入图片描述

3、编写dockerfile文件

官方文档:

https://docs.docker.com/engine/reference/builder/

英文的看起来有些吃力,若依这里有中文的教程

在这里插入图片描述

这是若依的文档地址:

http://doc.ruoyi.vip/ruoyi-cloud/cloud/dokcer.html#dockerfile

先获取构建镜像所需要的基础镜像,也就是jdk镜像,先看看有哪些jdk镜像

docker search openjdk

在这里插入图片描述
这里获取的是jdk8的镜像

docker pull openjdk:8-jre

在这里插入图片描述
我之前获取过,第一次获取可能慢一点。

再创建一个名为dockerfile的文件,文件名可以自定义,一般都为dockerfile,内容如下:
在这里插入代码片

# 基础镜像
FROM  openjdk:8-jre
# author
LABEL author="gan"# 创建目录
RUN mkdir -p /home/jar
# 指定路径,后面运行的jar包就是在这个目录
WORKDIR /home/jar
# 挂载目录
VOLUME /home/jar# 复制jar文件到路径,第一个是宿主机文件目录(dockerfile所在目录,不能是绝对路径),第二个是容器文件目录
COPY ./ruoyi-gateway.jar /home/jar/ruoyi-gateway.jar# 启动网关服务jar包
ENTRYPOINT ["java","-jar","-Xms256M","-Xmx256M","ruoyi-gateway.jar"]

上传到和jar包同一目录

在这里插入图片描述

假如要复制多个文件到容器,可以这样

在这里插入图片描述

3、构建镜像和容器

在当前目录下构建镜像,注意后面的“.”不是多余的,命令如下:

docker build -f /www/wwwroot/changjing/jar/gateway/dockerfile -t ruoyi-gateway .

解释:

-f:后面接的是 dockerfile 文件的路径
-t:为构建的镜像打上标签,就是构建的镜像名称

注意:

执行构建镜像的命令要在dockerfile文件所在目录,因为dockerfile文件的“COPY” 命令只能在相对于dockerfile文件的相对目录,使用宿主机的绝对目录构建会报错。

执行结果如下:

在这里插入图片描述

构建成功,因为我前面已经构建成功过了,可能会和第一次构建不太一样。

接下来启动镜像,命令如下:

docker run -d --name ruoyi-gateway -p 8010:8010 ruoyi-gateway

解释:

–name:后面接的是容器名称,我这里和镜像名称一样
-p:后面接的是宿主机和容器的端口映射,“:”前为服务器端口,“:”后为seata容器端口
最后面的是镜像名称

可以看到容器已经跑起来了。

在这里插入图片描述

二、使用docker-compose部署

使用docker-compose部署服务是使用docker部署基础上,增加docker-compose.yml文件统一管理服务容器,实现一个命令启动或关闭所有服务容器,所以要使用docker-compose部署,还是得先学会使用docker部署,是一种前期麻烦后期舒服的部署方式。

若依也有相关的教程:

http://doc.ruoyi.vip/ruoyi-cloud/cloud/dokcer.html#docker-compose

1、准备服务的jar包和dockerfile文件

在保留前面若依的gateway的jar包和dockerfile文件基础上,增加auth的jar包和dockerfile文件,auth的dockerfile跟gateway大同小异,具体如下:

# 基础镜像
FROM  openjdk:8-jre
# author
LABEL author="gan"# 创建目录
RUN mkdir -p /home/jar
# 指定路径
WORKDIR /home/jar
# 挂载目录
VOLUME /home/jar# 复制jar文件到路径,第一个是宿主机文件目录(dockerfile所在目录,不能是绝对路径),第二个是容器文件目录
COPY ./ruoyi-auth.jar /home/jar/ruoyi-auth.jar
# 启动系统服务
ENTRYPOINT ["java","-jar","-Xms256M","-Xmx256M","ruoyi-auth.jar"]

在这里插入图片描述

上传到指定的文件夹

在这里插入图片描述

在这里插入图片描述

2、编写docker-compose.yml文件

官网上docker-compose.yml文件对应的docker版本
在这里插入图片描述

这是我的docker版本:

在这里插入图片描述

所以我的docker-compose.yml的文件版本是3.8。

文件中只有gateway和auth相关的内容,具体如下:

# 描述 Compose 文件的版本信息
version : '3.8'# 定义服务,可以多个,每个服务中定义了创建容器时所需的镜像、参数、依赖等
services:ruoyi-gateway:  # 服务名称,跟构建镜像名称有关,假如image值为空,那么生成的镜像名称为“docker-compose.yml文件所在目录名称_ruoyi-gateway”,我放在jar目录,生成的镜像名称就是jar_ruoyi-gatewayimage: ruoyi-gateway  # 构建镜像名称container_name: ruoyi-gateway   # 容器名称build:context: ./gateway    # 构建镜像的jar包和dockerfile文件所在的目录(相对于docker-compose.yml文件,我这里gateway目录是跟docker-compose.yml文件同一目录)dockerfile: dockerfile  # 构建网关镜像的文件名称ports:- "8010:8010"   # 构建容器端口号,“:”前为宿主机端口,“:”后为容器端口ruoyi-auth:image: ruoyi-authcontainer_name: ruoyi-authbuild:context: ./authdockerfile: dockerfileports:- "9200:9200"

文件写好后上传到指定目录

在这里插入图片描述

3、docker-compose常用命令

(1)、前台创建镜像并启动容器

类似使用 java -jar 命令启动jar包,注意要在docker-compose.yml文件所在目录执行,命令如下:

docker-compose up

在这里插入图片描述
窗口一旦关闭服务就停止了,初次启动服务的时候可以使用,最左边是服务名称,如果每个服务都没有看到日志报错就代表启动成功了。

在这里插入图片描述
Ctrl+C退出,但即使关闭了,创建的镜像和容器还存在

在这里插入图片描述

(2)、后台创建镜像并启动容器

也要在docker-compose.yml文件所在目录执行,命令如下:

docker-compose up -d

在这里插入图片描述

也可以指定docker-compose.yml文件的路径,命令如下:

docker-compose -f /www/wwwroot/changjing/jar/docker-compose.yml up -d

在这里插入图片描述

执行不会打印每个服务启动的日志,需要查看日志可以使用如下命令进行查看

docker-compose logs

在这里插入图片描述
如果只想看ruoyi-auth服务的日志,可以使用如下命令

docker-compose logs ruoyi-auth

在这里插入图片描述

(3)、查看启动的容器

可以查看docker-compose.yml文件启动的所有容器,命令如下:

docker-compose ps

在这里插入图片描述

也可以指定服务名称,比如执行看ruoyi-auth有没有启动,命令如下:

docker-compose ps ruoyi-auth

在这里插入图片描述

注意只能在docker-compose.yml文件所在目录执行,在其他目录执行会报错

在这里插入图片描述

4、停止服务(含删除)

停止并删除所有服务的容器,不删除镜像,命令如下:

docker-compose down

可以看到镜像还在,但对应的容器被删除了。

在这里插入图片描述
查看服务容器所对应的镜像,命令如下:

docker-compose images

在这里插入图片描述

停止并删除工程中所有服务的容器、网络、镜像,命令如下:

docker-compose down --rmi all

在这里插入图片描述
如果重新上传了jar包就可以使用这个方式停止。

5、启动服务容器

启动工程中所有服务的容器,命令如下:

docker-compose start

在这里插入图片描述
也可以在上面命令的基础上加上容器名称,启动指定的容器,比如我只启动gateway容器,命令如下:

docker-compose start ruoyi-gateway

在这里插入图片描述

6、关闭服务容器

关闭工程中所有服务的容器,命令如下:

docker-compose stop

在这里插入图片描述
也可以在上面命令的基础上加上容器名称,关闭指定的容器,比如我只关闭auth容器,命令如下:

docker-compose stop ruoyi-auth

在这里插入图片描述

7、重启服务容器

重启工程中所有服务的容器,命令如下:

docker-compose restart

在这里插入图片描述

也可以在上面命令的基础上加上容器名称,重启指定的容器,比如我只重启auth容器,命令如下:

docker-compose restart ruoyi-auth

在这里插入图片描述

相关文章:

使用docker、docker-compose部署微服务

使用docker、docker-compose部署微服务 一、使用docker部署1、准备2、上传jar包3、编写dockerfile文件3、构建镜像和容器 二、使用docker-compose部署1、准备服务的jar包和dockerfile文件2、编写docker-compose.yml文件3、docker-compose常用命令(1)、前…...

【Axure高保真原型】中继器网格图片拖动摆放

今天和大家分享中继器网格图片拖动摆放的原型模板,我们可以通过鼠标拖动来移动图片,拖动过程其他图标会根据图片拖动自动排列,松开鼠标是图片停放在指定位置,其他图标自动排列。那这个模板是用中继器制作的,所以使用也…...

《基于 Vue 组件库 的 Webpack5 配置》4. 压缩 CSS 和 js 文件

压缩 CSS 使用 webpack 插件 css-minimizer-webpack-plugin,需要额外安装 npm i css-minimizer-webpack-pluginlatest -D;压缩 js 使用 webpack 自带插件 terser-webpack-plugin,无需额外安装;package.json 的配置如下 const Css…...

electron globalShortcut 快捷键,在焦点移到其他软件上时,调用快捷键报错

用 electron 开发软件,在设置了 globalShortcut 快捷键后,在当前开发的软件上调用快捷键正常,但是当焦点不在当前软件时,在使用快捷键,好些时候会报错。大概率与系统快捷键产生冲突或者快键键控制的回调里获取的内容&a…...

【PHP】PHP条件控制

在PHP中,条件控制语句用于根据条件来执行不同的代码块。以下是一些常见的条件控制语句: if语句: if ($condition) {// 如果条件为真,执行此代码块 }if-else语句: if ($condition) {// 如果条件为真,执行…...

超干货!Linux中断响应流程

为了提高外部事件处理的实时性,现在的处理器几乎无一例外都含有中断控制器,外设也大都带有中断触发的功能。为了能支持这一特性,Linux系统中设计了一个中断子系统来管理系统中的中断。 那么你知道Linux系统中的中断响应是怎样的流程吗&#…...

统计学补充概念-13-逻辑回归

概念 逻辑回归(Logistic Regression)实际上是一种用于解决分类问题的统计学习方法,尽管其名称中带有"回归"一词,但它主要用于处理分类任务。逻辑回归用于预测一个事件发生的概率,并将其映射到一个特定的输出…...

java八股文面试[多线程]——什么是线程安全

对线程安全的理解 总结:一个进程内的多个线程同时访问堆内存。 知识来源: 【并发与线程】对线程安全的理解_哔哩哔哩_bilibili...

Redis 介绍

一.Redis 介绍 Redis 和 Memcached 都是非关系型数据库也称为 NoSQL 数据库,MySQL、 Mariadb、SQL Server、PostgreSQL、Oracle 数据库属于关系型数据 关系型数据库(RDBMS, Relational Database Management System)。 1.1 Redis 介绍 Redis(Remote Dictionary Se…...

冠达管理:核污染防治板块热度不减,建工修复等多只个股涨停

日本福岛核污染水排海引发商场担忧,核污染防治概念股表现持续活跃。 8月28日,建工修复(300958.SZ)、中电环保(300172.SZ)、捷强配备(300875.SZ)20CM强势涨停,中广核技&a…...

Unity关键概念

Unity是一款跨平台的游戏引擎和开发工具,用于创建2D和3D游戏、交互式内容和应用程序。它提供了一个强大的开发环境,使开发者能够轻松地设计、开发和部署高质量的游戏和应用程序。 以下是Unity的几个关键概念: 游戏对象(Game Obj…...

JDK配置环境变量(超详细)

先安装JDK再配置环境变量! JDK可以简单理解为就是java,JDK包含了java项目运行所需要的运行环境JRE,编译运行java程序的java虚拟机JVM。 jdk-8u201-windows-x64安装包(jdk1.8): 提取码:19xv …...

抢先体验|乐鑫推出 ESP32-S3-BOX-3 新一代开源 AIoT 开发套件

乐鑫科技 (688018.SH) 非常高兴地宣布其开发套件阵容的最新成员 ESP32-S3-BOX-3。这款完全开源的 AIoT 应用开发套件搭载乐鑫高性能 ESP32-S3 AI SoC,旨在突破传统开发板,成为新一代开发工具的引领者。 【乐鑫新品抢先体验】ESP32-S3-BOX-3 新一代开源 A…...

Java 语言实现归并排序算法

【引言】 归并排序算法是一种高效且稳定的排序算法。它采用分治法的思想,将数组反复分割成两个子数组,直到每个子数组只有一个元素。然后将这些子数组逐个合并,最终得到排序完毕的数组。本文将使用Java语言实现归并排序算法,并详细…...

【Python编程】将同一种图片分类到同一文件夹中

一、数据结构如下: 二、编程工具:Jupyter-Notebook 三、代码: import os import cv2 import shutilpath0os.getcwd()\\apple\\RGB path1os.getcwd()\\apple\\tof_confidence path2os.getcwd()\\apple\\tof_depth path3os.getcwd()\\apple\\…...

Web安全测试(四):XML注入和代码注入

一、前言 结合内部资料,与安全渗透部门同事合力整理的安全测试相关资料教程,全方位涵盖电商、支付、金融、网络、数据库等领域的安全测试,覆盖Web、APP、中间件、内外网、Linux、Windows多个平台。学完后一定能成为安全大佬! 全部…...

如何通过内网穿透实现外部网络对Spring Boot服务端接口的HTTP监听和调试?

文章目录 前言1. 本地环境搭建1.1 环境参数1.2 搭建springboot服务项目 2. 内网穿透2.1 安装配置cpolar内网穿透2.1.1 windows系统2.1.2 linux系统 2.2 创建隧道映射本地端口2.3 测试公网地址 3. 固定公网地址3.1 保留一个二级子域名3.2 配置二级子域名3.2 测试使用固定公网地址…...

深入理解c++特殊成员函数

深入理解c特殊成员函数 在c中,特殊成员函数有下面6个: 构造函数析构函数复制构造函数(拷贝构造函数)赋值运算符(拷贝运算符)移动构造函数(c11引入)移动运算符(c11引入) 以Widget类为例,其特殊成员函数的签名如下所示: class W…...

RecyclerView面试问答

RecycleView 和 ListView对比: 使用方法上 ListView:继承重写 BaseAdapter,自定义 ViewHolder 与 converView优化。 RecyclerView: 继承重写 RecyclerView.Adapter 与 RecyclerView.ViewHolder。设置 LayoutManager 来展示不同的布局样式 ViewHolder的编写规范化,ListVie…...

Redis 7 教程 数据持久化

总体 RDB 介绍 RDB 持久化以指定的时间间隔执行数据集的时间点快照 。 把某一时刻的数据和状态以文件的形式写到磁盘上,即使出现故障宕机,快照文件也不会丢失,数据的可靠性得到保证。快照文件就是RDB(Redis DataBase)文件(dump.rdb) 作用 在指定的时间间隔内将内存中的数…...

conda相比python好处

Conda 作为 Python 的环境和包管理工具,相比原生 Python 生态(如 pip 虚拟环境)有许多独特优势,尤其在多项目管理、依赖处理和跨平台兼容性等方面表现更优。以下是 Conda 的核心好处: 一、一站式环境管理&#xff1a…...

深入浅出Asp.Net Core MVC应用开发系列-AspNetCore中的日志记录

ASP.NET Core 是一个跨平台的开源框架,用于在 Windows、macOS 或 Linux 上生成基于云的新式 Web 应用。 ASP.NET Core 中的日志记录 .NET 通过 ILogger API 支持高性能结构化日志记录,以帮助监视应用程序行为和诊断问题。 可以通过配置不同的记录提供程…...

Go 语言接口详解

Go 语言接口详解 核心概念 接口定义 在 Go 语言中,接口是一种抽象类型,它定义了一组方法的集合: // 定义接口 type Shape interface {Area() float64Perimeter() float64 } 接口实现 Go 接口的实现是隐式的: // 矩形结构体…...

1.3 VSCode安装与环境配置

进入网址Visual Studio Code - Code Editing. Redefined下载.deb文件,然后打开终端,进入下载文件夹,键入命令 sudo dpkg -i code_1.100.3-1748872405_amd64.deb 在终端键入命令code即启动vscode 需要安装插件列表 1.Chinese简化 2.ros …...

鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个医院查看报告小程序

一、开发环境准备 ​​工具安装​​: 下载安装DevEco Studio 4.0(支持HarmonyOS 5)配置HarmonyOS SDK 5.0确保Node.js版本≥14 ​​项目初始化​​: ohpm init harmony/hospital-report-app 二、核心功能模块实现 1. 报告列表…...

WEB3全栈开发——面试专业技能点P2智能合约开发(Solidity)

一、Solidity合约开发 下面是 Solidity 合约开发 的概念、代码示例及讲解,适合用作学习或写简历项目背景说明。 🧠 一、概念简介:Solidity 合约开发 Solidity 是一种专门为 以太坊(Ethereum)平台编写智能合约的高级编…...

NFT模式:数字资产确权与链游经济系统构建

NFT模式:数字资产确权与链游经济系统构建 ——从技术架构到可持续生态的范式革命 一、确权技术革新:构建可信数字资产基石 1. 区块链底层架构的进化 跨链互操作协议:基于LayerZero协议实现以太坊、Solana等公链资产互通,通过零知…...

tree 树组件大数据卡顿问题优化

问题背景 项目中有用到树组件用来做文件目录,但是由于这个树组件的节点越来越多,导致页面在滚动这个树组件的时候浏览器就很容易卡死。这种问题基本上都是因为dom节点太多,导致的浏览器卡顿,这里很明显就需要用到虚拟列表的技术&…...

AspectJ 在 Android 中的完整使用指南

一、环境配置(Gradle 7.0 适配) 1. 项目级 build.gradle // 注意:沪江插件已停更,推荐官方兼容方案 buildscript {dependencies {classpath org.aspectj:aspectjtools:1.9.9.1 // AspectJ 工具} } 2. 模块级 build.gradle plu…...

Linux 中如何提取压缩文件 ?

Linux 是一种流行的开源操作系统,它提供了许多工具来管理、压缩和解压缩文件。压缩文件有助于节省存储空间,使数据传输更快。本指南将向您展示如何在 Linux 中提取不同类型的压缩文件。 1. Unpacking ZIP Files ZIP 文件是非常常见的,要在 …...