Docker容器学习五之Dockerfile

一、语法

Docker中的镜像可以通过Dockerfile来构建,在第二节中,简单编写了一个Dockerfile文件,并成功生成了一个镜像。

FROM openjdk:8

LABEL author="cainiao1024"

COPY docker-1.0.jar my-sp-docker.jar

CMD ["java","-jar","my-sp-docker.jar"]

本文,将围绕着Dockerfile相关语法进行说明。

FROM: 意思是当前镜像需要什么镜像的支持 ,比如第二节中的springboot项目,需要jdk支持,一般也是一个Dockerfile最开始的语句,其中只有ARG这个语句可以在FROM之前定义

ARG: 这是一个参数语句,也就是可以定义一个全局变量,后续语句中可以使用这个全局变量:ARG
CODE_VERSION=latest,那么其他地方就可以通过${CODE_VERSION}来引用

RUN: 有两种运行模式一种是shell模式,一种是exec模式,shell模式就是后边直接跟着shell命令,exec模式就是RUN ["/bin/bash", “-c”, “echo hello”],默认下run的执行结果,会被下一次build使用,如果不希望缓存结果可以使用docker build --no–cache

CMD: 这是在启动容器时,一个默认的执行的命令,如果Dockerfile中存在多个CMD命令,那么最后一个才会生效,其它将是无效的,也就是说只能有一个CMD,当我们在运行容器的时候,传入了启动命令,那么也会覆盖这个命令,它有如下三种执行模式:
在这里插入图片描述
RUN是在构建镜像的时候执行的,而CMD是在启动容器的时候执行的,要做区分。

LABEL: 标签属性,可以给镜像打上相关标签LABEL key=value key= value …,键值对的形式出现,子镜像会继承父镜像的标签属性,如果存在相同的标签名,那么最近的将覆盖之前的。可以通过docker image inspect --format=’’ image来查看当前image支持的标签属性

MAINTAINER: 是deprecated状态,也就是未来可能被移除,这个命令是用来表示当前的所属者,也可以用LABEL命令来代替

EXPOSE: 这个命令是告诉Docker当前容器是监听在哪个端口上,采用的是什么协议(TCP/UDP)但是不进行端口发布,如果想映射到物理主机上的某个端口还是需要-p命令在运行时。

ENV: ENV key=value,也是键值对的形式出现,设置一个环境变量,可以在运行容器的时候进行替换 --env

ADD: 这个语句也有两种格式
在这里插入图片描述
这个语句是复制主机文件或者远程文件,到镜像文件中,如果源文件是一个目录,则会复制目录下所有文件,但是不会复制目录本身,文件名也支持GO的正则匹配,目标地址必须是一个绝对地址,或者是一个相对工作目录的相对地址。

COPY: 这个语句也有两种格式
在这里插入图片描述
这个语句和ADD几乎一致,不同点在于不能复制远程文件

ENTRYPOINT: 有两种执行方式shell和exec,也是配置容器启动后,执行的指令,不可被docker run提供的参数覆盖,但是CMD可以,如果想覆盖需要–entrypoint,也是只能有一个,多余的会被覆盖

VOLUME: 可以创建一个本地主机和各容器的挂载点,可以理解为一个共享目录

**USER:**添加用户或者UID给容器,后续的RUN 、CMD、 ENTRYPOINT也会用到这个用户

WORKDIR: 可以为后续的为后续的RUN、CMD、ENTRYPOINT、COPY语句配置工作目录,可以使用多个WORKDIR命令,如果后续的是相对路径,则会进行拼接,如下得到的结果会是/a/b/c
在这里插入图片描述
也可以引用环境变量
ENV DIR=/path
WORKDIR $DIR/a
那么此时的工作目录是/path/a

ONBUILD: 这个语句的意思,如果当前的镜像是其它镜像的父镜像,那么可以配置相应的执行语句,提供给新的进行去执行
假设镜像A配置了
ONBUILD WORKDIR /p
此时镜像B有引入了镜像A,那么镜像b在构建的时候就会执行WORKDIR /p这个命令

STOPSIGNAL: 这个语句是配置一个信号,可以让docker发送一个信号给容器使容器停止,也可以通过–stop-signal来覆盖

HEALTHCHECK: 基于docker和容器间设置一个心跳检测,如下所示:
在这里插入图片描述
这个语句的意思就是,间隔五分钟检测一下,在3秒的超时时间内,能否得到web服务的响应,如果没有1表示当前容器工作不正常,0表示当前容器一切正常,2表示不用exit code

SHELL: 这个命令表示设置当前要执行的语句使用的是那种shell格式比如windows和linux是不一样的
在这里插入图片描述

二、总结

以上就是Dockerfile语句的大致介绍,最终还是需要进一步的实战才能更好的掌握。

以上,有任何不对的地方请指正,谢谢!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

菜鸟+1024

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值