Dockerfile介绍及指令详情
Dockerfile简介:
镜像的定制实际上就是定制每一层所添加的配置、文件。如果我们可以把每一层修改、安装、构建、操作的命令都写入一个脚本,用这个脚本来构建、定制镜像,那么哪些无法重复的问题、镜像构建透明性的问题、体积的问题就都会解决。这个脚本就是 Dockerfile。Dockerfile 是一个文本文件,其内包含了一条条的指令,每一条指令构建一层,因此每一条指令的内容,就是描述该层应当如何构建。
Dockerfile编写注意项:
1、指令参数,指令的大小写不敏感
2、第一个非注释行必须是FROM指令
3、编写Dockerfile必须在一个目录下进行,这个目录称之为 工作目录(WORKSPACE)
4、Dockerfile文件命令的首字母必须大写
5、制作镜像所要用的文件必须放在工作目录或者工作目录的子目录之下,不能放在父目录
6、可以通过隐藏文件 .dockeringnore 来指定不要放入到镜像中的文件,一行是一个文件,可以用通配符
7、基于dockerfile做镜像,本质上还是基于一个现有的镜像做新镜像
dockerfile指令详解:
1、FROM
作用:指定一个基础镜像。除注释外,是dockerfile第一条指令。
格式:
FROM docker.io/image:tags (FROM 注册表/镜像名(仓库):标签(版本号))
例子:
FROM docker.io/http:v1
FROM nginx:latest
2、LABEL
作用:设定一些元数据(指明作者信息)
格式:
LABEL author=ken (LABEL 信息)
示例:
LABEL author=ken
3、ENV
作用:设置环境变量
格式:
ENV key=value key=value (ENV key=value)
示例:
ENV workdir=/var/www/html
注意:
通过ENV所定义的变量是可以传递到容器之中,但是,在创建容器的时候,如果手动指定了变量的值,那么这个值会覆盖掉镜像中原有的值
4、WORKDIR
作用:相当于执行cd命令(声明工作目录)
格式:
WORKDIR 工作目录
示例:
WORKDIR /var/www/html
WORKDIR $workdir (ENV环境变量中)
WORKDIR /usr/local/apache2/
5、RUN
作用:基于镜像构建容器时要执行的命令
阶段:第一阶段,构建镜像时执行
格式:
RUN 命令 && 命令
示例:
RUN yum -y install httpd && systemctl enable httpd
6.EXPOSE
作用:声明暴露的端口
格式:
EXPOSE PORT/[PROTOCOL]
示例:
EXPOSE 80 8080 3306
注意:
如果需要外部访问,还需要启动容器时增加-p或者-P参数进行分配
7、COPY
作用:复制dockerfile工作目录下的文件移动至镜像中
格式:
复制单个:COPY <src> <dest>
复制多个:COPY [<src> <src> <src>… <dest>]
示例:
COPY passwd /etc/
注意:
1、源文件路径用相对路径,目标一般用绝对路径
2、也可以通配符
3、源文件必须在工作目录或者工作目录的子目录中
4、目标路径可以不存在,会自动创建
5、如果源文件是一个目录,会自动递归复制目录下的文件到目标位置,但是目录自身不会复制
6、如果复制多个文件,或者源文件中用了通配符,那么目标路径必须以 / 为结尾
8、ADD
作用:也是复制和COPY类似
格式:
ADD SRC DEST
ADD [“<src>” “<src>” “<src>” “<dest>”]
例子:
ADD ken.tar.gz /etc/
注意:
ADD复制时会直接将tar包解压;也可以从网络下载文件到镜像,下载的tar无法解压。
9、VOLUME
作用:声明挂载点
格式:
VOLUME DEST (容器目录)
例子:
VOLUME /var/www/html
10.ONBUILD
作用:触发器 (当别人在使用你的镜像制作新的镜像的时候会触发一个动作)
格式:
ONBUILD 动作
ONBUILD 其他指令
例子:
ONBUILD COPY ken /app/
ONBUILD ADD https://mirrors.aliyun.com/centos/7/os/x86_64/Packages/adwaita-qt-common-1.0-1.el7.x86_64.rpm /date
注意:
指定的命令在构建镜像时并不执行,用来实现当基于这个这个镜像做新镜像的时候要执行的命令
11.CMD
作用:执行指令,PID为1的指令
阶段:第二阶段,也就是将镜像构成成容器的时候执行
格式:
CMD 指令
CMD <命令> 相当于执行的是/bin/sh -c 命令,也相当于执行exec来运行命
CMD [“<命令>”, “<参数>”, “<参数>”]
CMD [“<参数>”, “<参数>”] <<< 需要借助于ENTRYPOINT指令
例子:
CMD nginx -g daemon off;
CMD ["nginx","-g","daemon off"]
注意:
可以在启动容器的时候用指定的命令替换掉镜像所要执行的命令,
CMD指定容器启动是执行的命令,每个Dockerfile只能有一条CMD命令,
如果指定了多条,只有最后一条会被执行,
如果你在启动容器的时候也指定的命令,那么会覆盖Dockerfile构建的镜像里面的CMD命令。
12.ENTRYPOINT
作用:执行指令,PID为1的指令
格式:
ENTRYPOINT 指令
ENTRYPOINT [“执行命令”,”参数1″,”参数2″…]
例子:
ENTRYPOINT nginx -g daemon off;
ENTRYPOINT ["nginx","-g","daemon off]
13. ARG
作用:定义变量,这个变量是用在第一阶段(构建镜像——build)
格式:
ARG 变量名=变量值
ARG示例:
ARG name=ken
注意:
Dockerfile中ENV 和 ARG的区别
在指定docker build 过程中传参数,要用ARG
在执行docker run的过程中传参数,要用ENV
ARG构建参数和 ENV 的效果一样,都是设置环境变量。所不同的是, ARG 所设置的构建环境的
环境变量,在将来容器运行时是不会存在这些环境变量的
14. USER
作用:指定运行容器时的用户名和UID,后续的RUN指令也会使用这里指定的用户
格式:
USER <UID>|<USERNAME>
USER示例:
user ken
注意;
该用户必须存在于容器的用户空间中(容器的文件系统的中的/etc/passwd中)
15. HEALTHCHECK
作用:docker daemon检查docker容器是否正常,如果异常会将该容器stop
将容器stop的条件
1)主进程停止了
2)主进程工作在了后台
格式:
HEALTHCHECK [options] CMD
options
–interval=#s|m 指定健康检查的时间间隔(例如:30s,30m)
–timeout=#s|m 指定等待响应的超时时间
–start-period=#s|m 指定容器启动多久以后才可以做监控检查
–retries=# 指定重试次数
返回值
0:success
示例:
HEALTHCHECK --interval=5m --timeout=1s --retries=3 CMD curl http://10.220.5.138/ken.html || exit 1
16. SHELL
作用:可以用来指定系统中默认的shell类型
格式:
SHELL [“/bin/sh”, “-c”] (linux系统中)
SHELL示例:
SHELL ["/bin/sh","-c"]
Dockerfile介绍及指令详情的更多相关文章
- Dockerfile介绍、Docker制作jdk镜像
Dockerfile介绍.Docker制作jdk镜像 目标 1.Dockerfile简介 2.Docker制作jdk镜像 Dockerfile简介 dockerfile 是一个文本格式的配置文件, 用 ...
- Docker系列(21)- DockerFile介绍
DockerFile介绍 dockerfile是用来构建docker镜像的文件!命令参数脚本! 构建步骤 编写一个dockerfile文件 docker build构建成为一个镜像 docker ru ...
- 8、Dockerfile介绍和最佳实践
一.Dockerfile 概念 1.Dockerfile是什么 Docker 镜像是一个特殊的文件系统,除了提供容器运行时所需的程序.库.资源.配置等文件外,还包含了一些为运行时准备的一些配置参数(如 ...
- 项目——基于httpd镜像演示Dockerfile所有的指令
基于httpd镜像演示Dockerfile所有的指令: 第一步:创建Dockerfile工作目录 [root@localhost harbor]# mkdir /test [root@localhos ...
- docker入门1: Dockerfile介绍
Dockerfile是为快速构建docker image而设计的,当你使用dockerbuild 命令的时候,docker 会读取当前目录下的命名为Dockerfile(首字母大写)的纯文本文件并执行 ...
- centos7下安装docker(dockerfile常用的指令)
FROM:指定ase镜像 MAINTAINER:设置镜像作者,可以是任意字符 COPY:将文件从build context复制到镜像.支持两种形式:1.COPY src dest 2.COPY [“ ...
- docker 13 dockerfile的保留字指令
Dockerfile是用来构建Docker镜像的构建文件,是由一系列命令和参数构成的脚本. 构建三步骤:1.编写dockerfile文件:2.docker build:3.docker run doc ...
- dockerfile 介绍
Docker简介 Docker项目提供了构建在Linux内核功能之上,协同在一起的的高级工具.其目标是帮助开发和运维人员更容易地跨系统跨主机交付应用程序和他们的依赖.Docker通过Docker容器, ...
- Docker(3):Dockerfile介绍及简单示例
Dockerfile 概念 Dockerfile是由一系列命令和参数构成的脚本,这些命令应用于基础镜像并最终创建一个新的镜像.它们简化了从头到尾的流程并极大的简化了部署工作.Dockerfile从FR ...
随机推荐
- django搭建BBS-表单创建&注册
django搭建BBS-表单创建&注册 0824自我总结 文件结构 app 接口 migrations __inint__.py admin.py 管理员页面注册表单用 apps.py bbs ...
- Vue 实现点击空白处隐藏某节点(三种方式:指令、普通、遮罩)
在项目中往往会有这样的需求: 弹出框(或Popover)在 show 后,点击空白处可以将其 hide. 针对此需求,整理了三种实现方式,大家按实际情况选择. 当然,我们做项目肯定会用到 UI 框架, ...
- [NOIp2010] luogu P1541 乌龟棋
英语老师讲 mind map,真想说一句"声微饭否".为什么wyy的歌词总是快一点点.在报csp. 题目描述 你在一个序列上向正方向行走,起点是 a[0]a[0]a[0].每一步可 ...
- [JZOJ100026]【NOIP2017提高A组模拟7.7】图
Description 有一个n个点n条边的有向图,每条边为<i,f(i),w(i)>,意思是i指向f(i)的边权为w(i)的边,现在小A想知道,对于每个点的si和mi. si:由i出发经 ...
- WCF 入门调用实例教程
WCF的相关概念信息就不在此赘述了,网上一搜一大把. 现在让我们动手搭建我们的第一个wcf程序吧,具体流程如下: 1. 新建立空白解决方案,并在解决方案中新建项目,项目类型为:WCF服务应用程序. 2 ...
- css 动画animation基本属性(干货)
/* 动画名称 */ animation-name: cloud; /* 属性定义动画完成一个周期所需要的时间,以秒或毫秒计 */ animation-duration:1s; /* 属性定义动画何时 ...
- 【Labview入门】将输入度数转换为3位精度弧度值
Labview版本2015 程序如下: 可以右键输出控件选择属性来调整输出的小数位数: 运行结果:
- C++ Web框架::cintara
1.Cinatra是由C++开源社区purecpp发起的一个开源项目,是一个现代C++写的Web框架,旨在给用户提供一个易用.灵活和高性能的Web框架,让用户能完全专注于核心逻辑而无需关注http细节 ...
- ios 键盘弹起bug,出现的问题,光标穿透,页面无法点击
有时候使用ios输入键盘以后,直接点击页面按钮会出现事件无效. 解决方法: 1. 输入框输入后点击提交按钮后,弹窗会发现光标穿透问题 解决方法: 使用input blur()事件使input失去焦点 ...
- Java匹马行天下之新手学习目录
Java匹马行天下之新手学习目录 学习路线 [Java匹马行天下——Java学习路线] [Java匹马行天下——开篇学习计划] 基础篇 [Java匹马行天下之学编程的起点——编程常识知多少] [Jav ...