zoukankan      html  css  js  c++  java
  • dockerfile

    Docker 并不建议用户通过commit方式构建镜像,原因如下:

    1:这是一种手工创建镜像的方式,容易出错,效率低且重复性弱。

    2:使用者并不知道镜像是如何创建出来的,里面是否有恶意程序,存在安全隐患。

    用Dockerfile构建镜像,底层也docker commit 一层一层构建新镜像的。

    1.运行docker build命令,-t  将新镜像命名,末尾的.指名build context为当前目录,从当前目录下寻找Dockerfile,也可以用-f指定Dockerfile的位置。

    2.首先Docker将build context中的所有文件发送给Docker daemon。build context为镜像构建提供所需要的文件或目录。Dockerfile中的ADD,COPY等命令可以将build context中的文件添加到镜像。

    查看镜像分层结构

    docker history会显示镜像的构建历史。

    docker history centos-yum:latest

    镜像的缓存特性

    Docker会缓存已有镜像的镜像层,构建新镜像时,如果某镜像层已经存在,就直接使用,无需重新创建。

    如果我们希望在构建镜像时不使用缓存,可以在docker build命令中加上–no-cache参数。Dockerfile中每一个指令都会创建一个镜像层,上层依赖于下层,只要某一层发生变化,其上面的缓存都会失效。

    From

    功能为指定基础镜像,并且必须是第一条指令,如果不以任何为镜像,那么写法为:FROM scratch。

    FROM <image>
    FROM <image>:<tag>
    FROM <image>:<digset>

    FROM centos7

    RUN

    为运行指定的命令,有两种格式:(构建是就执行的命令)
    1:RUN 后面直接跟shell命令,linux中默认 /bin/sh -c
    2:RUN[“executable”,“param1”,“param2”] executable为可执行文件,后面是参数

    RUN yum -y install httpd

    RUN ["/bin/bash","-c","echo hello"]

    一定要注意:多行命令不要写多个run,建议使用换行符

    cmd

    容器启动时要运行的命令

    1.CMD [“executable”,“param1”,“param2”]
    2.CMD [“param1”,“param2”]
    3.CMD command param1 param2

    CMD ["ls,"/tmp"]

    注意:必须要用双引号

    LABEL

    为镜像指定标签

    LABEL <key>=<value>…
    如果有很多建议写到一行,用换行符

    LABEL com.example.vendor="caoyi"

    com.example.vendor2="caoyi1"

    ###:LABEL会继承基础镜像的LABEL,若key相同,则覆盖

    MAINTAINER

    指定作者

    MAINTAINER caoyi

    EXPOSE

    开放端口,必须在容器启动的时候加上-P参数

    EXPOSE 80

    ENV

    设置环境变量

    ENV 变量=参数 (可以一次设置多个)

    ENV ip=www.caoyi.com

    ADD

    复制命令,将文件复制到镜像中。

    ADD text.txt /tmp

    ADD   http://www.test.com/text.txt               /tmp

                         源地址                                   目标地址

    COPY

    COPY caoyi.txt /tmp

    ####:不支持url,并且如果复制的是一个包文件,会将其自动解包

    ENTRYPOINT

    (1)启动时的默认命令

    ENTRYPOINT [“executable”,“param1”,“param2”]
    ENTRYPOINT command param1 param2

    ENTRYPOINT ["ls","/tmp"]

    (2)也可以不加文件或目录

    ENTRYPOINT ["ls"]

    在容器启动时后面加上可执行文件

    docker run -it centos:latest /tmp

    与CMD一起使用时:可以查看CMD指定的文件或目录

    CMD ["/etc","/"]

    ENTRYPOINT ["ls"]

    ####:如果我们同时写了CMD与ENTRYPOINT,并且都是完整指令,那么会覆盖,谁在后面谁生效

    USER

    设置启动容器的用户

    USER daemo
    USER UID

    USER caoyi

    注意:如果设置了容器以daemon用户去运行,那么RUN,CMD,和ENTRYPOINT都会以这个用户去运行

    WORKDIR

    设置工作目录

    WORKDIR /caoyi

    对RUN,ENTRYPOINT,COPY,ADD生效。
    如果不存在则会创建,也可以设置多次

    WORKDIR /caoyi1

    WORKDIR /caoyi2

    WORKDIR /caoyi3

    RUN pwd

    执行结果是

    /caoyi1/caoyi2/caoyi3

    WORKDIR也可以解析环境变量

    ENV DIR /path

    WORKDIR $DIR

    ARG

    ARG 设置变量命令,ARG定义了一个变量,在docker build创建的时候,使用 --build-arg =来指定参数
    也可以给一个默认值

    ARG user1="caoyi"

    ONBUILD

    ONBUILD [INSTRUCTION]

    只对当前的子镜像生效

    ONBUILD RUN touch caoyi.txt

    STOPSIGNAL

    当容器退出时发送一个什么样的指定给系统

    HEALTHCHECk

    容器健康状况检查:

    1:HEALTHCHECK [OPTIONS] CMD command 是在容器内部运行一个命令来检查容器的健康状况

    2:HEALTHCHECK NONE第二个的功能是在基础镜像中取消健康检查命令

    [OPTIONS]的选项支持以下三中选项:

    --interval=DURATION 两次检查默认的时间间隔为30秒

    --timeout=DURATION 康检查命令运行超时时长,默认30秒

    --retries=N 连续失败指定次数后,则容器被认为是不健康的,状态为unhealthy, 默认次数是3

    注意: HEALTHCHECK命令只能出现次,如果出现了多次,只有最后一个生效。CMD后边的命令的返回值决定了本次健康检查是否成功,具体的返回值如下:

    0: success -表示容器是健康的
    1: unhealthy-表示容器已经不能工作了
    2: reserved -保留值

    HEALTHCHECK - - interval=5m --timeout=3s

    CMD curl -f http://localhost/ || exit 1

    健康检查命令是: curl -f http://localhost/ || exit 1 两次检查的间隔时间是5秒 命令超时时间为3秒

  • 相关阅读:
    比较实用的免费图标字库(转)
    聊聊 cursor鼠标样式
    (转)3款优秀的移动webAPP网站在线测试工具
    常用meta整理
    (转)SVN搭建(附下载地址)
    (转)C#串口SerialPort常用属性方法
    加载信息,先从数据库取出5条实现分页,鼠标向上滑动触发Ajax再加载5条,达到异步刷新,优化加载。。。
    图片上传,获取路径以及下载功能
    Mysql事务,并发问题,锁机制
    app中Webview实现下载表格
  • 原文地址:https://www.cnblogs.com/cy888888/p/12953264.html
Copyright © 2011-2022 走看看