docker构建打包java项目

简介

本项目用于 研究和实践 docker的工作流部署发布

查看github源码

技术栈

  • spring-web (RESTAPI 请求交互)
  • redis (用于实验 多容器通信)
  • maven

docker常用命令

docker --help 可查看帮助指令

查看 镜像列表

docker image ls

查看 容器列表

docker container ls

查看 日志

docker logs [容器containerId]

docker部署

1. docker创建网络空间,以便多容器在同网络里可通信

docker network create web-demo-net

2. 获取redis镜像

docker pull redis:latest
  • :latest拉取最新版镜像

3. redis镜像运行成容器

docker run -d -p 6379:6379 \
--name web-demo-redis \
--network web-demo-net \
--network-alias redis-net \
-v redis-data:/data \
redis:latest
  • -d 后台启动
  • -p 6379:6379 容器的端口(:后面的6379) 映射 成 宿主机的端口(:前面的6379)
  • --name 给容器命名
  • --network 指定使用的网络空间,同网络空间的容器才可通信
  • --network-alias 指定本容器所使用网络地址的别名:redis-net, web项目配置文件中的redis连接host即为 redis-net ,(很重要!相当于分配独有有ip地址)
  • -v 指定数据卷映射,其中redis-data是创建的数据卷名称,实际物理数据在宿主机,逻辑数据在容器中。其中/data为容器应用生成的数据路径
  • redis:latest 指定生成容器所使用的镜像名和版本标签

4. docker打包web项目为镜像

Dockfilebuild文件编写

# 获取运行环境
FROM openjdk:17
# 把本地文件目录 解析到 容器目录(容器若没有会自动创建文件夹)
ADD ./target/web-demo.jar /usr/local/workspace/web-demo/web-demo.jar
# 设置工作目录空间,方便后续操作指令
WORKDIR /usr/local/workspace/web-demo
# 执行指令
CMD java -jar web-demo.jar

打包命令

docker buildx b -t web-demo:v1 .
  • -t 命名镜像名称, :v1 指定版本标签tag
  • . 构建目录为当前目录

5. web-demo镜像运行成容器

docker run -d -p 8080:8080 --name web-demo --network web-demo-net web-demo:v1

6. 宿主机访问web应用测试

  • localhost:8080
  • localhost:8080/hello

docker备份容器数据

利用中转容器 目录挂载 获取 数据卷

docker run --rm \
--volumes-from web-demo-redis \
-v ~/backup:/backup \
debian \
tar cvf /backup/redis-data.tar /data
  • --rm 作为临时容器启动,运行后即删除容器
  • --volumes-from 数据卷挂载来源 web-demo-redis
  • -v 数据卷映射目录,冒号:前的~/backup是宿主机的绝对路径,不再是上文中redis-data模式新建的数据卷名称,它用来真正接收压缩的备份文件。冒号:后的/backup是中转linux系统的目录,用来中转临时保存容器的压缩数据。
  • debian 是指定的临时系统镜像名,可使用其他系统镜像,如ubuntu等。
  • tar linux系统常用解压缩工具,这里是把 复制的数据卷目录/data压缩为 /backup/redis-data.tar

已经备份结束,可在宿主机的 ~/backup目录查看到压缩的备份文件 redis-data.tar

docker恢复容器数据

测试时,可docker volume rm redis-data删除数据卷,来模拟丢失数据

利用中转容器 目录挂载 获取 备份文件

docker run --rm \
--volumes-from web-demo-redis \
-v ~/backup:/backup \
debian \
bash -c "cd /data/ && tar xvf /backup/redis-data.tar --strip 1"
  • --strip 1表示tar工具解压时去掉前面1层目录,这里去掉了tar压缩包里的/data/目录,根据压缩时确定层级路径是否需要此参数

备份已完成, dump.rdb 已经是旧数据文件

docker compose 一件启动应用

上文手动启动redis容器,再启动web-demo容器,docker compose 可以 实现自动化一键启动所以服务容器

修改网络空间配置

上文中是手动配置web容器和redis容器的网络空间 web-demo-net, docker compose 无需配置,自动会在同个网络内,所以去掉web项目中的配置

修改 application-prod.ymlhost: redis-netcompose.yaml里设置的服务名redis

spring:
data:
redis:
# host: redis-net
host: redis
port: 6379

编写 compose.yml

services:

  web-demo:
# 当前目录下的Dockerfile构建
build: .
ports:
- '8080:8080'
# 也给web项目一个数据卷
volumes:
- web-demo-data:/usr/local/workspace/web-demo
environment:
- TZ=Asia/Shanghai redis:
image: 'redis:latest'
volumes:
- redis-data:/data
environment:
- TZ=Asia/Shanghai volumes:
web-demo-data:
redis-data:

启动 compose

在 compose.yaml目录

docker compose up

docker构建打包java项目的更多相关文章

  1. docker swarm实现java项目的发布/滚动更新/回滚/镜像管理

    使用docker swarm滚动更新java项目,部署集群,这一切的前提是使用Jenkins+maven进行项目打包,分发等功能 具体可以参考我的另外三篇文章 https://www.cnblogs. ...

  2. Jenkins 通过 maven 构建编译 JAVA 项目环境

    Jenkins 通过maven 构建编译 JAVA 项目环境 官网下载合适Jenkins版本包: 1.jenkins http://mirrors.jenkins.io/war-stable/ 2.J ...

  3. Ant—使用Ant构建简单Java项目(三)

    博客<Ant-使用Ant构建简单Java项目(二)>我们简化了运行Test类中main方法须要运行的命令,本博客来介绍一下如何使build.xml文件和当中使用property标签定义的属 ...

  4. Ubuntu环境下使用Maven编译并打包Java项目

    一.安装Maven 打开终端输入以下指令: $ mvn -v Apache Maven Maven home: /usr/share/maven Java version: 1.8.0_181, ve ...

  5. IntelliJ IDEA 将 Maven 构建的 Java 项目打包

    前言 IntelliJ IDEA 编译生成 Jar 包的方式与 Eclipse 不同,如何将此 Maven 构建 Java 推荐引擎项目生成 Jar 包确实搜索了不少资料,有成功的有失败的,特将此验证 ...

  6. IntelliJ IDEA 打包Maven 构建的 Java 项目

    方法 2,一键生成方便到哭 打开maven项目路径     一键生成     3.生成jar 目标文件在 path/target/xx.jar下面 方法 1 选中Java项目工程名称,在菜单中选择 F ...

  7. docker 构建 spring boot项目

    在docker 开始部署springBoot项目 1.在centos7 ~ 创建一个文件夹docker 里面放置 上面的Dockerfile 和 springBoot 打包的项目docker_spri ...

  8. jenkins打包java项目缺少jar包问题解决

    java项目在使用jenkins打包时个别jar包可能会没有下载到本地,这时候就要用命令行本地安装一下 打包时基础jar包报错如图: 黑框里依次为: 组ID:-DgroupId=com.azazar ...

  9. 打包java项目为可执行程序(exe)

    一直都是编写了java程序后在控制台 javac --> java 命令运行,或者在eclipse中运行,今天突然想怎么可以写好了一个项目随处可以运行呢? 于是网上搜了步骤,跟着一步一步实现了, ...

  10. Docker + webpack 打包前端项目

    码云代码地址: https://gitee.com/caonimashi/docker_deployment_front_end    构建基础镜像: 1.下载一个 Apline Linux 操作系统 ...

随机推荐

  1. 【干货】浅谈如何给.net程序加多层壳达到1+1>2的效果

    软件破解分白盒和黑盒两种方式. 白盒破解:白盒破解是指对软件进行破解时,攻击者可以访问软件的内部结构和源代码.这种破解方式通常发生在软件的开发者.技术人员或软件公司内部.攻击者使用这些详细信息来理解软 ...

  2. 带你走进数仓大集群内幕丨详解关于作业hang及残留问题定位

    本文分享自华为云社区<[带你走进DWS大集群内幕]大集群通信:作业hang.残留问题定位>,作者: 雨落天穹丶. 前言: 测试过程中,我们会遇到这样一种情况,我的作业都执行很久了,为啥还不 ...

  3. 知识图谱(Knowledge Graph)根本概念

    目录 知识图谱 定义 基础概念: 知识图谱构建的关键技术 知识图谱的构建 实体命名识别 知识抽取 实体统一 指代消解 知识图谱的存储 RDF和图数据库的主要特点区别 知识图谱能干什么 反欺诈 不一致性 ...

  4. 开机自动打开termux以及启动termux的服务

    ps:因为我们的服务是安装在平板上面的termux,客户不想维护麻烦,如果平板重启之后还需要手动启动ternux,还要开启命令启动服务,这样比较麻烦,所以研究如下操作 1.安装macroDroid 直 ...

  5. SQL技巧:WITH RECURSIVE递归运算

    SQL技巧:WITH RECURSIVE递归运算 1.累加求和运算 -- 计算递归 WITH RECURSIVE t(n) AS (     VALUES (1)   UNION ALL     SE ...

  6. TypeScript中Class基础使用

    TypeScript是一种静态类型的JavaScript超集,它提供了许多增强的功能,其中之一就是对面向对象编程的支持.在TypeScript中,我们可以使用Class来定义类,这使得我们能够更加结构 ...

  7. Spring Boot中自动装配机制的原理

    SpringBoot中自动装配机制的原理 1.自动装配,简单来说就是自动把第三方组件的Bean装载到Spring IOC容器里面,不需要开发人员再去写Bean的装配配置, 2.在Spring Boot ...

  8. 《微服务架构设计》——Eventuate Tram框架订阅/消费模式源码解析

    Eventuate Tram框架官方文档: https://eventuate.io/docs/manual/eventuate-tram/latest/getting-started-eventua ...

  9. 从DevOps实践落地的角度谈谈“流程”和“规范"的反模式

    最近在经历的一些事情,让我突发灵感,觉得要写点关于DevOps体系建设过程中的"流程规范",记录下来. 如何解读"流程规范" 谈到DevOps落地,无一例外都会 ...

  10. 如何在.NET电子表格应用程序中创建流程图

    前言 流程图是一种常用的图形化工具,用于展示过程中事件.决策和操作的顺序和关系.它通过使用不同形状的图标和箭头线条,将任务和步骤按照特定的顺序连接起来,以便清晰地表示一个过程的执行流程. 在企业环境中 ...