SpringBoot项目 使用Dockerfile创建镜像与容器
作者:mmseoamin日期:2024-04-01

一、部署准备

这里我使用的是云服务器,Centos7-Linux操作系统

需要以下环境支持

1、maven环境

2、java环境

3、springboot项目

maven环境

可以去我这个博客了解''配置MAVEN环境-CSDN博客''

java环境

可以去'' java环境变量配置-CSDN博客''

springboot项目

先来简单创建一个springboot项目

SpringBoot项目 使用Dockerfile创建镜像与容器,第1张

一、进入IDEA的终端
使用mvn clean

SpringBoot项目 使用Dockerfile创建镜像与容器,第2张

日志中有BUILD SUCCESS就算是成功了

SpringBoot项目 使用Dockerfile创建镜像与容器,第3张

然后使用打包命令 mvn package

SpringBoot项目 使用Dockerfile创建镜像与容器,第4张

完成之后你的target目录下会后会生成一个jar包

SpringBoot项目 使用Dockerfile创建镜像与容器,第5张

右击新建一个dockerfile文件

SpringBoot项目 使用Dockerfile创建镜像与容器,第6张

来简单介绍一下dockerfile文件

DockerFile是用来构建Docker镜像的文本文件,是一条条构建镜像所需要的指令和参数构成的脚本

DockerFile内容基础知识

1、每条保留字指令都必须为大写字母且后面要跟随至少一个参数

2、指令按照从上向下,顺序执行

3、#表示注释


每个指令都会创建一个新的镜像层并且对于镜像进行提交

1、Docker执行DockerFile的大致流程

2、Docker从基础镜像运行一个容器

3、执行一条指令并且对于容器做出修改

4、执行类似docker commit的操作提交一个新的镜像层

5、Docker再基于刚提交的镜像运行一个新的容器

6、执行DockeFile 中的下一条指令直到所有指令都执行完成

以下是一些dockerfile文件中的命令

  1. FROM :指定基础镜像
  2. MAINTAINER :维护者信息
  3. RUN :构建镜像时所需要执行的命令
  4. CMD :用于容器在真正运行后所需要执行的命令,CMD 和 RUN 其实都是执行命令,但是 CMD 用于最后面 注:每个 Dockerfile 只能有一条 CMD 命令。如果指定了多条 CMD 命令,只有最后一条会被执行。
  5. ENTRYPOINT :其实和 CMD 差不多,具体区别:CMD # 指定容器启动时要执行的命令,只有最后一个会生效,可被替代 ;ENTRYPOINT # 指定容器启动时 要执行的命令,可以追加命令。注:每个 Dockerfile 只能有一条 ENTRYPOINT命令,如果指定了多条 ENTRYPOINT 命令,只有最后一条会被执行。
  6. ADD :复制文件或目录到容器,如果是压缩文件,会自动解压
  7. COPY :拷贝文件到容器内,与 ADD 一样但不能解压
  8. LABEL :用于为镜像添加元数据,一个标识
  9. ENV :设置环境变量
  10. EXPOSE :指定于外界交互的端口
  11. VOLUME :文件挂载,容器与宿主机之间的文件共享功能,等同于 docker run 时的参数-v
  12. WORKDIR :工作目录相当于 cd
  13. USER :指定运行容器时的用户名ARG :设置变量
  14. ONBUILD :该指令只有在当该镜像被用作其他镜像的基础镜像时,才会生效

FROM 我们这里去阿里云容器镜像去找openjdk

SpringBoot项目 使用Dockerfile创建镜像与容器,第7张

SpringBoot项目 使用Dockerfile创建镜像与容器,第8张

这里根据自己的jdk版本进行选择

SpringBoot项目 使用Dockerfile创建镜像与容器,第9张

SpringBoot项目 使用Dockerfile创建镜像与容器,第10张

小伙伴们可以复制下面这个,然后简单更改成自己的项目信息就可以使用了

# 可以从阿里云的容器镜像服务中 找到openjdk,选择相对应的版本
FROM anolis-registry.cn-zhangjiakou.cr.aliyuncs.com/openanolis/openjdk:17-8.6
# 作者
LABEL authors="Shuling Yan"
# 构建镜像时所需要执行的命令,这里作者是在容器内部创建了一个工作目录
RUN mkdir "/home/test"
# 这里就是进入创建好的目录
WORKDIR "/home/test"
# 将打包后的jar包复制到指定目录(这里我是复制到了创建好的工作目录)下,并重命名
COPY ./yanshuling-0.0.1-SNAPSHOT.jar /home/test/yuan.jar
# 运行命令 
CMD ["java","-jar","/home/test/yuan.jar"]

这里作者使用的是FinalShell来操作,将打包好的jar包和dockerfile文件上传到自己新建好的目录

SpringBoot项目 使用Dockerfile创建镜像与容器,第11张

进入主目录

cd /
#进入主目录

创建文件夹

mkdir yuan

SpringBoot项目 使用Dockerfile创建镜像与容器,第12张

进入自己创建好的目录

SpringBoot项目 使用Dockerfile创建镜像与容器,第13张

  • 用的最多的一种方式

    docker  build  -t 镜像名:tag  . 
    
  • 参数用的比较多的就是

    • -t:给镜像打标签
    • -f:指定某个文件来构建镜像,不指定的话那必须是默认的Dockerfile,名字可以通过-f来更改
    • –target:指定阶段构建,对应多阶段构建的场景
    使用 docker build -t server:1.0.0 .
    #打成镜像 -t是给他指定一个标签

    注:后面的点不要忘记了

    #docker build 最后的 . 号,其实是在指定镜像构建过程中的上下文环境的目录

    SpringBoot项目 使用Dockerfile创建镜像与容器,第14张

    docker images 查看一下镜像,已经可以看到我们所构建好的镜像了

    SpringBoot项目 使用Dockerfile创建镜像与容器,第15张

    然后使用启动容器的命令运行完之后,项目也就在服务器上部署完成了

    SpringBoot项目 使用Dockerfile创建镜像与容器,第16张

    docker run: 创建一个新的容器并运行

    -d:后台运行容器,并返回容器ID

    --name:为容器指定一个名称

    -p: 指定端口映射,格式为:主机(宿主)端口:容器端口。我这里使用的是8080,小伙伴们可以使用别的,但是别忘记了在服务器防火墙哪里一定要将这个端口开放,不然是访问不了的

    最后的server:1.0.0使用的就是我们当时构建好的镜像

    我们使用docker ps 查看一下这个容器是否运行正常

    这里的up状态说明容器启动成功!

    SpringBoot项目 使用Dockerfile创建镜像与容器,第17张

    我们可以去通过服务器ip+刚才指定的端口,加自己的方法上的路径就可以访问了

    SpringBoot项目 使用Dockerfile创建镜像与容器,第18张

    和我们在idea中写好的代码一样

    SpringBoot项目 使用Dockerfile创建镜像与容器,第19张

    至此就结束啦,希望这个可以帮到你们