Docker通过对于在Dockerfile中的一系列指令的顺序解析实现自动的image的构建
通过使用build命令,根据Dockerfiel的描述来构建镜像
通过源代码路径的方式
通过标准输入流的方式
通过源代码路径
Dockerfile需要放置在项目的根目录位置
在构建的时候,Dockerfile client会把整个context打包发送到Docker Server端,然后由server端负责build镜像,在构建成功后,会删除context目录
docker build -t {镜像名字} {项目路径可以是相对路径}

  docker利用Dockerfile来构建新镜像之前,先来了解一下Dockerfile创建中使用到的指令

通过标准输入流:

通过标准输入流的方式获取Dockerfile的内容
client不会打包上传context目录,因此对于一些ADD、COPY等涉及host本地文件复制的操作不能够支持
docker build -t {镜像名字} - < Dockerfile路径
build cache:
Dockerfile中的每一个指令执行完毕后,都会提交为一个image,这样保证了指令之间不会有影响
Dockerfile会尽可能尝试重用之前已经构建的镜像
可以通过在build命令中增加--no-cache的方式来禁用这个cache
Dockerfile指令:
只支持Docker自己定义的一套指令,不支持自定义
大小写不敏感,但是建议全部使用大写
根据Dockerfile的内容顺序执行

FROM:
FROM {base镜像}
必须放在DOckerfile的第一行,表示从哪个baseimage开始构建
MAINTAINER:
可选的,用来标识image作者的地方
RUN:
每一个RUN指令都会是在一个新的container里面运行,并提交为一个image作为下一个RUN的base
一个Dockerfile中可以包含多个RUN,按定义顺序执行
RUN支持两种运行方式:
RUN <cmd> 这个会当作/bin/sh -c “cmd” 运行
RUN [“executable”,“arg1”,。。],Docker把他当作json的顺序来解析,因此必须使用双引号,而且executable需要是完整路径
  RUN 都是启动一个容器、执行命令、然后提交存储层文件变更。第一层 RUN command1 的执行仅仅是当前进程,一个内存上的变化而已,其结果不会造成任何文件。而到第二层的时候,启动的是一个全新的容器,跟第一层的容器更完全没关系,自然不可能继承前一层构建过程中的内存变化。而如果需要将两条命令或者多条命令联合起来执行需要加上&&。如:cd /usr/local/src && wget xxxxxxx
CMD:
CMD的作用是作为执行container时候的默认行为(容器默认的启动命令)
当运行container的时候声明了command,则不再用image中的CMD默认所定义的命令
一个Dockerfile中只能有一个有效的CMD,当定义多个CMD的时候,只有最后一个才会起作用
CMD定义的三种方式:
CMD <cmd> 这个会当作/bin/sh -c "cmd"来执行
CMD ["executable","arg1",....]
CMD ["arg1","arg2"],这个时候CMD作为ENTRYPOINT的参数

EXPOSE 声明端口

  格式为 EXPOSE <端口1> [<端口2>...]

  EXPOSE 指令是声明运行时容器提供服务端口,这只是一个声明,在运行时并不会因为这个声明应用就会开启这个端口的服务。在 Dockerfile 中写入这样的声明有两个好处,一个是帮助镜像使用者理解这个镜像服务的守护端口,以方便配置映射;另一个用处则是在运行时使用随机端口映射时,也就是 docker run -P 时,会自动随机映射 EXPOSE 的端口。

entrypoint:
entrypoint的作用是,把整个container变成了一个可执行的文件,这样不能够通过替换CMD的方法来改变创建container的方式。但是可以通过参数传递的方法影响到container内部
每个Dockerfile只能够包含一个entrypoint,多个entrypoint只有最后一个有效
当定义了entrypoint以后,CMD只能够作为参数进行传递
entrypoint定义方式:
entrypoint ["executable","arg1","arg2"],这种定义方式下,CMD可以通过json的方式来定义entrypoint的参数,可以通过在运行container的时候通过指定command的方式传递参数
entrypoint <cmd>,当作/bin/bash -c "cmd"运行命令
ADD & COPY:
当在源代码构建的方式下,可以通过ADD和COPY的方式,把host上的文件或者目录复制到image中
ADD和COPY的源必须在context路径下
当src为网络URL的情况下,ADD指令可以把它下载到dest的指定位置,这个在任何build的方式下都可以work
ADD相对COPY还有一个多的功能,能够进行自动解压压缩包
ENV:
ENV key value
用来设置环境变量,后续的RUN可以使用它所创建的环境变量
当创建基于该镜像的container的时候,会自动拥有设置的环境变量
WORKDIR:
用来指定当前工作目录(或者称为当前目录)
当使用相对目录的情况下,采用上一个WORKDIR指定的目录作为基准
USER:
指定UID或者username,来决定运行RUN指令的用户
ONBUILD:
ONBUILD作为一个trigger的标记,可以用来trigger任何Dockerfile中的指令
可以定义多个ONBUILD指令
当下一个镜像B使用镜像A作为base的时候,在FROM A指令前,会先按照顺序执行在构建A时候定义的ONBUILD指令
ONBUILD <DOCKERFILE 指令> <content>
VOLUME:
用来创建一个在image之外的mount point,用来在多个container之间实现数据共享
运行使用json array的方式定义多个volume
VOLUME ["/var/data1","/var/data2"]
或者plain text的情况下定义多个VOLUME指令

docker之Dockerfile指令介绍相关推荐

  1. Docker学习——Dockerfile 指令详解(五)

    2019独角兽企业重金招聘Python工程师标准>>> 我们已经介绍了 FROM (指定基础镜像) , RUN(执行命令) ,还提及了 COPY , ADD ,其实 Dockerfi ...

  2. Docker之Dockerfile 指令详解

    闲话不多说,dokerfile常用指令解析奉上 FROM 作用:指定基础镜像,必须放在DOckerfile的第一行,表示从哪个baseimage开始构建 格式: FROM <image>: ...

  3. Docker: dockerfile 使用介绍

    Docker简介 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家.点击跳转到教程. Docker项目提供了构建在Linux内核功能之上,协同在一起的的高级工具.其目标 ...

  4. Docker(二):Dockerfile 使用介绍

    上一篇文章Docker(一):Docker入门教程介绍了 Docker 基本概念,其中镜像.容器和 Dockerfile .我们使用 Dockerfile 定义镜像,依赖镜像来运行容器,因此 Dock ...

  5. Docker学习文档之三 其他相关-Dockerfile指令

    ###Dockerfile指令 Docker可以从Dockerfile中一步一步的读取指令来自动的创建镜像,常使用Dockerfile来创建用户自定义的镜像.格式如下:# Comment INSTRU ...

  6. Dockerfile制作容器--ssh容器,详细步骤与指令介绍

    目录 Dockerfile介绍 什么是Dockerfile dockerfile的基本结构 格式 dockerfile指令 FROM指令 MAINTAINER指令 COPY指令 ADD指令 WORKD ...

  7. Dockerfile 指令 VOLUME 介绍

    Dockerfile 指令 VOLUME 介绍 前言 一.容器上不了网的问题的解决方法: 1.启动容器限制容器可以使用的cpu和内存资源** 2.问题:如何限制一个进程可以使用多少cpu和多少内存? ...

  8. 【Docker】之 Dockerfile 指令详解

    目录 Dockerfile 基本结构 Dockerfile 指令 指定基础镜像 FROM 维护者信息 MAINTAINER 元数据标签 LABEL 设置环境变量 ENV 镜像构建参数 ARG 指定工作 ...

  9. Dockerfile 指令详解1

    Dockerfile 指令详解 我们已经介绍了 FROM,RUN,还提及了 COPY, ADD,其实 Dockerfile 功能很强大,它提供了十多个指令.下面我们继续讲解其他的指令. COPY 复制 ...

最新文章

  1. ECS服务器指定实例规格最佳推荐
  2. 从玉谋定农业大健康-国情讲坛·林裕豪 :粤港澳大湾区菜篮子
  3. 成教计算机专业,成教计算机专业毕业.docx
  4. 打印出所有的水仙花数javascript_习题4-6 水仙花数 (20分)
  5. wordpress 根据文章ID获取分类ID和标签ID
  6. JDBC.property 配置文件中链接数据库的配置
  7. 桥接模式Bridge
  8. redistemplate给hash存储设置有效期_客户端较为常用的存储机制
  9. JavaEE思维导图
  10. 实习成长之路:MySQL二 : 一条SQL更新语句是如何执行的?
  11. 插入排序算法--Java实现
  12. Github desktop界面全白怎么办?[已解决]
  13. vivo X9的usb调试模式在哪里,开启vivo X9usb调试模式的方法
  14. 档案管理系统操作说明
  15. 一次RAC主机资源使用异常导致的节点重启
  16. DeepMind AI 科学家:2020年NLP和ML领域十大研究进展
  17. C语言画奥运五环以及五角星
  18. Windows系统中设置软件的开机自动启动
  19. 华为HG8245C光猫设置VOIP
  20. 直积与张量积的数学与物理定义异同

热门文章

  1. Mybatis逆向生成报错:.\mbg.xml (系统找不到指定的文件)
  2. vue :class 动态绑定样式_Notes04vbind动态绑定class
  3. 计算机mooc操作测试视频,计算机基础课MOOC视频的制作方法.doc
  4. java运用网络编程技术代码_Java 网络编程
  5. android自定义属性dimen,android代码里的dimen
  6. test.php创建,基于phpstudy简单快速搭建一个php程序
  7. java自定义findbugs规则_静态代码扫描 (三)——FindBugs 自定义规则入门
  8. 计算机入域时域控用到的端口,【ADDC】域控需要开放的端口
  9. oracle存储过程拼',【求助】关于oracle存储过程'字符串拼接'
  10. c++读取json文件_[SpringMVC]-SpringMVC架构-07-SpringMVC文件上传