SpringBoot项目 使用Dockerfile创建镜像与容器

颜书凌 2024-06-18 12:07:03 阅读 63

一、部署准备

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

需要以下环境支持

1、maven环境

2、java环境

3、springboot项目

maven环境

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

java环境

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

springboot项目

先来简单创建一个springboot项目

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

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

然后使用打包命令 mvn package

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

右击新建一个dockerfile文件

来简单介绍一下dockerfile文件

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

DockerFile内容基础知识

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

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

3、#表示注释

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

1、Docker执行DockerFile的大致流程

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

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

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

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

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

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

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

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

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

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

# 可以从阿里云的容器镜像服务中 找到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文件上传到自己新建好的目录

进入主目录

cd /#进入主目录

创建文件夹

mkdir yuan

进入自己创建好的目录

用的最多的一种方式

docker build -t 镜像名:tag .

参数用的比较多的就是

-t:给镜像打标签-f:指定某个文件来构建镜像,不指定的话那必须是默认的Dockerfile,名字可以通过-f来更改–target:指定阶段构建,对应多阶段构建的场景

使用 docker build -t server:1.0.0 .#打成镜像 -t是给他指定一个标签

注:后面的点不要忘记了

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

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

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

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

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

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

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

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

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

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

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

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

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



声明

本文内容仅代表作者观点,或转载于其他网站,本站不以此文作为商业用途
如有涉及侵权,请联系本站进行删除
转载本站原创文章,请注明来源及作者。