什么是Dockerfile
Dockerfile可以认为是Docker镜像的描述文件,是由一系列命令和参数构成的脚本。主要作用是用来构建docker镜像的构建文件。
以下是本篇文章正文内容,如果某些知识点错误 请指正!谢谢
官方说明:https://docs.docker.com/engine/reference/builder/
将从构建上下文目录中<原路径>的文件/目录复制到新的一层的镜像内的<目标路径>位置
Dockerfile中可以有多个CMD指令,但只有最后一个生效,CMD会被docker
ENTRYPOINT的目的和CMD一样,都是在指定容器启动程序及其参数
1.3.1 FROM 命令
-
基于那个镜像进行构建新的镜像,在构建时会自动从docker hub拉取base镜像 必须作为Dockerfile的第一个指令出现
-
语法:
1.3.2 MAINTAINER 命令
-
镜像维护者的姓名和邮箱地址[废弃]
-
语法:
1.3.3 RUN 命令
-
RUN指令将在当前映像之上的新层中执行任何命令并提交结果。生成的提交映像将用于Dockerfile中的下一步
-
语法:
1.3.4 EXPOSE 命令
-
用来指定构建的镜像在运行为容器时对外暴露的端口
-
语法:
1.3.5 CMD 命令
-
用来为启动的容器指定执行的命令。
-
注意: Dockerfile中只能有一条CMD指令。如果列出多个命令,则只有最后一个命令才会生效。
-
语法:
1.3.6 WORKDIR 命令
-
用来为Dockerfile中的任何RUN、CMD、ENTRYPOINT、COPY和ADD指令设置工作目录。如果WORKDIR不存在,即使它没有在任何后续Dockerfile指令中使用,它也将被创建。
-
语法:
1.3.7 ENV 命令
-
用来为构建镜像设置环境变量。这个值将出现在构建阶段中所有后续指令的环境中(相当于将公共的抽离出来了)。
-
语法:
1.3.8 ADD 命令
-
用来从context上下文复制新文件、目录或远程文件url,并将它们添加到位于指定路径的映像文件系统中。
-
语法:
1.3.9 COPY 命令
-
用来将context目录中指定文件复制到镜像的指定目录中
-
语法:
1.3.10 VOLUME 命令
-
docker run 命令的-v标识创建的挂载点只能对创建的容器有效
-
通过doakerfile的 VOLUME指令可以在镜像中创建挂载点,这样只要通过该镜像创建的容器都有了挂载点
-
通俗讲:通过 VOLUME 指令创建的挂载点,在通过该镜像创建容器的时候无法指定主机上对应的目录,因为它是自动生成的
1.3.11 ENTRYPOINT命令
-
用来指定容器启动时执行命令和CMD类似
-
语法:
ENTRYPOINT指令,往往用于设置容器启动后的第一个命令,这对一个容器来说往往是固定的。
CMD指令,往往用于设置容器启动的第一个命令的默认参数,这对一个容器来说可以是变化的。
通常这两个指令联合使用,ENTRYPOINT用于指定固定命令,而CMD设置默认参数(这个参数是可变的,根据用户输入的参数而决定)
总结:ENTRYPOINT用来写固定的命令,CMD用来传参,将来可以将java项目的固定命令(java -jar)写在ENTRYPOINT中(ENTRYPOINT[“java”, “-jar”] ),而jar包名字可以当作参数传进来(CMD[“xxx.jar”])。
1.准备springboot项目,准备完毕测试成功,然后将该项目打包成jar包
2.将可运行项目的jar包放入linux虚拟机中
2.1.1 编写Dockerfile
2.1.2 构建镜像
2.1.3 运行镜像
2.1.4 查看项目部署是否成功
2.1.4.1 查看虚拟机IP地址
2.1.4.2 查看springBoot项目接口
2.1.4.3 成功访问hello接口
2.1.4.4 查看项目日志
还有一种使用IDEA SFTP远程连接直接可以项目的jar包放入linux虚拟机中、编写Dockerfile文件(还自带提示,前提是安装了Dockerfile插件)
2.2.1 创建一个springBoot的项目,创建时只需勾选web依赖(目录结构如下)
2.2.2 安装Docker插件
2.2.2 进行SFTP连接虚拟机或者是自己的个人服务器
2.2.3 将springboot项目生成jar包
打开IDEA左下角的Terminal 执行如下命令
mvn package