全栈小白
2023-03-19 20:45:42
【docker】- Dockerfile技术
本期我们来说一说docker中的DockerFile
Dockerfile就是用来帮助我们构建一个自定义镜像的构建文件,是一个文件,那为什么要去构建镜像呢?DockerHub上提供的镜像不够吗?
当然不是,因为有些镜像无法满足我们的需求,举个例子吧,好比java项目的运行,大伙都知道,java项目打包方式一般会有两种,war和jar,war就比较简单了,扔到tomcat容器的webapps目录下就可以了,那jar呢?
jar包的部署就需要我们自己构建镜像了,jar运行需要jdk,那么我们就需要在这台机器中安装jdk
还会有这种情况哈,我们说过,docker容器类似于一个十分精简的linux机器,那么大家有没有发现,我们自己运行的tomcat、nginx等容器中都没有vim、ifconfig等命令,那我们想要编辑文件就难上加难了,有些小伙伴可能会说,我yum install vim不就行了,那么请看下图
不好意思,yum也没有,有些开发者会基于原有的镜像进行扩展,安装一些需要的软件
下面我们以部署jar的例子来说,学完你也可以用docker部署java项目
操作步骤
DockerFile指令,其实并用不到这么多
FROM #基础镜像,一切从此处开始构建 MAINTAINER #镜像是谁写的,姓名+<邮箱> RUN #镜像构建的时候需要运行的命令 ADD #步骤,tomcat镜像,tomcat的压缩包!添加内容,会自动解压,可以写url地址,但是不解压 WORKDIR #镜像的工作目录,可以写多个,第二个写相对路径,相对上一个 VOLUME #挂载的目录 EXPOSE #暴露的端口 CMD #指定这个容器启动时运行的命令,只有最后一个会生效,可被替代 ENTRYPOINT #指定这个容器启动时要运行的命令,可以追加 COPY #类似ADD,将文件copy到镜像中 ENV #构建的时候设置的环境变量
构建命令
docker build -f Dockerfile -t cxs/centos:1.0 . -f # Dockerfile文件地址,如果是官方推荐文件名,可以省略 -t:[tag] # 目标镜像名,及版本号
下面我们以部署java的jar项目为例,来构建一个镜像
首先准备一个jar包,(在本地已经创建了一个Springboot项目,写一个hello的接口,打成jar包,上传至linux机器)
编写Dockerfile文件
FROM java:8 # 运行jar项目要基于jdk,可以提前通过docker pull拉好 ADD hello-world.jar hello-world.jar # 将hello-world.jar添加到容器中 EXPOSE 2023 # 声明端口2023 ENTRYPOINT ["java","-jar","hello-world.jar"] # jar包运行命令,中间以,分开,还可以加jvm调优参数 CMD ["--server.port=2023"] # 运行命令,可以在运行的时候被覆盖
Dockerfile
开始构建
docker build -t hello-world:1.0 .
注意:
-
文件名叫Dockerfile时-f参数可以省略
-
末尾有个.
评论

微信公众号-Java驿站 LV6
3月1日
流水本无情 LV9
2024年3月13日
wenMN1994 LV13
2024年2月6日
shy2850 LV4
2023年11月10日
deluser LV3
2023年10月3日
小新Coding LV9
2023年10月2日
527301883 LV1
2023年9月8日
凌秋枫 LV8
2023年8月28日
Sean_admin LV7
2023年8月22日
yuyiyuyi LV6
2023年8月2日