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

使用Docker挂载部署JAVA项目

用于需要使用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.kler.cn/news/309615.html

相关文章:

  • MICE MIXTURE OF CONTRASTIVE EXPERTS FOR UNSUPERVISED IMAGE CLUSTERING
  • Docker安装SVN,搭建自己的本地版本仓库
  • 高密原型验证系统解决方案(下篇)
  • 图像检测【YOLOv5】——深度学习
  • 面向对象程序设计之模板进阶(C++)
  • MySQL8.0.13-函数索引
  • 高通Liunx 系统镜像编译
  • 接口开发基本规范
  • 软件测试学习笔记丨Postman基础使用
  • 专业学习|系统动力学概观(方法特色、构成要素、建模步骤)
  • 分集合并技术(MRC技术)
  • 四款视频转文字工具,搞定会议记录!
  • 02 基于STM32的按键控制继电器驱动电机
  • springboot luttuc redis 集成protobuf,手动序列化反序列化
  • C#使用Access数据库使用总结
  • LeetCode 面试经典 150 题回顾
  • 【C++】多态的认识和理解
  • 速通LLaMA2:《Llama 2: Open Foundation and Fine-Tuned Chat Models》全文解读
  • Leetcode 3291. Minimum Number of Valid Strings to Form Target I
  • 线性判别分析 (Linear Discriminant Analysis, LDA)
  • 【Unity学习心得】如何制作俯视角射击游戏
  • vue-router 在新的标签页打开链接/路由
  • 2024.9.11(k8s环境搭建)
  • 如何为 Java 应用程序创建安装程序
  • 《深度学习》【项目】 OpenCV 身份证号识别
  • PostgreSQL 的 logger 进程和 Oracle 的 diag 进程对比
  • SDKMAN!软件开发工具包管理器
  • 基于Spark框架实现XGBoost模型
  • ThinkPHP3改造自定义日志输出
  • setup函数子传父普通写法