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/
    
  • 相关阅读:
    sqlhelper使用指南
    大三学长带我学习JAVA。作业1. 第1讲.Java.SE入门、JDK的下载与安装、第一个Java程序、Java程序的编译与执行 大三学长带我学习JAVA。作业1.
    pku1201 Intervals
    hdu 1364 king
    pku 3268 Silver Cow Party
    pku 3169 Layout
    hdu 2680 Choose the best route
    hdu 2983
    pku 1716 Integer Intervals
    pku 2387 Til the Cows Come Home
  • 原文地址:https://www.cnblogs.com/pomelott/p/13235325.html
Copyright © 2011-2022 走看看