使用Docker挂载部署JAVA项目

news2024/9/27 19:27:28

用于需要使用Docker容器部署项目,但可能部署包需多次调整的场景,这种部署方式可以减少镜像制作的过程;
推荐几个使用Docker安装环境的文章:
1.Nocas: https://blog.csdn.net/weixin_44700323/article/details/140995859
2.Mysql: https://blog.csdn.net/wangshu9939/article/details/139153044
3.Nginx: https://blog.csdn.net/xiangxi1204/article/details/138636361
4.Redis: https://blog.csdn.net/Xixi0864/article/details/136559504

一、拉取JAR包启动基础镜像(JDK)

1. 拉取JDK镜像

首先,拉取对应版本的JDK镜像文件作为基础镜像。可以使用以下命令拉取指定版本的JDK镜像(此处以JDK17为例)

docker pull openjdk:17-jdk

在这里插入图片描述

二、挂载数据卷方式启动JDK容器(同时启动项目)

1.创建数据挂载目录

创建日志和配置文件及项目目录:

mkdir -p /opt/project
mkdir -p /opt/project/log

2. 启动(java)项目容器

docker run -d -p 8091:8091 \
  -v /opt/project/server-1.0.0.jar:/my.jar \
  -v /opt/project/application.yml:/application.yml \
  -v /opt/project/logs/my_project.log:/var/log/my_project.log \
  --name my_project --privileged=true \
  openjdk:17-jdk sh -c "nohup java -jar /my.jar --spring.config.location=/application.yml > /var/log/my_project.log 2>&1 & tail -f /dev/null"

参数解析:

(1)docker run -d

  • docker run:用于创建并运行一个新的容器实例。
  • -d:以守护进程(detached)模式运行容器。即容器会在后台运行,不会阻塞当前终端。

(2)-p 8091:8091

  • -p:指定端口映射。格式为 宿主机端口:容器内部端口
  • 8091:8091:将宿主机的8091端口映射到容器内部的8091端口。这样,在宿主机上访问 localhost:8091 时,将请求转发到容器的 8091 端口。

(3)-v /opt/project/server-1.0.0.jar:/my.jar

  • -v:用于将宿主机上的文件或目录挂载到容器内的文件或目录。。
  • /opt/project/server-1.0.0.jar:/my.jar:将宿主机上的 /opt/project/server-1.0.0.jar 文件挂载到容器内部的 /my.jar。容器内的Java应用将运行这个JAR文件。

(4) -v /opt/project/application.yml:/application.yml

  • -v:再次使用挂载选项。
  • /opt/project/application.yml:/application.yml:将宿主机上的配置文件/opt/project/application.yml挂载到容器内的 /application.yml,使得应用可以读取这个配置文件。

(5)-v /opt/project/logs/my_project.log:/var/log/my_project.log

  • -v:将日志文件挂载。
  • /opt/project/logs/my_project.log:/var/log/my_project.log:将容器内部生成的日志文件 /var/log/my_project.log 映射到宿主机的 /opt/project/logs/my_project.log。容器中的日志会被写入宿主机上的这个文件。

(6) --name my_project

  • --name:为容器指定一个名称,方便管理和查看容器。
  • my_project:容器名称为 my_project。你可以通过这个名称来管理该容器(如启动、停止、删除等操作)。

(7) --privileged=true

  • --privileged=true:给容器赋予额外的权限,使得容器可以执行宿主机上原本需要高权限的操作。例如访问硬件设备或更改系统参数。

(8) openjdk:17-jdk

  • openjdk:17-jdk:这是使用的 Docker 镜像,基于 OpenJDK 17,它包含了 JDK 的工具和库。此镜像为运行Java应用提供了运行时环境。

(9)- sh -c "nohup java -jar /my.jar --spring.config.location=/application.yml > /var/log/my_project.log 2>&1 & tail -f /dev/null"

  • sh -c:执行 shell 命令。
  • nohup:让 Java 应用在后台运行,忽略 HUP 信号(即使容器的前台进程结束,应用也不会随之终止)。
  • java -jar /my.jar --spring.config.location=/application.yml:执行 Java 命令,运行挂载到容器的 JAR 文件,并指定 Spring Boot 配置文件的路径为 /application.yml
  • /var/log/my_project.log 2>&1:将标准输出和错误输出都重定向到 /var/log/my_project.log,并且这个路径已经映射到宿主机上的日志文件。
  • tail -f /dev/null:容器默认需要一个前台进程来保持运行。tail -f /dev/null 是一种常见的做法,用来让容器保持持续运行,而不会因主进程结束导致容器退出。

三、常见容器操作命令(如:容器提取成镜像、 将镜像导出到当前目录等)

  • 创建容器
docker create -it --name 2021000000000000  loongsongd/debian/sdf:v2.0 /start.s
  • 将文件从主机复制到docker容器中
 docker cp 文件 容器ID:目的目录 
  • 将容器中文件导出导本地
docker cp 容器ID:文件  本地目录
  • 容器提取成镜像 – (版本号及镜像名称一样对当前镜像升级)
docker commit -a "作者名字" -m "镜像说明" 容器id  镜像名字:版本

docker commit -a "ccms" -m "init" 容器id  name:v1
  • 将镜像打包到当前目录
docker save -o ***.tar 镜像名字:版本
  • 将tar压缩包加载为镜像
docker load -i ***.tar
  • docker基本配置 放开2375端口
vi /lib/systemd/system/docker.service
  • 进入容器
docker exec -it 【name】 /bin/bash
  • 查看doker容器(虚拟密码机)内存大小
docker inspect 【name】 | grep -i  mem
  • 查看容器使用资源情况
docker stats 【容器明】

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

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

相关文章

学习大数据DAY57 新的接口配置

作业  完成 API 接口和文件的接入, 并部署到生产调度平台, 每个任务最后至少 要有两条 不报错 的日志, 报错就驳回作业  作业不需要复制日志 API Appliation Program Interface 应用程序接口 > JSON 的地址 客户需求: 把 https://zhiyun.pub:9099/site/c-class…

从“看”到“管”:EasyCVR安防监控平台如何推动城市管理模式的转型升级

在21世纪的今天,随着城市化进程的加速推进,城市规模不断扩大,人口密集度显著增加,城市管理面临着前所未有的挑战。从公共安全、交通管理到环境保护、应急响应,每一个领域都对城市的治理能力和效率提出了更高要求。在这…

PowerShell install 一键部署Oracle23ai

Oracle23ai前言 Oracle Database 23ai Free 让您可以充分体验 Oracle Database 的能力,世界各地的企业都依赖它来处理关键任务工作负载。 Oracle Database Free 的资源限制为 2 个 CPU(前台进程)、2 GB 的 RAM 和 12 GB 的磁盘用户数据。该软件包不仅易于使用,还可轻松下载…

【LLM多模态】CogVideoX文生视频模型结构和训练过程

note 通过两阶段训练3D VAE,对视频进行压缩编码 第一阶段:在较低分辨率和较少帧数的视频上进行训练,学习压缩和重建视频的基本能力第二阶段:在更长的视频上训练,提高模型处理长视频的能力,同时保持帧与帧之…

JavaEE:文件内容操作练习(三)

文章目录 文件内容操作练习练习1练习2练习3 文件内容操作练习 练习1 扫描指定目录,并找到名称中包含指定字符的所有普通文件(不包含目录),并且后续询问用户是否要删除该文件. package javaEE.fileIO;import java.io.File; import java.util.Scanner;public class O {private…

数据结构基础讲解(八)——树和二叉树专项练习(上)

本文数据结构讲解参考书目: 通过网盘分享的文件:数据结构 C语言版.pdf 链接: https://pan.baidu.com/s/159y_QTbXqpMhNCNP_Fls9g?pwdze8e 提取码: ze8e 数据结构基础讲解(七)——数组和广义表专项练习-CSDN博客 个人主页&#x…

【初阶数据结构】详解树和二叉树(一) - 预备知识(我真的很想进步)

文章目录 前言1. 树1.1 树的概念1.2 树的相关概念1.3 树的表示1.4 树在实际中的运用 2. 二叉树2.1 二叉树的概念2.2 现实中的二叉树2.3 特殊的二叉树2.4 二叉树的性质2.5 二叉树概念和性质的一些习题 前言 初阶数据结构篇马上要迎来了一个新的成员,那就是"二叉…

这才是导师认可的论文 / 开题技术路线图

我是娜姐 迪娜学姐 ,一个SCI医学期刊编辑,探索用AI工具提效论文写作和发表。 1. 技术路线图的常见框架结构 技术路线图根据研究内容和实验设计的不同,可以采用多种结构。以下是三种常见的技术路线图框架: 1.1 顺序式框架 适用领…

第十一周:机器学习笔记

第十一周周报 摘要Abstract机器学习1. 注意力机制(下)1.1 multi-head self-attention(多头注意力机制)1.2 Positional Encoding(位置编码)1.3 truncated self attention(截断式注意力机制&#…

微软发布Windows Agent Arena 为生成式AI代理提供基准测试

使用生成式人工智能和大型语言模型来自动化和简化使用 PC 的人员的任务的情况持续增长。不过,人们也需要了解人工智能在完成任务方面的工作表现。本周微软研究院宣布,它已开发出一种专门用于在 Windows PC 上测试人工智能代理的基准。 微软在 GitHub 页面…

CHARLS数据库系列教程(2)---数据清洗、拼接和整理(1)

写在前面的话,本节内容实在太多了,只能做了一个小合集,分成2章来介绍。 CHARLS 是一项具备中国大陆 45 岁及以上人群代表性的追踪调查,旨在建设一个高质量的公共微观数据库,采集的信息涵盖社会经济状况和健康状况等多维…

Leetcode Hot 100刷题记录 -Day16(旋转图像)

旋转图像 问题描述: 给定一个 n n 的二维矩阵 matrix 表示一个图像。请你将图像顺时针旋转 90 度。 你必须在原地旋转图像,这意味着你需要直接修改输入的二维矩阵。请不要 使用另一个矩阵来旋转图像。 示例 1 输入:matrix [[1,2,3],[4,5,6]…

JavaScript - 异步编程

1. 前言 在 JavaScript 中,异步编程是一种处理需要等待操作(如网络请求、文件读取或计时器)的编程方式。由于 JavaScript 是单线程的,意味着它一次只能执行一个任务。异步编程允许你在等待某些操作完成时,继续执行其他…

河海大学《2020年+2021年827自动控制原理真题》 (完整版)

本文内容,全部选自自动化考研联盟的:《25届河海大学827自控考研资料》的真题篇。后续会持续更新更多学校,更多年份的真题,记得关注哦~ 目录 2020年复试真题 2021年初试真题 Part1:完整版真题 2020年复试真题 2021年…

Cortex-A7:__disable_irq和GIC_DisableIRQ、__enable_irq和GIC_EnableIRQ的区别(1)API介绍

0 相关资料 ARM Generic Interrupt Controller Architecture version 2.0.pdf 1 API介绍 1.1 __disable_irq __disable_irq函数的作用是失能IRQ,也就是不响应中断。实现代码如下: /**\brief Disable IRQ Interrupts\details Disables IRQ interrupt…

Pikachu靶场之XSS

先来点鸡汤,少就是多,慢就是快。 环境搭建 攻击机kali 192.168.146.140 靶机win7 192.168.146.161 下载zip,pikachu - GitCode 把下载好的pikachu-master,拖进win7,用phpstudy打开网站根目录,.....再用…

Python基础知识学习(2)

一,分支条件判断语句 在python中,分支条件语句如下: 1,判断条件:if exception: 2,接着判断的语句为:elif exception: 3,最后的条件为:else: 4,通过缩进来表示…

建一栋房子会用到哪些资质?

在建筑工程领域,资质是衡量建筑企业实力和能力的重要标准。修建一栋房子,从设计到施工,再到最终的验收和维护,涉及到众多环节和专业领域。每个环节都需要相应的资质作为保障,以确保工程的质量和安全。那么,…

Jsp学习笔记(详解)

千锋教育Java视频 从入门到精通 JSP 4h 一,引言 1.1 现有问题 在之前学习Servlet时,服务端通过Servlet响应客户端页面,有什么不足之处? 开发方式麻烦:继承父类、覆盖方法、配置Web.xml或注解代码修改麻烦:…

移除元素(反向双指针)

题目: 算法分析: 优化关键:题目不需要关注除前k元素以外的部分左指针等于对应值,复制右指针替代,右指针增加(左指针不变可以继续判断复制的右指针元素是否符合条件)否则左指针增加 算法图解&a…