Dockerfile基础

Docker镜像是层级的,且可复用。Dockerfile每一行语句生成一层。

docker build -t images_tage . 


执行过程:    

    提取Dockerfile,对其内容按行进行分析。
    执行每一行命令,每执行一行命令,其执行方式均为:
        以当前镜像运行容器;执行bash命令;创建新一层;删除容器;在新的一层基础上执行下一行。
    -t    指定其标签
    . 构建镜像的上下文路径。
docker采用C/S架构,所以docker build 实际是在服务端中构成,而构镜像是通常会用到其他文件,所以就需要指定上下文路径,在发送docker build后将指定路径中的文件打包发给服务端。如果该目录下有些文件不希望发送给服务端,则写一个文件.dockerignore来剔除指定文件。文件中直接指定忽略文件即可,可进行模式匹配。例:*/temp*指指定目录下所有二级目录中以temp开头的文件。

#开头进行注释
FROM 镜像名称        --Dockerfile第一句,指定基础镜像
    scratch     空白镜像,当程序执行所需要的库都在可执行文件中时,可以使用此镜像构建,以使镜像体积更加小巧


RUN              --执行命令行命令
    shell格式:RUN <命令>
    exec格式: RUN [“可执行文件”,"参数1","参数2"]
    因为每一句RUN都会生成一个新的镜像层,所以尽量将相同的命令写在一个RUN下。
    要注意构建每一层时保证添加的文件都是有用的,不要有冗余。


COPY <源路径> <目标路径>    --复制文件
    目标路径可以是绝对路径,也可以是相对于工作路径的相对路径,文件连同其元数据一同复制。


CMD            容器启动命令,若启动容器时指定命令,则该命令被覆盖,指定命令作为CMD内容被执行
    shell格式: CMD <命令>
    exec格式:  CMD ["可执行文件","参数1","参数2"]
    容器是一个进程,而不是一个虚拟机,所以没有前台或后台之分。
    所以不能使用CMD systemcl start nginx,因为这会转化为CMD ["sh","-c","systemctl start nginx"]
    执行完程序,sh就退出了,nginx也就退出了。
    所以,正确方式应为CMD ["nginx","-g","daemon off;"]


ENTRYPOINT        入口点
    如果指定该选项,则CMD的内容将作为参数传给ENTRYPOINT的命令。


ENV            设置环境变量
    格式:ENV <key> <value>
          ENV <key1>=<value1> <key2>=<value2>·····


VLPLUME            指定匿名卷
    VOLUME ["<路径1>","<路径2>","<路径3>"····]
    VOLUME <路径>
    容器运行时,最好不要将数据写在容器存储层,应该保存在卷中。为防止用户运行容器时忘记设置,可以在dockerfile
    中设置匿名卷。运行容器指令可覆盖设置。


EXPOSE            声明暴露端口
    EXPOSE <端口1> [<端口2>·····]
    仅用作声明,不会自动开启该端口的服务。用于帮助镜像使用者理解镜像服务的守护端口以及在使用-P时自动映射到该端    口。


WORKDIR            指定工作目录
    WORKDIR <工作目录路径>


USER            指定当前用户
    USER <用户名>
    该用户必须是事先建立好的


HEALTHCHECK        健康检查
    HEALTHCHECK [选项] CMD <命令>
    可以通过该指令来检查容器运行状态,查看服务是否正常。
    用该指令构建的镜像,用其启动容器,初始状态为starting,指令检查成功后为healthy,如果连续一定次数失败则会变    为unhealthy。
    --interval=<间隔>  两次健康检查的间隔,默认为30s
    --timeout=<时长>   健康检查命令失败认定时间,默认30s
    --retrise=<次数>   失败次数超过次次数,则unhealthy


ONBUILD            以此镜像为基础镜像时执行的指令
    ONBUILD    <其他指令>
    此指令后面跟的是RUN,COPY等其他指令,这些指令是在以此次构建的镜像为基础构建镜像时执行的命令。

可以用

docker history image_id/image_tag

来查看构建镜像的历史命令。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值