详细文档 : https://docs.docker.com/engine/reference/builder/

1. FROM   尽量使用官方的 image 作为 base image

  FROM scratch  # 制作base image

  FROM centos   # 使用base image

  eg : FROM centos

2. LABEL    Metadata 不可少  类似与代码内的注释

  LABEL maintainer="zonehoo@163.com"

  LABEL version="1.0"

  LABEL description="This is description"

3.RUN  为了美观,复杂的RUN请用反斜线换行!避免无用分层,合并多条命令成一行!(反斜线为换行)

  在 centos 内安装软件

  RUN yum update && yum install -y vim \

    python-dev

  在 ubantu 内安装软件

  RUN apt-get update && apt-get install -y perl \

    pwgen --no-install-recommends && rm -rf \

    /var/lib/apt/lists/*  #注意清楚cache

  RUN /bin/bash -c 'source $HOME/.bashc;echo $HOME'

4.WORKDIR  用WORKDIR, 不要用RUN cd,尽量使用绝对目录(设定当前工作目录 类似于 cd)

  1.WORKDIR /root

  2.  

    WORKDIR /test #若果没有会自动创建test目录

    WORKDIR demo

    RUN pwd      #输出结果应该是 /test/demo

5.ADD 和 COPY  (把本地的文件添加到image里面)

  大部分情况下,COPY 优于 ADD

  ADD 除了 COPY 还有额外功能(解压)

  添加远程文件/目录请使用curl或者wget

    ADD hello /      #将当前文件夹下的可执行文件 添加到 根目录里

    ADD test.tar.gz  /  #添加到根目录 并解压

    WORKDIR /root

    ADD hello test/     # hello 所在文件 /root/test/hello

    WORKDIR /root

    COPY hello test/  

6. ENV 通过设定一个环境变量 声明一个常量  (尽量使用ENV增加可维护性)

  ENV MYSQL_VERSION 5.6  #设定常量

  RUN apt-get install -y mysql-server="${MYSQL_VERSION}" \

     && rm -rf /var/lib/apt/lists/*  #引用常量

7. RUN  与 CMD  与 ENTRYPOINT

  RUN :执行命令并创建新的 Image layer

  CMD :设置容器启动后默认执行的命令和参数

  ENTRYPOINT :设置容器启动时运行的命令

   Shell 和 Exec 格式

   shell格式

    RUN apt-get install -y vim

    CMD echo  'hello-docker'

    ENTRYPOINT echo "hello docker"

   exec格式

    RUN ["apt-get", "install", "-y", "vim"]

    CMD ["/bin/echo", "hello docker"]

    ENTRYPOINT ["bin/echi", "hello docker"]

  测试 docker 的两种格式

    shell 格式   ENTRYPOINT 会连贯执行

      FROM centos

      ENV name DOCKER

      ENTRYPOINT echo "hello $name"    # hello DOCKER

    exec格式 ENTRYPOINT 会单独执行 命令 不与其他关联 若要解析要使用 /bin/bash 执行

      FROM centos

      ENV name Docker

      ENTRYPOINT ["/bin/echo", "hello $name"]  #hello $name

      改

      ENTRYPOINT ["/bin/bash", "-c", "echo hello $name"]  #hello Docker

  CMD

    1.容器启动时默认执行的命令

    2.如果docker run指定了其他命令,CMD命令会被忽略

    eg: docker run -it [image_name] /bin/bash 则 CMD 命令会忽略

    3.如果定义了多个CMD,只有最后一个会执行

    eg:

      FROM centos

      ENV name Docker

      CMD echo "hello $name"    # hello Docker

  ENTEYPOINT

    1.让容器以应用程序或则服务的形式运行 (一半作为一个后台的进程)

    2.不会被忽略,一定会执行

    eg: docker run -it [image_name] /bin/bash 会执行 Entrypoint 后的语句

    3.最佳实践:写一个shell脚本作为entrypoint

    COPY docker-entrypoint.sh /usr/local/bin/    #复制脚本到 指定目录

    ENTRYPOINT ["docker-entrypoint.sh"]  # 运行 entrypoint

    EXPOSE 27017

    CMD ["mongod"]

    

    


7.docker file 语法的更多相关文章

  1. Docker3-Dockerfile创建镜像的方法(推荐docker file这种方法)

    一.镜像制作的方法 1.本地导入导出镜像 请参考:Docker 架构原理及简单使用 导出:docker save nginx >/tmp/nginx.tar.gz 导入:docker load ...

  2. docker镜像的创建方法docker file方式

    什么是docker file文件? 简单来说,docker file文件就是一个命令文本集合,容来记录创建docker镜像的步骤 快速入门: 1.新建一个docker file文件dockerfile ...

  3. docker file 示例

    报错 Cannot connect to the Docker daemon. Is the docker daemon running on this host? 这个错误只要输入docker -d ...

  4. 【Linux】【Services】【Docker】Docker File

    Docker Images: docker commit Dockerfile:文本文件,镜像文件构建脚本: Dockerfile:由一系列用于根据基础镜像构建新的镜像文件的专用指令序列组成: 指令: ...

  5. Sublime Text3 protobuf syntax file(语法文件)

    将以下两个文件放置在X:XXX\Sublime Text 3x64\Data\Packages\User目录下,就可以为sublime3添加protobuf文件的语法高亮规则. 文件名:Protobu ...

  6. Docker系列05:docker镜像制作 &Docker file

    1 什么是Dockerfile? Dockerfile是一个包含用于组合映像的命令的文本文档.可以使用在命令行中调用任何命令. Docker通过读取Dockerfile中的指令自动生成映像. dock ...

  7. docker image 转换 docker file

    这个是从每天的播报平台抓取到国外的信息发现的,感觉很实用. 博客原文,E文好的可以直接去看,https://samaritan.ai/blog/reversing-docker-images-into ...

  8. docker 学习(八) docker file

    一 什么是Dockerfile: Dockerfile是由一系列命令和参数构成的脚本,这些命令应用于基础镜像并最终创建一个新的镜像.它们简化了从头到尾的流程并极大的简化了部署工作.Dockerfile ...

  9. docker file 笔记

    FROM    # FROM scratch,  FROM centos, FROM ubuntu:latest LABEL RUN  # 每运行一次RUN,image都会生成新的一层,为了美观,避免 ...

随机推荐

  1. kibana下载与安装

    目录 简介 下载 安装 测试 简介 Kibana是一个为ElasticSearch 提供的数据分析的 Web 接口.可使用它对日志进行高效的搜索.可视化.分析等各种操作.安装之前有话说: 安装路径不要 ...

  2. UVA - 11584 Partitioning by Palindromes(划分成回文串)(dp)

    题意:输入一个由小写字母组成的字符串,你的任务是把它划分成尽量少的回文串,字符串长度不超过1000. 分析: 1.dp[i]为字符0~i划分成的最小回文串的个数. 2.dp[j] = Min(dp[j ...

  3. 51nod 1105:第K大的数

    1105 第K大的数 基准时间限制:1 秒 空间限制:131072 KB 分值: 40 难度:4级算法题  收藏  关注 数组A和数组B,里面都有n个整数.数组C共有n^2个整数,分别是A[0] * ...

  4. Day3-T2

    原题目 奶牛Bessie的电脑总是无缘无故地被 FJ 关掉,奶牛 Bessie 非常苦恼,也非常生气.FJ 却发现了 一个很神奇的规律(别问是怎么知道的),发现 Bessie 每吃一次草,她的生气值会 ...

  5. bzoj 1832: [AHOI2008]聚会

    良心题2333 三个点两两求一遍就行,最小肯定是在某2个点的lca处,(肯定让第三个人去找2个人,不能让2个人一起去找第三个人233) #include<bits/stdc++.h> #d ...

  6. JAVA字节码文件之第四篇(方法分析)

    一.Methods 方法字节码结构 Methods 字节码结构: Methods num:占两byte,Methods 的具体内存占n个byte 方法中每个属性都是Attribute_info,Att ...

  7. HZNU-ACM寒假集训Day2小结 二分答案

    Day2 ---二分 这里直接给出模板 两种对应不同的情况 可以借助数轴理解 int bsearch_1(int l, int r) { while (l < r) { ; if (check( ...

  8. 利用IIS6提权获得管理员权限

    IIS6也是一个比较古老的提权EXP了,是通过利用WMI的权限来执行命令. 目标机:漏洞巨多的Win2003 下面说一下通过IIS6在已用菜刀连接上的服务器上运用IIS6获得管理员权限的过程. 1.将 ...

  9. Day 11:静态导入、增强for循环、可变参数的自动装箱与拆箱

    jdk1.5新特性-------静态导入 静态导入的作用: 简化书写. 静态导入可以作用一个类的所有静态成员.  静态导入的格式:import static 包名.类名.静态的成员: 静态导入要注意的 ...

  10. redis(六)---- 简单延迟队列

    延迟队列的应用场景也很常见,例如:session的超时过期.自动取消未付款订单等等.redis中有一种数据结构叫做zset,即有序集合.元素类型为String类型,且元素具有唯一性不能重复,每个元素可 ...