12-Docker发布微服务

12-Docker发布微服务

Docker发布微服务

搭建SpringBoot项目

  • 新建一个SpringBoot项目

image-20241030001910004

  • 选择依赖项Spring WebSpring Boot Actuator

image-20241030002221969

  • com.qi.docker_boot下创建controller目录,并在该目录下创建OrderController的java类

image-20241030002441466

  • OrderControllerjava类的内容如下:
package com.qi.docker_boot.controller;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;

import java.util.UUID;
/**
 * @ClassName OrderController
 * @Description TODO
 * @Author Bowen
 * @Date 2024/10/30 0:01
 * @Version 1.0
 **/
@RestController
public class OrderController {
    @Value("${server.port}")
    private String port;

    @RequestMapping("/order/docker")
    public String helloDocker() {
        return "hello world \t" + port + "\t" + UUID.randomUUID().toString();
    }

    @RequestMapping(value = "/order/index", method = RequestMethod.GET)
    public String index() {
        return "服务端口号:" + "\t" + port + "\t" + UUID.randomUUID().toString();
    }
}

  • 修改pom.xml文件:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.qi</groupId>
    <artifactId>docker_boot</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>docker_boot</name>
    <description>docker_boot</description>
    <properties>
        <java.version>1.8</java.version>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <spring-boot.version>2.6.13</spring-boot.version>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-dependencies</artifactId>
                <version>${spring-boot.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.8.1</version>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                    <encoding>UTF-8</encoding>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <version>${spring-boot.version}</version>
                <configuration>
                    <mainClass>com.qi.docker_boot.DockerBootApplication</mainClass>
                    <skip>false</skip>
                </configuration>
                <executions>
                    <execution>
                        <id>repackage</id>
                        <goals>
                            <goal>repackage</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>

</project>

  • 修改配置文件application.properties
# 应用服务 WEB 访问端口
server.port=6001
  • 查看主启动类(自动生成的)
package com.qi.docker_boot;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class DockerBootApplication {

    public static void main(String[] args) {
        SpringApplication.run(DockerBootApplication.class, args);
    }

}

  • 在IDEA中运行并查看

image-20241030003035295

  • 查看Web端

http://127.0.0.1:6001/order/docker

image-20241030003132966

http://127.0.0.1:6001/order/index

image-20241030003156051

在IDEA中运行没有问题时,将其使用maven的package打成jar包

image-20241030003413430

发布微服务项目到Docker容器

  • 将项目jar包上传到服务器

  • 编写Dockerfile

FROM openjdk:8
MAINTAINER qi

# 在主机 /var/lib/docker目录下创建一个临时文件,并链接到容器的 /tmp
VOLUME /tmp

# 将jar包添加到容器中,并命名为 springboot_docker.jar
ADD docker_boot-0.0.1-SNAPSHOT.jar /springboot_docker.jar
# 运行jar包
RUN bash -c 'touch /springboot_docker.jar'
ENTRYPOINT ["java", "-jar", "/springboot_docker.jar"]

# SpringBoot项目配置的端口号为6001,需要将6001暴露出去
EXPOSE 6001
  • 构建镜像
docker build -t springboot_docker:1.0 .
  • 启动容器
docker run -d -p 6001:6001 --name springboot springboot_docker:1.0

image-20241030210817825

查看Web

http://192.168.149.142:6001/order/docker

image-20241030211957377

http://192.168.149.142:6001/order/index

image-20241030212019297

http://ip:6001/order/index中的ip使用ifconfig查找

你可能会遇到以下问题:

jdk8无法pull

错误代码

image-20241030211130109

[root@docker spring-docker]# docker build -t springboot_docker:1.0 .
[+] Building 63.3s (2/2) FINISHED                                                                                                                   docker:default
 => [internal] load build definition from Dockerfile                                                                                                          0.0s
 => => transferring dockerfile: 558B                                                                                                                          0.0s
 => ERROR [internal] load metadata for docker.io/library/openjdk:8-oracle                                                                                    63.2s
------
 > [internal] load metadata for docker.io/library/openjdk:8-oracle:
------
Dockerfile:1
--------------------
   1 | >>> FROM openjdk:8-oracle
   2 |     MAINTAINER qi
   3 |     
--------------------
ERROR: failed to solve: openjdk:8-oracle: failed to do request: Head "https://registry.hub.docker.com/v2/library/openjdk/manifests/8-oracle?ns=docker.io": dial tcp 65.49.26.97:443: connect: connection refused
解决方案

使用代理下载

image-20241030211225607

成功下载示例

image-20241030211343586

jar包无法启动

错误代码
docker_boot-0.0.1-SNAPSHOT.jar中没有主清单属性
解决方法

更改pom.xml文件,然后重新构建即可

image-20241030211822813

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【IEEE出版|:IEEE Xplore,EI Compendex,Scopus检索|征稿正在进行中!】

第七届机械工程与智能制造国际会议&#xff08;WCMEIM 2024&#xff09; 2024 7th World Conference on Mechanical Engineering and Intelligent Manufacturing 【会议信息】 会议日期&#xff1a;2024年11月15-17日 会议地点&#xff1a;中国武汉&#xff08;武汉纺织大学…

如何成为开源代码库Dify的contributor:解决issue并提交PR

前言 Dify 是一个开源的大语言模型&#xff08;LLM&#xff09;应用开发平台&#xff0c;它融合了后端即服务&#xff08;Backend as Service&#xff09;和LLMOps的理念&#xff0c;旨在简化和加速生成式AI应用的创建和部署。Dify提供了一个用户友好的界面和一系列强大的工具…

前端如何安全存储密钥,防止信息泄露

场景 把公钥硬编码在前端代码文件里&#xff0c;被公司安全检测到了要整改&#xff0c;于是整理几种常见的前端密钥存储方案。 1. 设置环境变量再读取 在打包或部署前端应用时&#xff0c;可以将密钥配置为环境变量&#xff0c;在应用运行时通过环境变量读取密钥。这样可以将密…

深入了解 Three.js 中的材质与光照

开发领域&#xff1a;前端开发 | AI 应用 | Web3D | 元宇宙 技术栈&#xff1a;JavaScript、React、ThreeJs、WebGL、Go 经验经验&#xff1a;6年 前端开发经验&#xff0c;专注于图形渲染和AI技术 开源项目&#xff1a;github 晓智元宇宙、数字孪生引擎、前端面试题 大家好&am…

【Linux】网络基础常识{OSI七层模型 TCPIP 端口号 各种协议}_哪种nat类型适用于多个内部设备共享有限的公共ip地址

文章目录 1.网络常识 1.0DHCP协议1. 1IP地址/MAC地址/ARP协议是什么&#xff1f; IP/MACARP&#xff1a;IP ⇒ MAC 1.2手机连接wifi的原理 SSID与BSSID 手机连接wifiSSID与BSSID 1.3手机如何通过“数据/流量”上网&#xff1f;1.4电脑连接wifi的原理&#xff1f;电脑通过热点…

uniapp使用uni-push模拟推送

uniapp使用uni-push模拟推送 第一步先去uniapp开发者中心添加开通uni-push功能 这里的Android 应用签名可以先用测试的官网有,可以先用这个测试 官方测试链接文档地址 在项目中的配置文件勾选 组件中使用 如果要实时可以去做全局ws //消息推送模版uni.createPushMessage(…

ai画质修复工具有哪些?这4款AI照片修复神器建议收藏!

在当今这个科技迅猛发展的时代&#xff0c;人工智能&#xff08;AI&#xff09;正以前所未有的速度重塑我们的日常生活&#xff0c;而照片修复领域正是AI技术大放异彩的舞台。从年代久远、泛黄的老照片到追求极致细节的现代摄影佳作&#xff0c;AI以其非凡的能力&#xff0c;成…

MES管理系统在工艺管理中具备哪些作用

在现代制造业的洪流中&#xff0c;MES管理系统正逐步成为工艺管理领域的一股强大力量&#xff0c;它不仅革新了传统的管理方式&#xff0c;还为企业带来了前所未有的效率提升与成本控制优势。尽管许多企业尚未全面拥抱这一数字化变革&#xff0c;但MES管理系统在工艺管理中的潜…

IM_自定义audio播放消息

做即时通讯&#xff0c;除了文字、图片、表情、还有媒体消息&#xff0c;整理一下制作过程中自定义聊天框中的audio 效果图 tsx完整代码 AzEventBus 是解决点击多个语音播放时候&#xff0c;保证只有一个在播放;没什么特别的&#xff0c;就是自己简单封装了个EvenBusAzEventBus…

tcp shutdown, fin_wait1, fin_wait2, close_wait, last_ack, 谢特!

TCP 作为双向传输协议&#xff0c;如果你想只收不发&#xff0c;可以单向关掉发&#xff0c;shutdown(socket.SHUT_WR)&#xff0c;但不建议这么做。 看以下代码&#xff1a; #!/Users/zhaoya/myenv/bin/python3 # client import socketclient_socket socket.socket(socket.…

怎么知道社媒上用户在讨论品牌什么?评价如何?

现在社交媒体不再仅是人们闲聊和分享生活片段的地方&#xff0c;更是品牌了解市场趋势和消费者需求的重要渠道。所以做号社媒上用户声音的聆听&#xff0c;企业更能抓住客户需求、抢占潜力市场&#xff0c;进一步占据更多市场份额&#xff0c;获得精准客户。 做好用户声音聆听…

【QT】Qt窗口(上)

个人主页~ Qt窗口 一、菜单栏二、工具栏三、状态栏四、浮动窗口五、对话框1、简介&#xff08;1&#xff09;模态对话框&#xff08;2&#xff09;非模态对话框&#xff08;3&#xff09;混合属性对话框 Qt窗口是通过QMainWindow类来实现的&#xff0c;我们之前的学习是通过QWi…

第二十章 Vue组件通信之父子通信

目录 一、引言 二、组件关系分类 三、组件通信的解决方案 3.1. 父子通信流程图 3.2. 父组件通过 props 将数据传递给子组件 3.2.1. 代码App.vue 3.2.2. 代码MySon.vue 3.3. 子组件利用 $emit 通知父组件修改更新 ​编辑3.3.1. 代码App.vue 3.3.2. 代码MySon.vue 3…

用ChatGPT提升工作效率:从理论到实际应用

伴人工智能技术的迅速演进&#xff0c;像ChatGPT这类语言模型已成为提升工作效率的关键工具。这类模型不仅具备处理海量数据的能力&#xff0c;还能自动化许多日常任务&#xff0c;从而提高决策的准确性。本文将深入探讨如何在工作中利用ChatGPT等AI工具提升效率&#xff0c;涵…

golang 服务注册与服务发现框架 入门与实践

Go语言中服务注册与发现的应用 在Go微服务架构中&#xff0c;服务注册与服务发现是实现服务间通信和解耦的关键。随着服务数量的增长&#xff0c;手动管理服务之间的依赖关系变得异常复杂且容易出错。因此&#xff0c;自动化服务注册与发现机制变得尤为重要。当一个Go微服务启…

1.STM32之定时器TIM---第一部分(基本定时器)(功能最强大结构最复杂的一个外设)(实验基本定时功能)-----定时器定时中断(利用内部时钟72M)

定时器TIM是STM32外设中功能最强大结构最复杂的一个外设&#xff01;Whappy STM32F103C8T6总共由一个高级定时器3个通用定时器 #include "stm32f10x.h" // Device header #include "Delay.h" #include "OLED.h" #include &quo…

无人机救援系统基本组成

无人机救援系统基本组成 1. 源由2. 组成2.1 无人机载具2.1.1 多旋翼2.1.2 垂起固定翼2.1.3 智能避障2.1.4 物资投递 2.2 智能吊舱2.2.1 云台2.2.2 高清摄像2.2.3 红外热成像2.2.4 激光测距2.2.5 目标跟踪 2.3 通讯链路2.3.1 超长距离通信2.3.2 长距离通信2.3.3 中等距离通信 2.…

CSS 复习

复杂选择器可以通过&#xff08;id的个数&#xff0c;class的个数&#xff0c;标签的个数&#xff09;的形式&#xff0c;计算权重。 如果我们需要将某个选择器的某条属性提升权重&#xff0c;可以在属性后面写!important&#xff1b;注意!importent要写在;前面 很多公司不允许…

uniapp一键打包

1.先安装python环境&#xff0c; 2.复制这几个文件到uniapp项目里面 3.修改自己证书路径&#xff0c;配置文件路径什么的 4.在文件夹页面双击buildController.py或者cmd直接输入buildController.py 5.python报错&#xff0c;哪个依赖缺少安装哪个依赖 6.执行不动的话&…

SINAMICS V90 在汽车行业中的应用-天拓四方

随着生活水平的提高&#xff0c;平均每家每户都配有一辆代步用的小汽车&#xff0c;汽车行业也正处于蓬勃的发展中&#xff0c;尤其是新能源汽车&#xff0c;带来了新一轮的汽车生产热潮。生产一辆汽车&#xff0c;从零配件的加工&#xff0c;到整车的组装&#xff0c;基本已经…