首页 > 编程语言 >Java项目打成镜像

Java项目打成镜像

时间:2022-10-03 21:03:11浏览次数:73  
标签:容器 java 打成 jar Java mysql 镜像 docker

前言

  • 官方只有java8的docker镜像,如果我们的项目使用java11开发的,那么用java8的镜像打包运行会报错
  • 那么我们部署java项目有两种方式如:1.将项目打成war包部署到tomcat容器,2.自己构建java11的镜像
  • ​我的镜像仓库​

构建镜像

  • 参考
  • 下载java
  • Java项目打成镜像_java

  • 上传到Linux服务器
  • Java项目打成镜像_mysql_02

  • 编写Dockerfile放到java同一目录
# 创建编辑Dockerfile
touch Dockerfile
vi Dockerfile

# 因为jdk必须运行在操作系统之上
FROM centos:centos8
# 作者名 作者邮箱
MAINTAINER pc [email protected]
# 创建一个新目录来存储jdk文件
RUN mkdir /usr/local/java
#将jdk压缩文件复制到镜像中,它将自动解压缩tar文件
ADD jdk-11.0.12_linux-x64_bin.tar.gz /usr/local/java/
# 设置时区
RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
# 设置环境变量
ENV JAVA_HOME /usr/local/java/jdk-11.0.12
ENV PATH $JAVA_HOME/bin:$PATH
# VOLUME 指定了临时文件目录为/tmp
# 其效果是在主机 /var/lib/docker 目录下创建了一个临时文件,并链接到容器的/tmp
VOLUME /tmp
  • 提交为自己的镜像
docker build -t chniny/java:11.0.12 .

案例一

  • ​idea将spring boot + mysql项目打成镜像​

点击查看详情

  • 参考
  • 参考
  • yml配置
spring:
application:
name: demo02
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://mysql:3306/back01 # 第2个mysql表示服务器上的mysql容器名称
username: root
password: 123456
  • 打包成功后启动容器
docker run --rm -p 8080:8080 --name demo  --link mysql:db_back01 chniny/demo:2.0
# mysql表示mysql容器名称
# db_back01表示容器别名
  • 测试依然报错:
The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from

案例二

  • ​springboot + mysql项目打成jar包上传到服务器,用Dockerfile打成镜像​
  • 参考 <- 未测试
  • 参考​ <-​​成功案例​
  • 准备一个spring boot项目,​​案例地址​
  • yml配置
server:
port: 8080

spring:
application:
name: demo02
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/back01?characterEncoding=utf-8&serverTimezone=UTC
username: root
password: 123456
  • 项目打成jar包后上传到服务器
  • Java项目打成镜像_Docker_03

  • 服务器上已经启动了mysql容器
  • 在jar所在目录新建Dockerfile
  • Java项目打成镜像_docker_04

# 因为项目使用的java11
FROM chniny/java:11.0.12
VOLUME /tmp
# jar包名称
ADD demo02-0.0.1-SNAPSHOT.jar /app.jar
RUN sh -c 'touch /app.jar'
ENV JAVA_OPTS=""
ENTRYPOINT [ "sh", "-c", "java $JAVA_OPTS -Djava.security.egd=file:/dev/./urandom -jar /app.jar" ]
  • 在Dockerfile路径下执行构建命令
# 构建
docker build -t chniny/demo:2.0 .
# 查看镜像
docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
chniny/demo 2.0 a0e566bae674 13 seconds ago 585MB
chniny/java 11.0.12 66415a5e4a62 12 hours ago 539MB
mysql 8.0.27 3218b38490ce 4 days ago 516MB
# 启动容器
docker run -it --net=host --name demo -p 8080:8080 chniny/demo:2.0
# 不停止容器退出前台
ctrl + p + q
  • 测试
  • Java项目打成镜像_mysql_05

案例三

  • ​使用idea插件Alibaba Cloud Toolkit一键部署​


标签:容器,java,打成,jar,Java,mysql,镜像,docker
From: https://blog.51cto.com/chniny/5730455

相关文章

  • Java中Map.Entry
    Map<String,String>map=newHashMap<String,String>();map.put("1","value1");map.put("2","value2");map.put("3","value3");遍历map方式1:Ma......
  • java BIO
    packageIO;//文件、数组、管道、基本数据类型、缓冲、打印、对象序列化/反序列化,以及转换等​importjava.io.*;​/***操作文件{*  1.文件字节流:FileInpu......
  • JAVA学习前准备
    电脑常用快捷键Ctrl+C:复制Ctrl+V:粘贴Ctrl+A:全选Ctrl+X:剪切Ctrl+Z:撤销Ctrl+S:保存Alt+F4:关闭窗口Shift+delete:永久性删除文件win键+R:打开运行win键+E:打......
  • java工厂方法模式学习
    总结;定义一个接口,多个实现类,一个工厂方法publicinterfaceHuman{voideat();voidsleep();}publicclassWhiteHumanimplementsHuman{@Overr......
  • java---回顾方法的定义和调用
    方法的回顾和调用packagecom.oop.demo;​importjava.io.IOError;importjava.io.IOException;​//return代表方法结束,返回一个结果//下方就是一个类publicclassDemo01......
  • java网络编程--3 TCP
    java网络编程--3TCP1.6、TCP客户端连接服务器Socket发送消息packagecom.ssl.lesson02;importjava.io.IOException;importjava.io.OutputStream;importja......
  • 肖sir__Java中模块__11
       一、random模块1、定义 random :用于产生一个随机数2、使用步骤:(1)导包(2)创建对象(3)获取随机数   案例:   importjava.util.Random;......
  • 第一个Java程序hello world
    day4:我的第一个JAVA程序HelloWorldpublicclassMain{publicstaticvoidmain(String[]args){System.out.println("hello,world");}}注意事项......
  • java---冒泡排序和稀疏数组的学习
    一.冒泡排序1.冒泡排序无疑是最为出名的排序算法,总共有8大排序2.冒泡代码相当简单,两层循环,两层冒泡轮数,里面依次比较3.我们看到的嵌套循环,应该立马就可以的出这个算法的......
  • Java设计模式 —— 建造者模式
    8建造者模式8.1建造者模式概述BuilderPattern:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。建造者模式可以将部件本身和它们的组......