windows版docker部署springcloud项目

news2024/9/23 15:25:25

材料:

1.windows版docker环境(其他版教程可能道理一样但是比如文件后坠名上可能有差异)
2.运行好的数据库容器(实现教程)
3.所有jar包

实现:

最后整好的文件夹结构图(原工程文件机密,可以找我寻求帮助,但是需要一点点小心意):
在这里插入图片描述4个文件夹分别是装有4个微服务jar包

Dockerfile文件是docker运行命令的环境配置说明文件(根据需要修改)

start.sh文件帮助我们起jar包的脚本(根据需要修改,就是用来起所有jar包的,在Dockerfile中进行了引用)

说明书内容如下:

要执行 Dockerfile 中的指令并构建镜像,您可以按照以下步骤进行操作:

确保您已经在 Docker 客户端环境中,并在终端中进入 Dockerfile 所在的目录。

使用以下命令来构建镜像,其中 image_name:tag 是您为镜像指定的名称和标签,可以根据需要自行修改:

docker build -t springcloud:0.0.1 .
注意,命令末尾的 . 表示 Dockerfile 在当前目录中。

等待 Docker 构建镜像,这可能需要一些时间,取决于您的系统性能以及镜像的大小。

构建完成后,您可以使用以下命令查看已构建的镜像列表:

docker images
您应该能够在列表中看到刚刚构建的镜像,其中包含指定的名称和标签。

接下来,您可以运行该镜像创建并启动容器。例如,可以使用以下命令运行镜像:启动时必须映射端口

docker run -d --name springcloudimg -p 3888:3888 -p 3801:3801 -p 3802:3802 -p 3343:3343 springcloud:0.0.1

二、start.sh的换行符要换成\n

在 Notepad++ 中修改换行符的方法如下:

打开要编辑的文件。
在菜单栏中选择 "编辑" > "文档格式转换"。
在弹出的子菜单中,选择适当的行结束符选项,如 "Windows (CRLF)"、"Unix (LF)" 或 "Macintosh (CR)",取决于您想要设置的换行符类型。
单击菜单栏上的 "编辑",然后选择 "EOL转换"。
在子菜单中选择你想要的换行符选项。
保存文件。
完成上述步骤后,文件中的换行符将被更新为您选择的类型。请注意在保存文件时进行备份,以防止意外的数据丢失。
三、容器之间的网络访问的url查看方法(以mysql为例)
docker inspect 容器名 
根据提供的信息,这是Docker容器的网络配置。以下是对每个字段的解释:

Networks:表示容器所连接的网络列表。
bridge:网络名称,这是默认的Docker网桥网络。
IPAMConfig:IP地址管理配置,这里为null,表示不使用特定的IP地址管理配置。
Links:链接其他容器的配置,这里为null,表示没有链接到其他容器。
Aliases:网络别名列表,这里为null,表示没有指定网络别名。
NetworkID:网络的唯一标识符。
EndpointID:容器在网络中的唯一标识符。
Gateway:网络的网关IP地址。
IPAddress:容器在网络中分配的IP地址。
IPPrefixLen:IP地址前缀长度,这里为16。
IPv6Gateway:IPv6的网关地址。
GlobalIPv6Address:全局IPv6地址。
GlobalIPv6PrefixLen:全局IPv6地址前缀长度。
MacAddress:容器的MAC地址。
DriverOpts:驱动选项,这里为null,表示没有指定驱动选项。
通过提供的信息,可以看出容器的IP地址为172.17.0.2,网关地址为172.17.0.1。这些信息可以用于容器之间的通信或进行网络配置。
这是查看容器中信息的命令,找到其中的Gateway或IPAddress(这俩其中一个肯定有一个行),再 加上 启动容器时映射出去的的端口,就组成了容器访问另一个容器的url地址

步骤一:

先形成一个在宿主机上运行的一个java项目部署环境(就是不用docker部署时的部署环境)

例如:
在这里插入图片描述

步骤二:

添加Dockerfile文件没有后缀名

# 指定基础镜像为 JDK 11(这里替换为你的jdk版本)
FROM openjdk:11

# 设置工作目录(不用改)
WORKDIR /app

# 将所有的 包含JAR 文件的文件夹复制到镜像中的 /app/springcloud 目录下(这里根据你的一个jar包的路径排版进行调整替换,添加)
COPY EurekaServer /app/springcloud/EurekaServer
COPY GateWayService /app/springcloud/GateWayService
COPY MechanicalCalculationService /app/springcloud/MechanicalCalculationService
COPY UserService /app/springcloud/UserService
# 将 start.sh文件复制到docker中的/app/springcloud中(这个start.sh必须有)
COPY start.sh /app/springcloud/start.sh

# 设置启动脚本可执行权限(确保路径一致)
RUN chmod 777 /app/springcloud/start.sh

# 暴露应用程序的端口(这些是我用到的端口,改为你的)
EXPOSE 3343
EXPOSE 3888
EXPOSE 3802
EXPOSE 3801

#执行命令(这里用到了start.sh,切记要将换行符改为/n,否则会报错,使用nodepad++改)
ENTRYPOINT ["bash","/app/springcloud/start.sh"]

步骤三:

建立start.sh脚本(切记使用nodepad++,调整换行符,这个文件就是帮我们起项目用的自己看不解释了):

#!/bin/bash

# 定义文件夹列表
FOLDERS=("EurekaServer" "UserService" "MechanicalCalculationService" "GateWayService")

# 修改线程数目,以适应 Docker 容器的性能限制
THREADS=4

# 循环遍历文件夹列表,进入每个文件夹并运行对应的 JAR 包
for folder in "${FOLDERS[@]}"; do
    cd "/app/springcloud/$folder"
    jar=$(find . -maxdepth 1 -type f -name "*.jar")
	 echo "$jar开始启动"
    java -jar "$jar" &

    # 等待直到该 JAR 包成功启动或失败退出
    sleep 30

    # 检查退出状态码,如果不为0,则表示启动失败
    if [ $? -ne 0 ]; then
        echo "$jar启动失败"
        exit 1
    else
        echo " $jar没问题启动完毕"
    fi
done

# 无限循环,以保持容器运行状态(没有这里容器会自动关闭)
while true; do
    sleep 1
done

完结

按照说明书执行语法就行了,就连接数据库时会报错,只要你找对ip+端口就可以解决了

一定要有网没网的话先要构建一个离线的jdk:11镜像
docker save -o和docker load -i是Docker命令,用于将Docker镜像保存到文件和加载镜像文件到Docker中。下面我会解释这两个命令的作用和用法。

docker save -o命令:
docker save -o <output_file.tar> <image_name:tag>
这个命令用于将指定的Docker镜像保存到一个输出文件中。<output_file.tar>是你希望保存镜像的文件路径和名称,例如my_image.tar。<image_name:tag>是要保存的Docker镜像的名称和标签,例如ubuntu:latest。

例如:docker save -o my_image.tar ubuntu:latest

docker load -i命令:
docker load -i <input_file.tar>
这个命令用于从一个输入文件中加载Docker镜像到Docker中。<input_file.tar>是包含要加载的镜像的文件路径和名称,例如my_image.tar。

例如:docker load -i my_image.tar

使用这两个命令可以方便地将Docker镜像导出到文件并在其他机器或环境中加载。请注意,在使用docker load -i命令加载镜像之前,确保在目标机器上已经安装了Docker,并且有足够的权限来加载镜像。

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

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

相关文章

教你一文教你使用自己的域名远程访问内网群晖NAS+6.X【内网穿透】

文章目录 使用自己的域名远程访问内网群晖NAS 6.X【内网穿透】 使用自己的域名远程访问内网群晖NAS 6.X【内网穿透】 在之前的文章中&#xff0c;我们向大家演示了如何使用cpolar&#xff0c;创建一条固定的、能够在公共互联网登录内网群晖NAS的数据隧道。这条隧道已经能够应对…

医学案例|ROC曲线之面积对比

一、案例介绍 为评价CT和CT增强对肝癌的诊断效果&#xff0c;共检查了32例患者&#xff0c;每例患者分别用两种方法检查&#xff0c;由医生盲态按4个等级诊断&#xff0c;最后经手术病理检查确诊其中有16例患有肝癌&#xff0c;评价CT个CT增强对肝癌是有有诊断效果并且试着比较…

cpolar内网穿透工具

文章目录 cpolar内网穿透工具 cpolar内网穿透工具 科学技术的发展日新月异&#xff0c;电子设备在人们的生活中已成为不可或缺的工具&#xff0c;甚至在很多情况下&#xff0c;各类型的电子设备已经成为工作的核心&#xff0c;虽然移动设备越来越小巧&#xff0c;功能也越来越…

Lab1 datalab

修改bits.c&#xff0c;使其满足btest的测试&#xff0c;代码规范./dlc bits.c 测试 make cleanmake btest./btest bitXor 思路 题目的意思是用按位&和取反~实现异或^操作。即x和y的同一位置如果都是1或者都是0&#xff0c;那么异或之后是0&#xff0c;否则是1 x & …

C#学习系列之System.Windows.Data Error: 40报错

C#学习系列之System.Windows.Data Error: 40报错 前言报错内容解决总结 前言 在用户界面使用上&#xff0c;代码运行没有问题&#xff0c;但是后台报错&#xff0c;仔细研究了报错内容&#xff0c;解决问题&#xff0c;所以记录一下。 报错内容 System.Windows.Data Error: 4…

【小波尺度谱】从分段离散小波变换计算小波尺度谱研究(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

Python 进阶(二):操作字符串的常用方法

❤️ 博客主页&#xff1a;水滴技术 &#x1f338; 订阅专栏&#xff1a;Python 入门核心技术 &#x1f680; 支持水滴&#xff1a;点赞&#x1f44d; 收藏⭐ 留言&#x1f4ac; 文章目录 一、索引和切片二、字符串长度三、查找和替换四、大小写转换五、分割和连接六、去除空…

【深度解析】蓝牙室内定位方案优势介绍

万物互联时代&#xff0c;数据的价值进一步凸显&#xff0c;在海量数据中&#xff0c;位置数据成为万物互联产业中的基础坐标。室内空间结构越来越复杂&#xff0c;人们对位置的实时性和精确度要求不断提高&#xff0c;室内定位的需求也空前高涨。卫星信号对障碍物的穿透性较弱…

国内好用的企业级在线文档有哪些?

在当今数字化时代&#xff0c;企业级在线文档已经成为了现代办公环境中不可或缺的一部分。它不仅能够提高工作效率&#xff0c;还能够实现多人协同编辑&#xff0c;满足团队协作的需求。那么&#xff0c;在国内市场上&#xff0c;哪些企业级在线文档产品备受企业青睐呢&#xf…

【深度学习】WaveMix: A Resource-efficient Neural Network for Image Analysis 论文

论文&#xff1a;https://arxiv.org/abs/2205.14375 代码&#xff1a;https://github.com/pranavphoenix/WaveMix 文章目录 ABSTRACTIntroductionBackground and Related WorksWaveMix Architectural FrameworkOverall architectureWaveMix block Experiments and ResultsTasks…

计算机图形学十五菲涅尔方程

菲涅尔效应 菲涅尔效应在我们的日常生活中无处不在&#xff0c;下面来个例子三连&#xff1a; 我们去公园的池塘喂鲤鱼&#xff0c;当爆米花丢的比较近的时候&#xff0c;我们可以看见水底下成群的鲤鱼在抢吃的。但是当我们把爆米花丢的很远时&#xff0c;却看不见水底下那些如…

多线程面试题--使用场景

目录 线程池使用场景 多线程使用场景一&#xff08; es数据批量导入&#xff09; 多线程使用场景二&#xff08;数据汇总&#xff09; 多线程使用场景三&#xff08;异步调用&#xff09; 总结 如何控制某个方法允许并发访问线程的数量 总结​编辑 对ThreadLocal的理解 实现…

1200*A. Cheap Travel

#include<bits/stdc.h> using namespace std; typedef long long ll; int n,m,a,b,res; int main(){cin>>n>>m>>a>>b;if(a*m<b) resa*n;else{if(n%m0) resn/m*b;else{resn/m*b;resmin(n%m*a,b);}}cout<<res;return 0; }

「动态规划dp」

文章目录 0 概览1 步骤1.1 框架 2 刷题2.1 斐波那契数列2.1.1 题解2.1.2 Code2.1.3 结果 2.2 零钱兑换2.2.1 题解2.2.2 Code2.2.3 结果 0 概览 动态规划的题型&#xff0c;一定是要求解最值的&#xff0c;比如最短编辑距离&#xff0c;最长递增子序列&#xff0c;最长公共子序…

删除每行中的最大值

给你一个 m x n 大小的矩阵 grid &#xff0c;由若干正整数组成。 执行下述操作&#xff0c;直到 grid 变为空矩阵&#xff1a; 从每一行删除值最大的元素。如果存在多个这样的值&#xff0c;删除其中任何一个。 将删除元素中的最大值与答案相加。 注意 每执行一次操作&…

Python - OpenCV识别条形码、二维码(已封装,拿来即用)

此代码可识别条形码和二维码&#xff0c;已封装好&#xff0c;拿来即用&#xff1a; import cv2 import pyzbar.pyzbar as pyzbar import numpy from PIL import Image, ImageDraw, ImageFontclass CodeScan():def __init__(self):super(CodeScan, self).__init__()def decode…

uniapp checkbox radio 样式修改

文章目录 通过查看代码&#xff0c;发现 before部分是设置样式的主要属性 我们要设置的话&#xff0c;就要设置checkbox::before的属性。 其中的content表示内容&#xff0c;比如内部的对勾 那么我们设置的时候&#xff0c;比如设置disabletrue的时候或者checkedtrue的时候&…

Redis(三)—— Redis基本的事务操作、Redis实现乐观锁

一、Redis基本的事务操作 首先声明&#xff1a; redis的单条命令是保证原子性的&#xff08;回想一下setnx k1 v1 k5 v5命令如果k1已经存在&#xff0c;那么k5也会设置失败&#xff09;但是redis的事务不保证原子性&#xff01;见下面“1.2 某条命令有错怎么办&#xff1f;”…

产品经理:如何做好项目需求管理

产品经理每天都要接触各种不同的需求&#xff0c;只有对这些需求进行分析&#xff0c;才能更好地了解问题&#xff0c;从而制定相应的解决方案。那么&#xff0c;怎么做需求分析呢&#xff1f; 一、需求确定 选择需求是很重要的&#xff0c;先做出选择&#xff0c;才会有对应的…

Item2连接SSH

在MocOS系统上&#xff0c;没有xshell&#xff0c;而一些类似xshell的工具中&#xff0c;好用的要收费&#xff0c;免费的不好用&#xff0c;于是决定使用iTerm2打造一个好用的ssh神器。 一、新建一个Profile 在配置管理页面切换到Profiles管理页面&#xff1a; 二、配置ssh连接…