前言

书接上文,关于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/

用前端姿势玩docker【二】dockerfile定制镜像初体验的更多相关文章

  1. 用前端姿势玩docker【四】基于docker快速构建webpack的开发与生产环境

    目录 用前端姿势玩docker[一]Docker通俗理解常用功能汇总与操作埋坑 用前端姿势玩docker[二]dockerfile定制镜像初体验 用前端姿势玩docker[三]基于nvm的前端环境构建 ...

  2. 用前端姿势玩docker【五】快速构建中类Unix系统与Windows系统的差异化处理

    目录 用前端姿势玩docker[一]Docker通俗理解常用功能汇总与操作埋坑 用前端姿势玩docker[二]dockerfile定制镜像初体验 用前端姿势玩docker[三]基于nvm的前端环境构建 ...

  3. Docker用Dockerfile定制镜像

    用Dockerfile定制镜像 镜像的定制实际上就是定制每一层所添加的配置.文件.如果我们可以把每一层修改.安装.构建.操作的命令都写入一个脚本,用这个脚本来构建.定制镜像,那之前提示的无法重复的问题 ...

  4. 用前端姿势玩docker【一】Docker通俗理解常用功能汇总与操作埋坑

    前言 首先一句话表达个人对docker的理解:与传统虚拟技术基于硬件及物理资源的虚拟化相比,Docker更加轻量化,docker为基于操作系统或内核级别的虚拟化,并且提供了从各种机制与操作以满足从开发 ...

  5. 用前端姿势玩docker【三】基于nvm的前端环境构建技巧

    前言 安装docker啥的就不说了,这里重点强调一下,docker的环境问题.本人的环境: 虚拟机centos => docker => NAT => container 因为需要不 ...

  6. Docker 学习笔记(二):Dockerfile 定制镜像

    镜像的定制实际上就是定制每一层所添加的配置.文件. 如果我们可以把每一层修改.安装.构建.操作的命令都写入一个脚本,用这个脚本来构建.定制镜像,那么之前提及的无法重复的问题.镜像构建透明性的问题.体积 ...

  7. Docker Dockerfile 定制镜像

    使用 Dockerfile 定制镜像  镜像的定制实际上就是定制每一层所添加的配置.文件.如果我们可以把每一层修改.安装.构建.操作的命令都写入一个脚本,用这个脚本来构建.定制镜像,那么无法重复的问题 ...

  8. Dockerfile定制镜像

    一.Dockerfile是什么? 镜像定制实质就是定制每一层所添加的配置.文件. Dockerfile就是一个脚本来构建和定制镜像,把每一层的修改.安装.构建.操作都写入脚本.以此来解决体积.镜像构建 ...

  9. 利用dockerfile定制镜像

    利用dockerfile定制镜像 镜像的定制就是定制每一层所添加的配置.文件.如果可以吧每一层修改.安装.构建.操作的命令都写入到一个脚本,用脚本来构建.定制镜像,这个脚本就是dockerfile. ...

随机推荐

  1. 浅谈typeof 和instanceof

    typeof vs instanceof 涉及面试题:typeof 是否能正确判断类型?instanceof 能正确判断对象的原理是什么? typeof 对于原始类型来说,除了 null 都可以显示正 ...

  2. Spring中基于xml的AOP

    1.Aop 全程是Aspect Oriented Programming 即面向切面编程,通过预编译方式和运行期动态代理实现程序功能的同一维护的一种技术.Aop是oop的延续,是软件开发中的 一个热点 ...

  3. Spring Boot项目使用Swagger2文档教程

    [本文版权归微信公众号"代码艺术"(ID:onblog)所有,若是转载请务必保留本段原创声明,违者必究.若是文章有不足之处,欢迎关注微信公众号私信与我进行交流!] 前言 Sprin ...

  4. 手把手教你基于SqlSugar4编写一个可视化代码生成器(生成实体,以SqlServer为例,文末附源码)

    在开发过程中免不了创建实体类,字段少的表可以手动编写,但是字段多还用手动创建的话不免有些浪费时间,假如一张表有100多个字段,手写有些不现实. 这时我们会借助一些工具,如:动软代码生成器.各种ORM框 ...

  5. mysql经典面试必须知道的

    http://www.cnblogs.com/wangshouchang/p/6930443.html 在华三的时候就问道了数据集的事务的四种特性,事务的隔离级别,事务的存储过程等

  6. 基于层级表达的高效网络搜索方法 | ICLR 2018

    论文基于层级表达提出高效的进化算法来进行神经网络结构搜索,通过层层堆叠来构建强大的卷积结构.论文的搜索方法简单,从实验结果看来,达到很不错的准确率,值得学习   来源:[晓飞的算法工程笔记] 公众号 ...

  7. springboot的jar为何能独立运行

    欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS ...

  8. 简单几步让CentOS系统时间同步

    在使用CentOS系统的时候,我们可能会遇到时间不准的问题,那我们如何解决这个我问题呢,下面就来教大家一个CentOS系统时间同步的方法,希望大家可以解决自己所存在的疑问. CentOS系统时间同步的 ...

  9. Django项目中集成第三方登录时出现的错误

    原以为是被反爬 没想到 总结:这里的http应该是https协议,以后要更加小心 了,不能犯这种低级错误

  10. 6.28日模拟考试总结(T1:翻转游戏;T2:抢掠计划,T3:测绘,T4:奖学金)

    今天的考试有结束了,又一次被右边的同桌虐了(额,排名第三的大佬)但是考试还是进步了一名,算是有进步吧 成绩: 那个12名就是我,一个AC都没有,太难受了. T1: 题目链接:http://hzoi.c ...