LaoCat带你认识容器与镜像(实践篇三之Java项目)

本文介绍了如何使用Dockerfile和Docker在实际的Java、Vue和Go项目中进行部署。首先,以一个SpringBoot项目为例,详细阐述了如何编写Dockerfile,包括构建过程和镜像制作。文章提到了依赖管理、容器启动以及与MySQL容器的链接。此外,还讨论了优化构建过程的方法,如使用Gradle代替Maven,以及利用CI/CD工具自动化构建。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

该章主要围绕dockerfile+docker在实际项目场景(JavaVueGo)下的简单使用。

系列目录
LaoCat带你认识容器与镜像(一)
LaoCat带你认识容器与镜像(二【一章】)
LaoCat带你认识容器与镜像(二【二章】)
LaoCat带你认识容器与镜像(二【三章】)
LaoCat带你认识容器与镜像(三【上】)
LaoCat带你认识容器与镜像(三【下】)
LaoCat带你认识容器与镜像(四【上】)
LaoCat带你认识容器与镜像(四【下】)
LaoCat带你认识容器与镜像(番外一【Harbor】)
LaoCat带你认识容器与镜像(实践篇一上)
LaoCat带你认识容器与镜像(实践篇一下)
LaoCat带你认识容器与镜像(实践篇二上)
LaoCat带你认识容器与镜像(实践篇二下)

本章内容

本文实操全部基于Ubuntu 20.04
宿主机 => linux服务器本身
Docker => 20.10.22
JDK => 1.8

这一章围绕DockerfileDocker的结合使用并在实际场景下的应用,这里的实际场景指Java项目Vue项目Go项目;这里我将演示项目全部上传到自己的GitHub上,感兴趣的小伙伴可以通过文末的链接访问进行学习。


Dockerfile与Docker结合使用之Java项目

作为一名Java开发,Java语言的项目是再熟悉不过了,接下来我们通过Dockerfile来构建其Docker镜像,模拟实际日常开发如何结合Docker使用,我们这里主要以Dockerfile为主,项目相关不进行拓展,前置工作需要将Mysql容器启动,文中用到的MysqlLaoCat带你认识容器与镜像(实践篇二上)章节中启动并创建的容器。

  1. 首先我们创建一个Spring Boot项目,项目结构如下,该项目已上传Github

  2. 新建完项目后,我们再新建一个简单的接口,获取全部用户列表,然后检查项目是否可以正常启动,是否可以正常打包以及打包后的Jar是否可以正常启动。

    @GetMapping("/ping")
    public List<User> user() {
        return userService.user();
    }
    
  3. 检查无误后,我们开始编写Dockerfile,有关Dockerfile的相关内容,请阅读LaoCat带你认识容器与镜像(四【上】)章节。

    FROM maven:3.8.1 AS package
    
    ADD ./pom.xml pom.xml
    
    ADD ./src src/
    
    RUN mvn clean package
    
    FROM openjdk:8u102 AS JDK
    
    ENV TZ=Asia/Shanghai
    
    ENV JAVA_OPTS="-Xms512m -Xmx1024m -Djava.security.egd=file:/dev/./urandom"
    
    RUN ln -sf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
    
    COPY --from=package /target/springboot-docker-*.jar sbd.jar
    
    EXPOSE 8889
    
    CMD java $JAVA_OPTS -jar sbd.jar
    
    

    整个Dockerfile文件分为package阶段与JDK阶段。

  4. package阶段每一项命令到底做了什么?

  5. JDK阶段每一项命令到底做了什么?
    不难发现,Dockerfile文件中的操作,实际上是将人为的每一步操作变为命令,而解放生产力。

  6. 接着我们将该项目上传到服务器上(③ 此处可以在Dockerfile处增加一阶段即为从Github拉取代码到镜像中),进入到项目目录下(④ Dockerfile所在的目录,一般放在根目录),执行命令docker build -t spd:1.0 /home/ubuntu/springboot-docker/(有关docker build命令的相关说明请阅读LaoCat带你认识容器与镜像(四【下】)章节),可以看到每一层构建的信息,Maven阶段会比较浪费时间,前面已经说明过原因。

  7. 创建并启动该容器,执行命令docker run -d -p 8889:8889 --link=mysql8 --name spd spd:1.0

  8. 执行命令docker logs -f spd,可以通过日志看到项目已经成功启动。

  9. 接着我们通过IP加端口访问该容器。

※ 4环节图中①拓展:在编译打包项目时,Maven会对项目依赖进行下载,默认网速下,该步骤下载时间会随着项目依赖体量的增加而增加,有时还会因为项目依赖太大或项目依赖源在国外等情况,出现超时与失败,解决办法可以选择将Maven替换为Gradle或将编译打包阶段交给Jenkins或云厂商的流水线去执行;也可以选择将对应依赖下载到Maven私仓,将配置好的Maven打包为镜像,Dockerfile使用该Maven镜像为基础镜像来解决。

※ 5环节图中②拓展:为什么要用*来替换实际的版本呢?这是因为在实际生产环境中,Java项目版本号会随着业务的迭代更新而更新,每次发布都需要进入该文件去改一下版本号,并不是长久之计,故用正则*来匹配每次版本更新而变化的版本号。

※ 6环节③拓展:该方式并不推荐在实际生产环境中使用,一是会导致镜像文件体积变大,二是如果是一些国外的代码仓库会存在拉取失败或拉取慢的情况。一般建议结合代码仓库自身携带的CI控制台或结合云厂商的流水线,也可以通过Jenkins

※ 6环节④拓展:Dockerfile文件推荐放在项目的根目录下,这样方便在脑中形成一个清晰的项目上下文结构,Dockerfile文件的位置变动涉及到该文件中每项命令的变动,比如我们将该项目的Dockerfile文件放到一个新建的目录df下,对应ADDCOPY的命令都需要变动,及从ADD ./pom.xml pom.xml变为ADD ../pom.xml pom.xml


☆ 参考文献: \

◎ 文中所用到的资源链接: \

¤ LaoCat的Github:
https://github.com/Blackcat308

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值