docke--Dockerfile构建docker镜像
一、Dockerfile简介及原理
1.简介
Dockerfile是用来构建Docker镜像的构建文件,是由一系列命令和参数构成的脚本。
2.构建三步骤
1.编写Dockerfile文件
2.docker build
3.docker run
3.DockerFile文件构建过程解析
1:每条保留字指令都必须为大写字母且后面要跟随至少一个参数 2:指令按照从上到下,顺序执行 3:每条指令都会创建一个新的镜像层,并对镜像进行提交
4:#表示注释
4.Docker执行Dockerfile的流程
1:docker从基础镜像运行一个容器
2:执行一条指令并对容器作出修改
3:执行类似docker commit的操作提交一个新的镜像层
4:docker再基于刚提交的镜像运行一个新容器
5:执行dockerfile中的下一条指令直到所有指令都执行完成
二、Dockerfile关键字介绍
FROM: 基础镜像,当前新镜像是基于哪个镜像为基础
MAINTAINER:镜像维护者的姓名和邮箱地址
RUN: 容器构建时需要运行的命令(可以是linux命令)
EXPOSE: 当前容器对外暴露出的端口
WORKDIR: 指定在创建容器后,终端默认登陆的进来工作目录,一个落脚点
ENV: 用来在构建镜像过程中设置环境变量
例:ENV MY_PATH /usr/mytest这个环境变量可以在后续的任何RUN指令中使用,这就如同在命令前面指定了环境变量前缀一样;也可以在其它指令中直接使用这些环境变量,比如:WORKDIR $MY_PATH
ADD: 将宿主机目录下的文件拷贝进镜像且ADD命令会自动处理URL和解压tar压缩包
COPY: 类似ADD,拷贝文件和目录到镜像中。COPY分为2种类型
例:COPY src des #src 物理机的位置,且只能是文件或者目录 des镜像的位置 COPY ["src","des"] #将从构建上下文目录中 <源路径> 的文件/目录复制到新的一层的镜像内的 <目标路径> 位置
VOLUME: 容器数据卷,用于数据保存和持久化工作
CMD: 指定一个容器启动时要运行的命令 Dockerfile 中可以有多个 CMD 指令,但只有最后一个生效,也就是说在多个CMD命令存在时,最后一个会覆盖前面的命令,只会执行最后一个命令
CMD 会被 docker run 之后的参数替换,也就是说CMD的命令会被docker run-it...后面的参数给覆盖掉
ENTRYPOINT :指定一个容器启动时要运行的命令 ENTRYPOINT 的目的和 CMD 一样,都是在指定容器启动程序及参数 ENTRYPOINT 执行结果可以以当做docker run 之后的参数
ONBUILD: 当构建一个被继承的Dockerfile时运行命令,父镜像在被子继承后父镜像的onbuild被触发
三、Docker build关键字介绍
参数说明: --build-arg=[] : 设置镜像创建时的变量; --cpu-shares : 设置 cpu 使用权重; --cpu-period : 限制 CPU CFS周期; --cpu-quota : 限制 CPU CFS配额; --cpuset-cpus : 指定使用的CPU id; --cpuset-mems : 指定使用的内存 id; --disable-content-trust : 忽略校验,默认开启; -f : 指定要使用的Dockerfile路径; --force-rm : 设置镜像过程中删除中间容器; --isolation : 使用容器隔离技术; --label=[] : 设置镜像使用的元数据; -m : 设置内存最大值; --memory-swap : 设置Swap的最大值为内存+swap,"-1"表示不限swap; --no-cache : 创建镜像的过程不使用缓存; --pull : 尝试去更新镜像的新版本; --quiet, -q : 安静模式,成功后只输出镜像 ID; --rm : 设置镜像成功后删除中间容器; --shm-size : 设置/dev/shm的大小,默认值是64M; --ulimit : Ulimit配置。 --tag, -t: 镜像的名字及标签,通常 name:tag 或者 name 格式;可以在一次构建中为一个镜像设置多个标签。 --network: 默认 default。在构建期间设置RUN指令的网络模式
由于本人是自己学习总结出来的,有不足之处,请各位看官批评指出,我将及时改正,以提高知识总结的正确性和严谨性,为大家学习提供方便!!!
如若转载,请注明出处!!!