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. 五 Android Capabilities讲解(转)

    1.Capabilities介绍 可以看下之前代码里面设置的capabilities DesiredCapabilities capabilities = new DesiredCapabilitie ...

  2. Hi3798MV200 恩兔N2 NS-1 (二): HiNAS海纳思使用和修改

    目录 Hi3798MV200 恩兔N2 NS-1 (一): 设备介绍和刷机说明 Hi3798MV200 恩兔N2 NS-1 (二): HiNAS海纳思使用和修改 Hi3798MV200 恩兔N2 NS ...

  3. [jenkins]简介与安装

    前言 jenkins是一种代码构建平台,一般用于CI/CD中的CI部分,当然也可以集成CD功能. 安装 环境 IP:192.168.0.10 系统:centos 7 快速安装步骤 官网下载jenkin ...

  4. 微服务集成redis并通过redis实现排行榜的功能

    默认你已经看过我之前的教程了,并且拥有上个教程完成的项目, 之前的教程 https://www.cnblogs.com/leafstar/p/17638933.html 由于redis的安装网上教程很 ...

  5. 6、Spring之基于xml的自动装配

    6.1.场景模拟 6.1.1.创建UserDao接口及实现类 package org.rain.spring.dao; /** * @author liaojy * @date 2023/8/5 - ...

  6. Midjourney 创建私人画图机器人(保姆级教程)

    本教程收集于:AIGC从入门到精通教程汇总 之前给大家介绍过了Midjourney 的注册教程:AI绘画:Midjourney 注册(保姆级教程) 也有Stable Diffusion(开源)的本地搭 ...

  7. 《Kali渗透基础》11. 无线渗透(一)

    @ 目录 1:无线技术 2:IEEE 802.11 标准 2.1:无线网络分层 2.2:IEEE 2.3:日常使用标准 2.3.1:802.11 2.3.2:802.11b 2.3.3:802.11a ...

  8. 《SQL与数据库基础》03. SQL-DML

    目录 DML 数据插入 数据删除 数据更新 本文以 MySQL 为例 DML 数据插入 给指定字段添加数据: INSERT INTO 表(字段1, 字段2, ......, 字段n) VALUES(值 ...

  9. Python隔离环境的搭建

    在nodejs中,我们可以指定扩展安装的路径,那么在python中,我们是不是也可以这么做呢? 当然可以,我们只需要安装一个扩展virtualenv或者virtual wrapper就可以实现环境的隔 ...

  10. pygame 入门实例教程 1 - 复古方块赛车游戏

    作者自我介绍:大爽歌, b站小UP主 ,直播编程+红警三 ,python1对1辅导老师 . 本教程步骤明确,过程清晰简明,最终代码量250行上下,适合学习pygame的新手. 项目代码已上传到我的gi ...