docker构建打包java项目
docker构建打包java项目
简介
本项目用于 研究和实践 docker的工作流部署发布
技术栈
- 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等。tarlinux系统常用解压缩工具,这里是把 复制的数据卷目录/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.yml 的 host: redis-net 为 compose.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项目的更多相关文章
- docker swarm实现java项目的发布/滚动更新/回滚/镜像管理
使用docker swarm滚动更新java项目,部署集群,这一切的前提是使用Jenkins+maven进行项目打包,分发等功能 具体可以参考我的另外三篇文章 https://www.cnblogs. ...
- Jenkins 通过 maven 构建编译 JAVA 项目环境
Jenkins 通过maven 构建编译 JAVA 项目环境 官网下载合适Jenkins版本包: 1.jenkins http://mirrors.jenkins.io/war-stable/ 2.J ...
- Ant—使用Ant构建简单Java项目(三)
博客<Ant-使用Ant构建简单Java项目(二)>我们简化了运行Test类中main方法须要运行的命令,本博客来介绍一下如何使build.xml文件和当中使用property标签定义的属 ...
- Ubuntu环境下使用Maven编译并打包Java项目
一.安装Maven 打开终端输入以下指令: $ mvn -v Apache Maven Maven home: /usr/share/maven Java version: 1.8.0_181, ve ...
- IntelliJ IDEA 将 Maven 构建的 Java 项目打包
前言 IntelliJ IDEA 编译生成 Jar 包的方式与 Eclipse 不同,如何将此 Maven 构建 Java 推荐引擎项目生成 Jar 包确实搜索了不少资料,有成功的有失败的,特将此验证 ...
- IntelliJ IDEA 打包Maven 构建的 Java 项目
方法 2,一键生成方便到哭 打开maven项目路径 一键生成 3.生成jar 目标文件在 path/target/xx.jar下面 方法 1 选中Java项目工程名称,在菜单中选择 F ...
- docker 构建 spring boot项目
在docker 开始部署springBoot项目 1.在centos7 ~ 创建一个文件夹docker 里面放置 上面的Dockerfile 和 springBoot 打包的项目docker_spri ...
- jenkins打包java项目缺少jar包问题解决
java项目在使用jenkins打包时个别jar包可能会没有下载到本地,这时候就要用命令行本地安装一下 打包时基础jar包报错如图: 黑框里依次为: 组ID:-DgroupId=com.azazar ...
- 打包java项目为可执行程序(exe)
一直都是编写了java程序后在控制台 javac --> java 命令运行,或者在eclipse中运行,今天突然想怎么可以写好了一个项目随处可以运行呢? 于是网上搜了步骤,跟着一步一步实现了, ...
- Docker + webpack 打包前端项目
码云代码地址: https://gitee.com/caonimashi/docker_deployment_front_end 构建基础镜像: 1.下载一个 Apline Linux 操作系统 ...
随机推荐
- zabbix6.4 邮件告警配置
1.注意事项 QQ邮箱不支持zabbix6以上邮件配置,报拒绝登录 建议使用163.com网易邮箱地址 2.添加媒介 创建媒介类型-> 3.添加用户 一般情况下,无需创建用户,编辑admin即可 ...
- Unity的IPreprocessShaders:深入解析与实用案例
Unity IPreprocessShaders Unity IPreprocessShaders是Unity引擎中的一个非常有用的功能,它可以让开发者在编译Shader时自定义哪些操作需要被执行.这 ...
- nginx搭建静态文件下载服务器
配置文件大致内容 server { # 监听8001端口 listen 8001; server_name 192.168.0.2; # 指定使用utf8的编码 charset utf-8; # 内容 ...
- 震惊!强大的接口自动化测试框架2.0,unittest与pytest无缝穿插对接,可以像postman一样编写代码
theme: fancy highlight: arta 项目介绍 接口自动化测试项目2.0 软件架构 本框架主要是基于 Python + unittest + ddt + HTMLTestRunne ...
- SSM登录操作
1.编写实体类 略 2. 写mapper映射文件 通过名字查询 通过ID主键查询... 略 写dao CRUD相关抽象方法 List<Student> getAll(); Student ...
- 《CTFshow-Web入门》04. Web 31~40
@ 目录 web31 题解 原理 web32 题解 原理 web33 题解 web34 题解 web35 题解 web36 题解 web37 题解 原理 web38 题解 原理 web39 题解 we ...
- 详细讲解js实现电梯导航
场景 对于某一个页面内容繁多, 如果我们滚动的时间较长,为了增加用户体验. 我们需要实现点击某一个按钮,然后滚动到对应的区域. 滚动的时候,右侧对应的分类实现高亮 其实,这个功能就2个步骤: 1.点击 ...
- Tongweb远程调试
最近,在对项目进行国产化时,要求springboot项目容器换成tongweb.在部署中,有个问题一直无法在本地重现,搜了下网上资料,基本没法实现,所以我整理了下.注意,项目包代码必须与本地代码保持一 ...
- PYQT5学习(12)Qtabwidget 选项卡及其窗口,Qstackedwidget和Qtabwidget的效果类似,以及系统托盘QsystemtrayIcon
参考博文:https://blog.csdn.net/jia666666/article/details/81669092QTabWidget控件提供一个选项卡和一个页面区域,默认显示第一个选项卡的页 ...
- flutter的json转dart model问题
原文链接 原文链接 Preface 最近在做一个app,以后续用来找工作可以拿出来看看. 试试自己到产品设计能力,前后端能力等等. 中间遇到到一些有值得记录的点全部记录在此. Content json ...