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

基于Dockerfile以docker运行java(可快速替换jar包实现工程更新)

一、安装部署docker

1.1 Ubuntu(使用 apt-get 进行安装)

# step 1: 安装必要的一些系统工具
sudo apt-get update
sudo apt-get install ca-certificates curl gnupg

# step 2: 信任 Docker 的 GPG 公钥
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg

# Step 3: 写入软件源信息
echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://mirrors.aliyun.com/docker-ce/linux/ubuntu \
  "$(. /etc/os-release && echo "$VERSION_CODENAME")" stable" | \
  sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
 
# Step 4: 安装Docker
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

# 安装指定版本的Docker-CE:
# Step 1: 查找Docker-CE的版本:
# apt-cache madison docker-ce
#   docker-ce | 17.03.1~ce-0~ubuntu-xenial | https://mirrors.aliyun.com/docker-ce/linux/ubuntu xenial/stable amd64 Packages
#   docker-ce | 17.03.0~ce-0~ubuntu-xenial | https://mirrors.aliyun.com/docker-ce/linux/ubuntu xenial/stable amd64 Packages
# Step 2: 安装指定版本的Docker-CE: (VERSION例如上面的17.03.1~ce-0~ubuntu-xenial)
# sudo apt-get -y install docker-ce=[VERSION]

1.2 CentOS (使用 yum 进行安装)

# step 1: 安装必要的一些系统工具
sudo yum install -y yum-utils

# Step 2: 添加软件源信息
yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

# Step 3: 安装Docker
sudo yum install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

# Step 4: 开启Docker服务
sudo service docker start

# 注意:
# 官方软件源默认启用了最新的软件,您可以通过编辑软件源的方式获取各个版本的软件包。例如官方并没有将测试版本的软件源置为可用,您可以通过以下方式开启。同理可以开启各种测试版本等。
# vim /etc/yum.repos.d/docker-ce.repo
#   将[docker-ce-test]下方的enabled=0修改为enabled=1
#
# 安装指定版本的Docker-CE:
# Step 1: 查找Docker-CE的版本:
# yum list docker-ce.x86_64 --showduplicates | sort -r
#   Loading mirror speeds from cached hostfile
#   Loaded plugins: branch, fastestmirror, langpacks
#   docker-ce.x86_64            17.03.1.ce-1.el7.centos            docker-ce-stable
#   docker-ce.x86_64            17.03.1.ce-1.el7.centos            @docker-ce-stable
#   docker-ce.x86_64            17.03.0.ce-1.el7.centos            docker-ce-stable
#   Available Packages
# Step2: 安装指定版本的Docker-CE: (VERSION例如上面的17.03.0.ce.1-1.el7.centos)
# sudo yum -y install docker-ce-[VERSION]

二、准备dockerfile文件与脚本与基础镜像

2.1 创建准备目录和映射目录

mkdir -p /doc/java.docker #准备目录
mkdir  /app #docker映射目录
cd  /doc/java.docker

2.2 准备Dockerfile文件

vim Dockerfile
# 基础镜像(推荐轻量级JRE)
FROM openjdk:17

# 创建挂载目录并设置权限
RUN mkdir -p /app/jars && useradd -m appuser
WORKDIR /app
COPY entrypoint.sh ./

# 声明环境变量(支持动态Jar名)
ENV JAR_NAME="app.jar" \
    JVM_OPTS="-Xms512m -Xmx1024m"

# 配置非root用户运行
RUN chown -R appuser:appuser /app && chmod +x entrypoint.sh
USER appuser

# 启动命令
ENTRYPOINT ["/app/entrypoint.sh"]

2.3 准备启动脚本

vim entrypoint.sh
#!/bin/bash
exec java ${JVM_OPTS} -jar /app/jars/${JAR_NAME}

2.4 准备基础镜像

通过docker官网或其他途径下载openjdk的基础镜像(这里使用的是openjdk17)

使用tag将镜像重新命名

docker tag registry.zhijiasoft.com/public/openjdk:24-ea-17-jdk-slim-bullseye openjdk:17

三、操作流程

3.1构建镜像与启动容器

# 构建镜像
docker build -t myapp:dynamic .

# 启动容器(挂载Jar目录)
docker run -d --name myapp -v /app/jars:/app/jars  -v /app/logs:/app/logs   -e JAR_NAME="app-v1.0.jar"  -p 8080:8080 myapp:dynamic


docker run -d --name myapp \
  -v /app(宿主机)/jars:/app/jars \  # Jar包映射路径
  -v /app(宿主机)/logs:/app/logs \  # 日志持久化
  -e JAR_NAME="app-v1.0.jar" \ # 指定初始Jar名
  -p 8080:8080 \
  myapp:dynamic

3.2 更新jar包操作

3.2.1 通过修改包的版本来更新版本
# 1. 上传新Jar到宿主机目录(如/app-v2.0.jar)
cp app-v2.0.jar /宿主机/jars/

# 2. 修改环境变量指向新文件
docker update --env JAR_NAME="app-v2.0.jar" myapp

# 3. 重启容器生效
docker restart myapp
3.2.2 通过更换同名文件来更新版本
cd /app/jars
mv app-v1.0.jar app-v1.0.jar.bak
cp -a  ?/new.app.jar  ./app-v1.0.jar
docker restart myapp

http://www.kler.cn/a/613444.html

相关文章:

  • 2007-2019年各省地方财政一般公共服务支出数据
  • Proxmox配置显卡直通
  • 算法基础_基础算法【快速排序 + 归并排序 + 二分查找】
  • centOS 7.9 65bit 修复Openssh漏洞
  • 知识库中嵌入模型(Embedding Models)与重排序模型(Re-ranking Models)推荐工具与库
  • 机器学习(八)
  • 蓝桥杯-大衣的回文数组(差分)
  • 19款超级华丽动画的图片轮播HTML5+CSS3模板源码
  • 19 python 模块
  • 详细解析int GetLength() const;声明中的const是修饰什么的?
  • javaWeb vue的简单语法
  • AI知识补全(七):AI Agent 智能代理是什么?
  • 前端Vue
  • TensorFlow 深度学习框架详解
  • 小学数学解题方法专题3-列表法-提升
  • 封装了一个支持多个分区的iOS自适应动态宽度layout
  • 解释时间复杂度 O() 表示法,如何评估算法效率?
  • 最大数字(java)(DFS实现)
  • MySQL多表查询核心指南
  • 三层交换实验