docker部署java项目(war包方式)

news2024/9/21 3:29:59

场景描述:java项目war包,在开发开电脑上使用dockerfile构建镜像,上传镜像到客户服务器中使用docker加载docker镜像,然后部署。
 

目录

一、本地环境安装

docker

git

二、服务器环境安装

docker

三、构建docker镜像(win系统)

四、注意事项

(1)系统架构

(2)使用dockerfile构建失败

(3)数据卷挂载

(4)多容器之间共享数据

(5)docker部署服务之间的通信

(6)获取客户端ip

(7)查看日志

(8) 宿主机和容器之间文件拷贝

(9)容器中的文件修改

(10)idea中使用docke

一、本地环境安装

docker

(1)本地开发电脑中要安装docker

        链接下载

        https://docs.docker.com/desktop/install/windows-install/

(2)安装docker

        docker官方有详细的安装步骤,可视化安装和命令安装都非常详细,就在下载链接中拉到最下即可看到。

(3)验证

docker --version #出现版本号代表安装完成

git

(1)下载https://git-scm.com/download/ (这里演示win 64-bit)

(2)下载完成后安装即可,点击下一步即可

(3)在IDEA中使用Git

在IDEA中使用Git,本质上还是使用的本地安装的Git软件,所以需要在IDEA中配置Git。

(4)IDEA中使用Git,本地项目初始为仓库推送到远程仓库

项目初始为git本地仓库、项目内容提交到本地仓库、关联远程仓库、提交到远程仓库

1.项目初始化为本地仓库,在IDEA中打开一个项目,按下图步骤操作,弹出对话框,选择要初始化为本地仓库的项目文件夹,点击确认

2.项目内容提交到本地仓库,完成第一步IDEA右侧上面会出现绿色对勾,点击对勾

 3.本地仓库提交到远程仓库,点击Push弹出对话框

4.此时Push,IDEA会报一个错误,意思就是本次推送内容被拒绝,意思就是本地仓库和远程仓库版本不一样,文件信息不一样(比如远程仓库中有的文件,本地没有,那么直接push,本地覆盖远程的,肯定不允许),所以要先拉取远程仓库的版本信息,和远程仓库的文件合并到本地

只需要在IDEA中点击Terminal按钮,依次输入以下3条命令

git pull
 
git pull origin master
 
git pull origin master --allow-unrelated-histories
 
第一句:用于从远程获取代码并合并本地的版本。 
第二句:将远程主机 origin 的 master 分支拉取过来,与本地的当前分支合并。
第三句:合并

5.此时再次Push就可以把本地仓库的内容推送到远程仓库

IDEA顶部工具栏VCS->Git->Push->Push

二、服务器环境安装

docker

(1)安装docker 

        使用 yum install docker-ce 命令安装

        安装完成后启动docker 使用service docker start 命令

(2)验证使用docker -version 出现版本号代表安装完成

三、构建docker镜像(win系统)

(1)编写docker file

       如在D:/docker/目录下存放ROOT.tar , 同时在D:/docker/目录下创建dockerfile1.txt

      FROM:基础镜像

      COPY:把当前目录下ROOT.war  拷贝到容器的/usr/local/tomcat/webapps/(这个路基不用修改)

      EXPOSE:容器对外暴漏的端口

      CMD:容器启动时执行的命令

FROM tomcat:9.0

COPY ROOT.war /usr/local/tomcat/webapps/

EXPOSE 9090

CMD ["catalina.sh", "run"]

 (2)构建镜像

        -t :要构建的镜像名字

        -f:指定docker file

        . :当前目录

docker build -t nginx:1.0  -f dockerfile1 .#构建镜像

 (3)镜像归档

        -o:下载的位置,可以写全路径如D:/test/cadre.tar,不写路基就指当前目录

        cadre:1.0:镜像版本

docker save -o nginx.tar nginx:1.0 #dockerfile构建好的镜像下载到开发机器上

(4)加载一个镜像

        构建好的镜像已下载到你开发的机器上,将这个镜像tar包发送给客户后,客户上传到服务器上使用如下命令将镜像加载到本地docker仓库

docker load -i nginx.tar 

(5)启动容器

docker run -d -p 9090:8080 --name nginx nginx:1.0

docker run:这是Docker的运行命令,用于

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

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

相关文章

线程(Pthread)

目录 多线程模式下cpu如何分配 这两种线程的优缺点 多个线程在进程中共享资源有哪些 非共享资源 线程函数(NPTL API) 线程分离态 线程退出方式 关于线程的能力 线程属性 线程是大多数操作系统支持的调度单位,执行单元,某…

【全国大学生电子设计竞赛】2022年F题

🥰🥰全国大学生电子设计大赛学习资料专栏已开启,限时免费,速速收藏~

RabbitMQ高级特性 - 事务消息

文章目录 RabbitMQ 事务消息概述实现原理代码实现不采用事务采用事务 RabbitMQ 事务消息 概述 RabbitMQ 的 AMQP 协议实现了事务机制,允许开发者保证消息的发送和接收时原子性的,也就是说,要么消息全都发送成功,要么全都发送失败…

《python语言程序设计》2018版第6章第27题双素数是指一堆差值为2的素数。

水平的原因做不到答案那种输出 def is_prime(number):divisor 2while divisor < number / 2:if number % divisor 0:return Falsedivisor 1return Truedef print_prime_numbers(number_of_primes):count 0number 2while number < number_of_primes:if is_prime(numb…

六、GD32 MCU 选项字节设置及解除方法

您在使用GD32过程中是否遇到过芯片反复复位&#xff0c;代码无法更新&#xff0c;代码一直执行在0x1fffxxxx区域&#xff0c;或代码执行在SRAM区域的情况&#xff1f;如果有遇到这类现象是否找到原因呢&#xff1f;如果没找到是否检查过选项字节是否正常呢&#xff1f;这一章节…

C++ | 类和对象(下)(static成员、友元、内部类、匿名对象)

目录 ​编辑 static成员 static性质简介 static属于整个类&#xff0c;属于所有对象 static成员的声明与定义 static函数 友元friend 友元特性简介 友元关系讲解 内部类 特性一 特性二 匿名对象 结语 static成员 static性质简介 static成员在类里面是非常独特的…

ContentProvider的相关知识总结

1.ContentProvider概念讲解&#xff1a; 2.使用系统提供的ContentProvider 其实很多时候我们用到ContentProvider并不是自己暴露自己的数据&#xff0c;更多的时候通过 ContentResolver来读取其他应用的信息&#xff0c;最常用的莫过于读取系统APP&#xff0c;信息&#xff0c…

Kubernetes中的CRI、CNI与CSI:深入理解云原生存储、网络与容器运行时

引言 随着云原生技术的飞速发展&#xff0c;Kubernetes&#xff08;简称K8s&#xff09;作为云原生应用的核心调度平台&#xff0c;其重要性日益凸显。K8s通过开放一系列接口&#xff0c;实现了高度的可扩展性和灵活性&#xff0c;其中CRI&#xff08;Container Runtime Inter…

使用归一化连接计数的胸部CT成像:预测CanCOLD研究中的肺气肿进展| 文献速递-AI辅助的放射影像疾病诊断

Title 题目 CT Chest Imaging Using Normalized Join-Count: Predicting Emphysema Progression in the CanCOLD Study 使用归一化连接计数的胸部CT成像&#xff1a;预测CanCOLD研究中的肺气肿进展 Background 背景 Pre-existing emphysema is recognized as an indicator…

【C++】------继承(一)

目录 前言 一、概念与定义 Ⅰ、是什么&#xff1f; Ⅱ、定义 1.定义格式&#xff1a; 2.继承方式和访问限定符 3.基类&#xff08;父类&#xff09;成员访问方式的变化 二、父类与子类的赋值转化 基本认识 原理 三、 继承中的作用域 四、子类(派生类)的默认成员函…

Spring中是如何实现IoC和DI的?

前言&#xff1a;在前一篇文章中对于IoC的核心思想进行了讲解&#xff0c;而本篇文章则从Spring的角度入手&#xff0c;体会Spring对于IoC是如何实现的。 如果对IoC还有不太了解的可以阅读上一篇文章&#xff0c;相信一定会带来全新的收获&#xff1a;什么是IoC&#xff08;控制…

5.5软件工程-系统测试

系统测试 意义和目的原则测试过程测试策略测试方法练习题 测试用例设计黑盒测试等价类划分边界值分析错误推测因果图 白盒测试逻辑覆盖循环覆盖基本路径测试法 练习题 调试软件度量练习题 考点少&#xff0c;知识点多 意义和目的 系统测试的意义&#xff1a;系统测试是为了发现…

浅谈Redis集群架构与主从架构

目录 1. Redis集群1.1 集群概念1.2 集群分片1.3 重新分片 2. 集群的主从模型2.1 主从模型2.2 主节点选举 1. Redis集群 1.1 集群概念 面试官&#xff1a;我看你简历写了Redis集群&#xff0c;你说一说&#xff1f; Redis主从架构和Redis集群架构是两种不同的概念&#xff0c;大…

【Spring成神之路】从源码角度深度刨析Spring循环依赖

文章目录 一、引言二、循环依赖出现的场景2.1 有参构造导致的循环依赖问题2.2 属性注入出现的依赖问题2.3 Spring IOC创建Bean的流程2.4 有参构造为何失败2.5 属性注入为何能成功2.6 AOP导致的循环依赖 三、Spring循环依赖源码刨析四、Spring循环依赖案例刨析 一、引言 循环依…

【MATLAB源码】数学建模基础教程---初步认识数学建模

系列文章目录在最后面&#xff0c;各位同仁感兴趣可以看看&#xff01; 什么是数学建模 含义1.区分数学模型和数学建模2. 建立数学模型的注意事项3.数学建模流程图解4.数学建模模型分类5.论文常用套路6.最后&#xff1a;总结系列文章目录 含义 所谓数学建模&#xff0c;简言…

Python 中实现聊天客户端库

在 Python 中实现一个简单的聊天客户端库可以通过使用 socket 模块来处理网络通信。我们可以构建一个基于 TCP 的简单聊天系统&#xff0c;其中包括一个服务器和一个客户端。 1、问题背景 假设您正在尝试编写一个 Python 库&#xff0c;用于实现某个聊天协议的客户端。在连接…

c++入门基础(下篇)————引用、inline、nullptr

引用 引用的概念和定义 引⽤不是新定义⼀个变量&#xff0c;⽽是给已存在变量取了⼀个别名&#xff0c;编译器不会为引⽤变量开辟内存空间&#xff0c; 它和它引⽤的变量共⽤同⼀块内存空间。 类型& 引用别名 引用对象; 就像孙悟空也叫齐天大圣 猪八戒也叫天蓬元帅。…

正点原子imx6ull-mini-Linux驱动之Linux 自带的 LED 灯驱动实验(16)

前面我们都是自己编写 LED 灯驱动&#xff0c;其实像 LED 灯这样非常基础的设备驱动&#xff0c;Linux 内 核已经集成了。Linux 内核的 LED 灯驱动采用 platform 框架&#xff0c;因此我们只需要按照要求在设备 树文件中添加相应的 LED 节点即可&#xff0c;本章我们就来学习如…

Level3答案

突然发现&#xff0c;忘记公布了Level3答案&#xff1a; 1、 (1)heker.h HeiKe.h (2)Make_Text() (3)3 (4)heker.h 2、 (1)ArtText.h Maker_World.h (Maker_Game头文件组) (2)5.0 附加题、 我把标题截了张图&#xff01; 这是我们 Cookie Maker工作室 新出来的 “无标题技术”…

JavaScript基础——JavaScript数据及数据类型

JavaScript中数据的分类 数据是指设备、浏览器可以识别的内容。在JavaScript中&#xff0c;数据可分为基本数据类型&#xff08;值数据类型&#xff09;和引用数据类型。 console.log()函数 浏览器中按下F12或者右击检查&#xff0c;可以打开控制台。 在JavaScript中&#xff0…