zoukankan      html  css  js  c++  java
  • 用前端姿势玩docker【二】dockerfile定制镜像初体验

    目录

    前言

    书接上文,关于dockerfile指令的api在此处不做赘述,在此只是记录下注意事项: ‘示坑以埋之’。

    配置指令

    FROM

    • dockerfile必须以此开头
    • 一个dockerfile可执行添加多个FROM

    ARG

    • 单纯的docker build执行过程的局部变量,在容器内部会被销毁
    • 常用来定义常量数据,例如版本等等

    LABEL

    • label的作用只是用来便于做搜索推荐、提示等,类似元信息、元标签。
    • 多个label多行展示
    LABEL name=tate
    LABEL area=China
    

    EXPOSE

    • 只声明镜像内监听的服务端口,不做映射处理 EXPOSE 22 80 8443

    ENV

    • 环境变量,在后续RUN中被调用,容器中会被保留。 ENV APP_HOME=/usr/local/app
    • 若遇到相同变量,在Run命令中会被覆盖掉 docker run --env APP_HOME=/usr/local/app

    ENTRYPOINT

    # ENTRYPOINT ["executable", "paraml ", "param2"]: exec 调用执行;
    # ENTRYPOINT command param 1 param2: shell 中执行。
    
    • 指定镜像的默认入口命令,该入口命令会在启动容器时作为根命令执行, 所有传人值作为该命令的参数。
    • CMD指定的值将作为根命令的参数传递
    • 单个dockerfile中定义多个入口时,只有最后一个生效。
    • 同样可被run中的 --entrypoint 参数覆盖

    VOLUME

    • 创建数据挂载点 VOLUME ["/data"]

    USER

    • 指定运行容器的user,需要获取管理员临时权限时使用gosu命令

    WORKDIR

    • 为后续的 RUN CMD ENTRYPO INT 指令配置工作目录
    • 多行命令执行结果累加, 建议使用绝对路径
    WORKDIR /a 
    WORKDIR b 
    WORKDIR c 
    RUN pwd
    # 结果为 /a/b/c
    

    ONBUILD

    • 基于所生成镜像创建子镜像时,自动执行的操作指令。
    • 使用 docker build 命令创建子镜像 childImage 时( FROM ParentImage ),会首先执行 Parent mage 配置的 ONBUI LD,相当于在子镜像的dockerfile中添加相应的指令。
    • 主要用于创建专门用于自动编译、检查等操作的基础镜像。

    STOPSIGNAL

    • 指定所创建镜像启动的容器接收退出的信号值

    HEALTHCHECK

    • 配置所启动容器如 进行健康检查
      HEALTHCHECK [OPTIONS] CMD command :根据所执行命令返回值是否为0判断
      HEALTHCHEC NONE : 禁止基础镜像中的健康检查
      OPTION 支持如下参数
      —interva=DURAT (d e fault: 30s ):过多久检查一次
      —timeout=DURATION (default: 30s): 每次检查等待结果的超时;
      —retries=N (default:3 ):如果失败了,重试几次才最终确定失败

    SHELL

    • 指定其他命令使用 shell 时的默认 shell 类型
    • 默认值 SHELL ["/bin/sh", "-c"]
    • windows 系统中,shell 使用了“\”作为分隔符,建议在 Dockerfile 开头添加#escape=' 指定转义符

    操作指令

    RUN

    • 格式为 RUN <command >或 RUN [ "executable " , "paraml", "param2"] 注意意后者指令会被解析为 JSON 数组,因此必须用双引号,前者默认将在 shell 终端中运行命令,即 '/bin/bash -c' 后者则使用 exec 执行,不会启动 shell 环境。
    • 指定使用默认终端 RUN ["/bin/bash", "-c", "echo tate"]
    • 每执行一条RUN命令, 镜像就会被追加一个镜像层,其实就是一个RUN命令就是一个独立的执行结果

    CMD

    • CMD 指令用来指定启动容器时默认执行的命令
    • 支持三种格式:
    1. CMD ["executable", "param1", "param2"]:相当于执行 executable param1 param2, 此方式较为推荐;
    2. CMD command paraml param2 :在默认的 Shell 中执行,提供给需要交互的应用;
    3. CMD ["param1", "param2"]: 提供给 ENTRYPOINT 的默认参数

    ADD

    • 添加指定路径下的内容到容器中 ADD
    • src可为文件目录,也可为url,或一个tart文件(自动解压为目录)
    • dest可以使绝对路径,也可以是相对于当前工作目录的相对路径

    COPY

    • 复制内容到路径 COPY , 多用于本地目录为源目录时。
    • src 为dockerfile所在目录的相对路径
    • 目标路径不存在时会自动创建
    • 路径支持正则表达式

    体验尝鲜

    基于alpine定制

    FROM alpine
    ARG author=tate
    RUN touch /root/docker.txt
    COPY copy.sh /root/
    
  • 相关阅读:
    C# 托管内存与非托管内存之间的转换
    A*算法详解链接
    【转】使用minizip解压缩多个文件(基于zlib)
    lua中table的遍历,以及删除
    clientHeight scrollHeight offsetHeight
    消息中间件(转)
    js 原型链和继承(转)
    session 和 cookie (转)
    java servlet
    redis 命令
  • 原文地址:https://www.cnblogs.com/pomelott/p/13235325.html
Copyright © 2011-2022 走看看