使用docker简单来说就三步:1.构建镜像、2.获取镜像、3.基于镜像启动容器。大多数人工作中可能只会用到后两步,但真正学会docker第一步也是必不可少的!
构建镜像离不开Dockerfile
,本文就来解析Dockerfile
中各种指令的作用。
提示:本文基于本人使用经验编写,如有错误欢迎指正,附【官方Dockerfile参考文档】!
之前写过一个简单的实例,可以参考:Dockerfile构建Springboot镜像
基础作用:添加镜像的一些自定义说明,如:作者、时间、镜像描述等等一些自己觉得有必要的东西。
示例
示例中的key是自定义的,如果你觉得
author.name
没必要,完全可以改成author
,这是完全自定义的。
dockerfile# 作者名 LABEL author.name="DingDangDog" # 作者邮箱 LABEL author.email="[email protected]" # 项目名 LABEL project.name="cashbook-server" # 项目版本 LABEL project.version="0.0.1" # 项目描述 LABEL project.description="this project is cashbook's server"
基础作用:以某个镜像为基础,构建自定义镜像。如:FROM openjdk:8-jdk
:以openjdk
镜像的8-jdk
版本为基础。
高级使用:有时我们会发现一个Dockerfile
文件中有个多个FROM
指令,这既是高阶使用。使用多FROM指令可以完成多阶段编译,每一条FROM
指令都是一个构建阶段,多条FROM
就是多阶段构建,虽然最后生成的镜像只能是最后一个阶段的结果,但是,能够将前置阶段中产生的文件拷贝到后边的阶段中,这就是多阶段构建的最大意义。
基础作用:设置环境变量。可以在编译时就设置一些环境变量的默认值,在镜像内部的容器中可以读到这些环境变量值,如现在大多数前端node项目使用的process.env.***
。
拓展:环境变量在启动容器的命令中也可以指定,并会覆盖构建脚本Dockerfile
中的默认值。如:docker run --env env=dev -d -p 8888:8080 balance
,其中--env env=dev
就是设置环境变量env
的值为dev
。
sh
脚本,常见用法是安装一些三方工具包,以拓展镜像支持的功能。如更新 apt-get
并安装某些工具包:DockerfileRUN apt-get update && apt-get install -y package-name
DockerfileCOPY ./local-dir /app/
DockerfileADD https://example.com/file.tar.gz /app/
ENTRYPOINT [ "node", "./dist/main.js" ]
与 CMD 不同的是,ENTRYPOINT 指令的参数不会被 Dockerfile 中的 CMD 覆盖,而是作为 ENTRYPOINT 的参数。
EXPOSE 8080
VOLUME /data
以上这些指令是 Dockerfile 中常用的一些指令,可以根据具体需求灵活使用,要想体会指令的实际作用,还需要你自己动手取实践!
建站因为热爱,生活需要Money,请屏幕前的大佬动动您发财的小手,点击一次以示鼓励,祝您生活愉快!
PS:就目前的访问量,即便每个访客都点一次广告,收入也不足以支付运营成本。
如果看不到广告,可能是网络原因或被拦截了,那就算了吧。再次祝您生活愉快~~
本文作者:DingDangDog
本文链接:
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!