IT评测·应用市场-qidao123.com技术社区

标题: 使用Dockerfile打包java项目天生镜像摆设到Linux_java项目打docker镜像的do [打印本页]

作者: 灌篮少年    时间: 2025-3-10 21:03
标题: 使用Dockerfile打包java项目天生镜像摆设到Linux_java项目打docker镜像的do
比起容器、镜像来说,Dockerfile 非常普通,它就是一个纯文本,内里纪录了一系列的构建指令,比如选择基础镜像、拷贝文件、运行脚本等等,每个指令都会天生一个 Layer,而 Docker 顺序执行这个文件里的所有步骤,末了就会创建出一个新的镜像出来。
2、编写java项目对应的Dockerfile

  1. # 使用 OpenJDK 8 作为基础镜像
  2. FROM openjdk:8-jdk-alpine
  3. # 作者信息
  4. LABEL maintainer="flgb"
  5. # 设置环境变量
  6. ENV SPRING\_OUTPUT\_ANSI\_ENABLED=ALWAYS \
  7.     JAVA\_OPTS="-Xms2048m -Xmx2048m -Dspring.profiles.active=prod -Dserver.port=6088"\
  8.     PORT=6088
  9. # spring-boot-admin.jar相对于Dockerfile的路径
  10. COPY /spring-boot-admin.jar /spring-admin.jar
  11. # sh shell -c 执行后面命令
  12. ENTRYPOINT ["sh", "-c", "java $JAVA\_OPTS -jar /spring-admin.jar"]
  13. #通过 EXPOSE 命令暴露外部访问容器端口
  14. EXPOSE $PORT
复制代码
注意点
ADD 和COPY 的区别

COPY 和 ADD 都是用于将文件从主机复制到 Docker 容器内部的命令,但它们之间有一些区别:
CMD 和 ENTRYPOINT的区别

CMD 指令

ENTRYPOINT 指令

3、构建java项目镜像

  1. docker build [OPTIONS] PATH | URL | -
复制代码
此中,PATH 可以是本地文件体系上 Dockerfile 文件所在的路径,也可以是 URL,或者是 -(表示使用标准输入)。OPTIONS 是一些可选参数,常用的参数包罗:

例如,如果 Dockerfile 文件位于当前目次下,可以使用以下命令构建镜像并设置标签:
  1. docker build -t spring-boot:1.0
  2. .
复制代码
上传dockerfile和spring-boot-admin jar到对应路径/data/java/spring-boot下

构建镜像

  1. docker build -t spring-boot:1.0
复制代码
Build的路径问题

  1. 经常会遇到如下报错:
复制代码
  1. COPY failed: stat xxxx: no such file or directory
复制代码
1、Dockerfile 文件查找不到
如果dockerfile不在当前目次,则需要指定dockerfile 目次构建
  1. docker build -f "/data/java/spring-boot/Dockerfile" -t spring-boot:1.0
复制代码
2、Copy /spring-boot-admin.jar文件找不到的问题
COPY 命令中指定的源路径应该是相对于 Dockerfile 的路径

  1. COPY spring-boot-admin.jar /spring-admin.jar
复制代码

  1. COPY ../spring-boot-admin.jar /spring-admin.jar
复制代码

  1. failed to walk /var/lib/docker/tmp/buildkit-mount2576932656/data/java/spring-boot: lstat /var/lib/docker/tmp/buildkit-mount2576932656/data/java/spring-boot: no such file or directory
复制代码
检察已经构建成功的镜像

  1. docker images
复制代码
4、天生容器


  1. docker run -p 6088:6088 --name springboot --restart always \
  2. > -d spring-boot:1.0
复制代码
检察项目启动日志,启动成功
  1. docker log 容器id
  2. #动态更细查看日志
  3. docker log -f 容器id
复制代码

5、docker 应用日志映射到本地

进入容器内里检察日志
  1. #查看对应容器id
  2. docker ps
  3. #进入容器
  4. docker exec -it container_id bash
  5. #如果没装对应的bash命令,使用sh进入
  6. docker exec -it container_id sh
  7. #查看目录
  8. ls
  9. #退出容器
  10. exit
复制代码
#进入logback设置的输出log地址,检察日志文件

  1. #停止容器
  2. docker stop id
  3. #删除容器
  4. docker rm id
  5. #重新生成挂在日志到本地目录的容器
  6. docker run -p 6088:6088 --name spring-boot --restart always \
  7. -v /home/spring-boot/logs:/home/spring-boot/logs \
  8. -d spring-boot:1.0
复制代码
同步检察本地目次

6、docker情况下 easyExcel导堕落误

  1. java.lang.NullPointerException: null
  2.         at sun.awt.FontConfiguration.getVersion(FontConfiguration.java:1264)
  3.         at sun.awt.FontConfiguration.readFontConfigFile(FontConfiguration.java:219)
  4.         at sun.awt.FontConfiguration.init(FontConfiguration.java:107)
  5.         at sun.awt.X11FontManager.createFontConfiguration(X11FontManager.java:774)
  6.         at sun.font.SunFontManager$2.run(SunFontManager.java:431)
  7.         at java.security.AccessController.doPrivileged(Native Method)
  8.         at sun.font.SunFontManager.<init>(SunFontManager.java:376)
  9.         at sun.awt.FcFontManager.<init>(FcFontManager.java:35)
  10.         at sun.awt.X11FontManager.<init>(X11FontManager.java:57)
  11.         at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
  12.         at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
  13.         at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
  14.         at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
  15.         at java.lang.Class.newInstance(Class.java:442)
  16.         at sun.font.FontManagerFactory$1.run(FontManagerFactory.java:83)
  17.         at java.security.AccessController.doPrivileged(Native Method)
  18.         at sun.font.FontManagerFactory.getInstance(FontManagerFactory.java:74)
  19.         at java.awt.Font.getFont2D(Font.java:491)
  20.         at java.awt.Font.canDisplayUpTo(Font.java:2060)
  21.         at java.awt.font.TextLayout.singleFont(TextLayout.java:470)
  22.         at java.awt.font.TextLayout.<init>(TextLayout.java:531)
  23.         at org.apache.poi.ss.util.SheetUtil.getDefaultCharWidth(SheetUtil.java:273)
  24.         at org.apache.poi.xssf.streaming.AutoSizeColumnTracker.<init>(AutoSizeColumnTracker.java:117)
  25.         at org.apache.poi.xssf.streaming.SXSSFSheet.<init>(SXSSFSheet.java:82)
  26.         at org.apache.poi.xssf.streaming.SXSSFWorkbook.createAndRegisterSXSSFSheet(SXSSFWorkbook.java:684)
  27.         at org.apache.poi.xssf.streaming.SXSSFWorkbook.createSheet(SXSSFWorkbook.java:705)
复制代码
由于docker的基础镜像openjdk缺少字体。


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 IT评测·应用市场-qidao123.com技术社区 (https://dis.qidao123.com/) Powered by Discuz! X3.4