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. fastjson 1.2.80 漏洞浅析及利用payload

    0x01 说明 在fastjson的1.2.80版本中可以通过将依赖加入到java.lang.Exception 期望类的子类中,绕过checkAuto. 0x02 简析 { "@type& ...

  2. Jmeter:"An error occurred: Can't connect to X11 window server using 'lacalhost:12.0' as the value of the display variable." 解决办法

    做各种不同项目的性能测试,都需要在项目本地压测服务器配置jmeter,需要时还要调出jmeter图形化界面来调试jmeter脚本. 标题中的问题遇过多次,这次做个记录. 1. 启动jmeter报错 在 ...

  3. AVR汇编(五):算术和逻辑指令

    AVR汇编(五):算术和逻辑指令 算术运算指令 AVR中对于算术运算提供了加法.减法和乘法指令,没有除法指令. ADD ADD 指令用于执行加法操作,相关的变体指令有:一般加法 ADD .带进位加法 ...

  4. docker 安装 Redis环境

    一.Docker搜索redis镜像 命令:docker search <镜像名称> docker search redis 二.Docker拉取镜像 命令::docker pull < ...

  5. LVS专访阿里云席明贤,从视频云2.0到“数能生智”的超长畅谈

    这是一篇人物专访,源自LiveVideoStack与阿里云视频云负责人席明贤(花名右贤)的对话.面对风云变幻的内外环境,阿里云在视频云赛道是坚定向前的,右贤没有回避多媒体当下行业面临的困难以及业务面临 ...

  6. Unity UGUI的ScrollRect(滚动视图)组件的介绍及使用

    Unity UGUI的ScrollRect(滚动视图)组件的介绍及使用 1. 什么是ScrollRect组件? ScrollRect(滚动视图)是Unity UGUI中的一个常用组件,用于在UI界面中 ...

  7. HTML一键打包IPA(苹果IOS应用)工具 网站打包 APP

    工具简介 HTML一键打包IPA(苹果应用)工具可以把本地HTML项目或者网站打包为一个苹果应用IPA文件,无需编写任何代码,支持在苹果设备上安装运行. 该软件已经被GDB苹果网页一键打包工具取代,详 ...

  8. 领域驱动模型DDD(四)——Eventuate Tram Saga源码讲解

    前言 虽然本人一直抱怨<微服务架构设计模式>中DDD模式下采用的Eventuate Tram Saga不算简单易用,但是为了更加深入了解原文作者的设计思路,还是花了点时间去阅读源码,并且为 ...

  9. 「codeforces - 1621G」Weighted Increasing Subsequences

    link. 一个 dp(拜谢 ly)和切入点都略有不同的做法,并不需要观察啥性质. 原问题针对子序列进行规划,自然地想到转而对前缀进行规划.接下来我们考虑一个前缀 \([1, i]\) 以及一个 \( ...

  10. 低功耗引擎 Cliptrix 有什么价值

    在万物互联的时代,现代人已普遍接受电视.音箱等电器设备具备智能化能力,也是在这个趋势下,我们身边越来越多的iOT设备联网和交互成为刚需.但iot设备也面临到一些非常显著的痛点,例如iot设备的内存.处 ...