1.FROM :指定基础镜像(除了from其他命令都是非必须的)
2.MAINTAINER:指定作者信息
3.RUN: 在镜像构建时就要执行的命令
4.CMD: 容器启动是运行的命令
5.EXPOSE: 声明容器要监听的端口
6.ENV: 设置环境变量
7.ADD/COPY: 将本地上的文件或目录复制到镜像(ADD指令时,Docker会自动解压缩被复制的压缩文件)
8.WORKDIR: 指定工作目录
9.STOPSIGNAL : 指定容器退出的信号
13:VOLUME: 在容器里创建卷挂载
14:HEALTHCHECK: 用于定义容器的健康检查行为
15: ARG: 在dockerfile文件里的参数,可以方便引用,传给其他指令
16: USER: 用于设置容器运行时的用户
12:LABEL: Docker 官方推荐使用 LABEL 指令来代替 MAINTAINER 指令,
因为 LABEL 指令提供了更丰富的元数据信息,并且更具有可扩展性和可读性
======================
10.CMD:会在docker run时运行(可以被docker run参数覆盖)
只执行一次,如果有多个CMD默认只会执行最后一个。
11.ENTRYPOINT:也是多个执行最后一个。(不可被docker run提供的参数覆盖)
###如果同时存在CMD和ENTRYPOINT?
1.如果同时指定了 CMD 和 ENTRYPOINT,则 CMD 的内容将作为 ENTRYPOINT 命令的默认参数。
可以通过 docker run 命令的参数来覆盖 CMD 中的默认参数。
==================
镜像分层
1.Copy-on-Write 可写容器层
2.容器层以下所有镜像层都是只读的
3.docker从上往下依次查找文件
4.容器层保存镜像变化的部分,并不会对镜像本身进行任何修改
#所有对容器的改动 - 无论添加、删除、还是修改文件都只会发生在容器层中,
只有容器层是可写的,容器层下面的所有镜像层都是只读的
Copy-on-Write
**容器增,删,改,查思想(写时拷贝,只有修改文件时,才拷贝镜像层的数据到容器层)
1.添加文件
在容器中创建文件时,新文件被添加到容器层中。
2.读取文件
在容器中读取某个文件时,Docker 会从上往下依次在各镜像层中查找此文件。一旦找到,打开并读入内存。
3.修改文件
在容器中修改已存在的文件时,Docker 会从上往下依次在各镜像层中查找此文件。一旦找到,立即将其复制到容器层,然后修改之。
4.删除文件
在容器中删除文件时,Docker 也是从上往下依次在镜像层中查找此文件。找到后,会在容器层中记录下此删除操作。
只有当需要修改时才复制一份数据,这种特性被称作 Copy-on-Write。可见,容器层保存的是镜像变化的部分,不会对镜像本身进行任何修改。