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

一起学docker系列之十四Dockerfile微服务实践

目录

  • 1 前言
  • 2 创建微服务模块
    • 2.1 **创建项目模块**
    • 2.2 **编写业务代码**
  • 3 编写 Dockerfile
  • 4 构建 Docker 镜像
  • 5 运行 Docker 容器
  • 6 测试微服务
  • 7 总结
  • 8 参考地址

1 前言

微服务架构已经成为现代软件开发中的一种重要方式。而 Docker 提供了一种轻量级、便携式的容器化解决方案,能够简化微服务的部署和管理。本文将介绍如何将一个基本的微服务部署到 Docker 容器中。

2 创建微服务模块

在这里插入图片描述

2.1 创建项目模块

  • 使用 IntelliJ IDEA 或类似 IDE 创建一个新的项目模块。
    启动 ID,在主界面或菜单中选择创建新项目或模块的选项。选择适合的项目类型,比如 Spring Boot等,根据你的需求来选择合适的项目模板。配置项目信息,输入项目名称、项目路径等基本信息。确保选择了适当的构建工具和语言(通常是 Maven 和 Java)。
  • 配置 Maven 的 POM 文件以管理项目依赖和构建设置。
    打开项目结构,打开创建的项目,找到 Maven 的 pom.xml 文件。添加依赖,在 pom.xml 中添加所需的依赖项,如数据库驱动、Web 框架、日志等。确保依赖项的版本与项目需求匹配,并遵循最佳实践。配置构建设置,配置 Maven 插件、打包方式、资源文件路径等。设置项目属性,如编译版本、编码等。
  • 编写 YAML 文件,定义微服务的配置信息,比如端口号、数据库连接等。
    创建 YAML 文件,命名为 application.yml 或类似的文件。定义配置信息,编写 YAML 格式的配置文件,包括但不限于端口号、数据库连接、日志设置等。使用合适的属性和格式来定义微服务的配置,确保易读性和易维护性。

2.2 编写业务代码

  • 编写主启动类和业务类,确保微服务功能正确。
    编写主启动类。创建一个类作为微服务的入口点(通常是包含 @SpringBootApplication 或类似注解的类)。配置相关注解和组件扫描,确保应用能够正确启动。编写业务类。创建业务逻辑类,实现所需的业务功能。遵循面向对象设计原则,保持代码清晰、模块化,并进行必要的单元测试。
  • 使用 Maven 构建项目并生成 JAR 文件。执行构建命令。
    在命令行中,进入项目根目录。运行 Maven 构建命令,例如 mvn clean package。确保构建成功,检查控制台输出和生成的 JAR 文件是否符合预期。查找生成的 JAR 文件。在 Maven 构建成功后,通常会在 target 目录下生成 JAR 文件。确认生成的 JAR 文件包含了所有必需的依赖项和资源。

3 编写 Dockerfile

一个 Dockerfile 包含一系列指令,用于构建 Docker 镜像。

  • Dockerfile 是用于构建 Docker 镜像的脚本。你已经列出了一个基本的 Dockerfile 示例。
  • 使用基础镜像(如 java:8),并指定维护者信息、容器内部路径等。
  • 使用 ADD 命令将本地的 JAR 文件添加到 Docker 容器中,并指定名称。
  • 使用 RUN 命令执行一些初始化操作,如创建文件、设置权限等。
  • 使用 ENTRYPOINTCMD 指令指定容器启动时执行的命令。
# 使用基础镜像 Java 8
FROM java:8# 设置维护者信息
MAINTAINER YourName# 在容器中创建临时目录并指定为工作目录
WORKDIR /app# 将本地的 JAR 文件添加到容器中
COPY target/your_microservice.jar /app/your_microservice.jar# 指定容器启动时执行的命令
ENTRYPOINT ["java","-jar","your_microservice.jar"]# 暴露微服务的端口
EXPOSE 8080

4 构建 Docker 镜像

使用 docker build 命令根据 Dockerfile 构建 Docker 镜像。

docker build -t your_microservice_image:1.0 .

5 运行 Docker 容器

使用以下命令在 Docker 中运行刚刚构建的镜像。

docker run -p 8080:8080 --name your_microservice_container your_microservice_image:1.0

6 测试微服务

最后,通过 curl 命令或任何 HTTP 请求工具测试你的微服务:

curl http://localhost:8080/api/endpoint

7 总结

构建 Docker 镜像和运行容器时需要注意端口映射和文件路径的正确性。另外,确保 Docker 容器内部的文件路径和命令与你的项目设置一致。通过以上步骤,你已经成功地将一个基本的微服务部署到了 Docker 容器中。这个微服务现在可以在容器环境中运行,并且可以通过主机的端口进行访问和测试。

8 参考地址

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

相关文章:

一起学docker系列之十四Dockerfile微服务实践

目录 1 前言2 创建微服务模块2.1 **创建项目模块**2.2 **编写业务代码** 3 编写 Dockerfile4 构建 Docker 镜像5 运行 Docker 容器6 测试微服务7 总结8 参考地址 1 前言 微服务架构已经成为现代软件开发中的一种重要方式。而 Docker 提供了一种轻量级、便携式的容器化解决方案…...

Qt Creator 11.0.3同时使用Qt6.5和Qt5.14.2

Qt Creator 11.0.3同时使用Qt6.5和Qt5.14.2 概要方法1.打开Qt Creator中的Kit,这里我直接附上几张截图,不同的版本打开位置可能有所不同,总之最终目的是要打开构建套件(Kit)2.可以看到构建套件里面有包含了“构建套件K…...

Python中字符串列表的相互转换详解

更多资料获取 📚 个人网站:ipengtao.com 在Python编程中,经常会遇到需要将字符串列表相互转换的情况。这涉及到将逗号分隔的字符串转换为列表,或者将列表中的元素连接成一个字符串。本文将深入讨论这些情景,并提供丰富…...

09、pytest多种调用方式

官方用例 # content of myivoke.py import sys import pytestclass MyPlugin:def pytest_sessionfinish(self):print("*** test run reporting finishing")if __name__ "__main__":sys.exit(pytest.main(["-qq"],plugins[MyPlugin()]))# conte…...

分布式锁常见实现方案

分布式锁常见实现方案 基于 Redis 实现分布式锁 如何基于 Redis 实现一个最简易的分布式锁? 不论是本地锁还是分布式锁,核心都在于“互斥”。 在 Redis 中, SETNX 命令是可以帮助我们实现互斥。SETNX 即 SET if Not eXists (对应 Java 中…...

26、pytest使用allure解读

官方实例 # content of pytest_quick_start_test.py import allurepytestmark [allure.epic("My first epic"), allure.feature("Quick start feature")]allure.id(1) allure.story("Simple story") allure.title("test_allure_simple_te…...

Uncle Maker: (Time)Stamping Out The Competition in Ethereum

目录 笔记后续的研究方向摘要引言贡献攻击的简要概述 Uncle Maker: (Time)Stamping Out The Competition in Ethereum CCS 2023 笔记 本文对以太坊 1 的共识机制进行了攻击,该机制允许矿工获得比诚实同行更高的挖矿奖励。这种名为“Uncle Maker”的攻击操纵区块时间…...

浅谈可重入与线程安全

文章目录 可重入与线程安全的关系 可重入 若一个程序或子程序可以“在任意时刻被中断然后操作系统调度执行另一段代码,这段代码又使用了该副程序不会出错”,则称其为可重入(reentrant 或 re-entrant)的。即当该副程序正在运作时&…...

深入理解TDD(测试驱动开发):提升代码质量的利器

在日常的软件开发工作中,我们常常会遇到这样的问题:如何在繁忙的项目进度中,保证我们的代码质量?如何在不断的迭代更新中,避免引入新的错误?对此,有一种有效的开发方式能帮助我们解决这些问题&a…...

pyqt5使用pyqtgraph实现动态热力图

pyqt5使用pyqtgraph实现动态热力图 一、效果图 二、流程 1、打开Designer创建一个UI界面 2、把UI转成py 3、创建一个main.py文件 4、在main文件中渲染画布、创建初始数据、画热力图、创建更新数据线程、绑定按钮触发事件三、UI界面 其中h_map.py代码如下: # -*- coding: ut…...

【android开发-16】android中文件和sharedpreferences数据存储详解

1,文件读写方式的数据存储 下面是一个简单的示例,演示如何在Android中使用内部存储来保存和读取文件: 保存文件: try { String data "这是要保存的数据"; FileOutputStream fos openFileOutput("myFile"…...

《当代家庭教育》期刊论文投稿发表简介

《当代家庭教育》杂志是家庭的参谋和助手,社会的桥梁和纽带,人生的伴侣和知音,事业的良师益友。 国家新闻出版总署批准的正规省级教育类G4期刊,知网、维普期刊网收录。安排基础教育相关稿件,适用于评职称时的论文发表…...

【操作教程】如何将外省医保转入广州市区(医保转移接续手续办理)?

登录(可以用微信扫码采用粤省事账号登录,没有粤省事小程序账号的可以自主申请很方便)广东政务服务网https://www.gdzwfw.gov.cn/ 这里不得不吐槽官网开发者,太拉胯了,居然有undefined,多刷新几次就好了&…...

【分布式系统学习】CAP原理详解

CAP原理详解 前言CAP一张图 一、概念1.1 关键词解读1.2 关于CAP(拆分解读)1.3 CAP原理精髓 二、CAP模拟场景举例理解三、CAP原理证明为什么不能同时满足(下面举例说明)3.1 必须满足分区容错性P下的处理方式3.2 不是必须满足分区容…...

【聚类】K-modes和K-prototypes——适合离散数据的聚类方法

应用场景: 假设一批数据,每一个样本中,有唯一标识(id)、品类(cate_id)、受众(users, 小孩、老人、中年等)等属性,希望从其中找出一些样本,使得这…...

Python-炸弹人【附完整源码】

炸弹人 炸弹人是童年的一款经典电子游戏,玩家控制一个类似"炸弹人"的角色,这个角色可以放置炸弹,并在指定的时间内引爆它们消灭敌人以达到目标,此游戏共设有两节关卡,代码如下: 运行效果&#x…...

[英语学习][5][Word Power Made Easy]的精读与翻译优化

[序言] 今日完成第18页的阅读, 发现大量的翻译错误以及不准确. 需要分两篇文章进行讲解. [英文学习的目标] 提升自身的英语水平, 对日后编程技能的提升有很大帮助. 希望大家这次能学到东西, 同时加入我的社区讨论与交流英语相关的内容. [原著英文与翻译版对照][第18页] Wh…...

Apache Doris 详细教程(一)

1、Doris简介 1.1、doris概述 Apache Doris 由百度大数据部研发(之前叫百度 Palo,2018 年贡献到 Apache 社区后, 更名为 Doris ),在百度内部,有超过 200 个产品线在使用,部署机器超过 1000 台…...

【Vue3从入门到项目实现】RuoYi-Vue3若依框架前端学习——登录页面

若依官方的前后端分离版中,前端用的Vue2,这个有人改了Vue3的前端出来。刚好用来学习: https://gitee.com/weifengze/RuoYi-Vue3 运行前后端项目 首先运行项目 启动前端,npm install、npm run dev 启动后端,按教程配置…...

win11 关闭快速启动,解决重启后部分应用没有关闭的问题

鼠标右击win11开始菜单选择windows终端(管理员)打开输入:powercfg /h off按下回车即可...

stm32G473的flash模式是单bank还是双bank?

今天突然有人stm32G473的flash模式是单bank还是双bank?由于时间太久,我真忘记了。搜搜发现,还真有人和我一样。见下面的链接:https://shequ.stmicroelectronics.cn/forum.php?modviewthread&tid644563 根据STM32G4系列参考手…...

日语学习-日语知识点小记-构建基础-JLPT-N4阶段(33):にする

日语学习-日语知识点小记-构建基础-JLPT-N4阶段(33):にする 1、前言(1)情况说明(2)工程师的信仰2、知识点(1) にする1,接续:名词+にする2,接续:疑问词+にする3,(A)は(B)にする。(2)復習:(1)复习句子(2)ために & ように(3)そう(4)にする3、…...

MFC内存泄露

1、泄露代码示例 void X::SetApplicationBtn() {CMFCRibbonApplicationButton* pBtn GetApplicationButton();// 获取 Ribbon Bar 指针// 创建自定义按钮CCustomRibbonAppButton* pCustomButton new CCustomRibbonAppButton();pCustomButton->SetImage(IDB_BITMAP_Jdp26)…...

抖音增长新引擎:品融电商,一站式全案代运营领跑者

抖音增长新引擎:品融电商,一站式全案代运营领跑者 在抖音这个日活超7亿的流量汪洋中,品牌如何破浪前行?自建团队成本高、效果难控;碎片化运营又难成合力——这正是许多企业面临的增长困局。品融电商以「抖音全案代运营…...

cf2117E

原题链接&#xff1a;https://codeforces.com/contest/2117/problem/E 题目背景&#xff1a; 给定两个数组a,b&#xff0c;可以执行多次以下操作&#xff1a;选择 i (1 < i < n - 1)&#xff0c;并设置 或&#xff0c;也可以在执行上述操作前执行一次删除任意 和 。求…...

Android 之 kotlin 语言学习笔记三(Kotlin-Java 互操作)

参考官方文档&#xff1a;https://developer.android.google.cn/kotlin/interop?hlzh-cn 一、Java&#xff08;供 Kotlin 使用&#xff09; 1、不得使用硬关键字 不要使用 Kotlin 的任何硬关键字作为方法的名称 或字段。允许使用 Kotlin 的软关键字、修饰符关键字和特殊标识…...

.Net Framework 4/C# 关键字(非常用,持续更新...)

一、is 关键字 is 关键字用于检查对象是否于给定类型兼容,如果兼容将返回 true,如果不兼容则返回 false,在进行类型转换前,可以先使用 is 关键字判断对象是否与指定类型兼容,如果兼容才进行转换,这样的转换是安全的。 例如有:首先创建一个字符串对象,然后将字符串对象隐…...

【Java学习笔记】BigInteger 和 BigDecimal 类

BigInteger 和 BigDecimal 类 二者共有的常见方法 方法功能add加subtract减multiply乘divide除 注意点&#xff1a;传参类型必须是类对象 一、BigInteger 1. 作用&#xff1a;适合保存比较大的整型数 2. 使用说明 创建BigInteger对象 传入字符串 3. 代码示例 import j…...

C++使用 new 来创建动态数组

问题&#xff1a; 不能使用变量定义数组大小 原因&#xff1a; 这是因为数组在内存中是连续存储的&#xff0c;编译器需要在编译阶段就确定数组的大小&#xff0c;以便正确地分配内存空间。如果允许使用变量来定义数组的大小&#xff0c;那么编译器就无法在编译时确定数组的大…...

nnUNet V2修改网络——暴力替换网络为UNet++

更换前,要用nnUNet V2跑通所用数据集,证明nnUNet V2、数据集、运行环境等没有问题 阅读nnU-Net V2 的 U-Net结构,初步了解要修改的网络,知己知彼,修改起来才能游刃有余。 U-Net存在两个局限,一是网络的最佳深度因应用场景而异,这取决于任务的难度和可用于训练的标注数…...