dockerfile 简介
Dockerfile 是⼀个⽤来构建镜像的⽂本⽂件,⽂本内容包含了⼀条条构建镜像所需的指令和 说明,每条指令构建⼀层,最终构建出⼀个新的镜像。
docker镜像的本质是⼀个分层的⽂件系统
centos的iso镜像⽂件是包含bootfs和rootfs及⼤量软件包,⽽docker的centos镜像复 ⽤了操作系统的bootfs,也没有⼤量软件包,只有rootfs和其他必要镜像层
由于docker镜像是分层的,例如:tomcat、mysql镜像本身课程也就⼏⼗MB,但是它 们需要依赖基础镜像及其他镜像层,所以对外暴露的tomcat、MySQL⼤⼩会很⼤。
DockerFile关键字介绍:
关键字 | 作⽤ | 备注 |
FROM | 指定⽗镜像 | 指定dockerfile基于哪个镜像构建 |
MAINTAINER | 作者信息 | ⽤来标明这个dockerfile谁写的 |
LABEL | 标签 | ⽤来标明dockerfile的标签,可以使⽤label代替 Maintainer,最终都是在docker image基本信息中可以查看 |
RUN | 执⾏命令 | 容器创建过程中执⾏命令,默认是/bin/sh,格式:RUN 命令 或者 RUN ["命令","参数1","参数2"] |
CMD | 容器启动命令 | 提供启动容器时候的默认命令,和ENTRYPOINT配合使⽤,格 式:CMD 命令 参数1 参数2 或者 CMD ["命令","参数1","参数 2"] |
ENTRYPOINT | ⼊⼝ | ⼀般在制作⼀些执⾏就关闭的容器中会使⽤ |
COPY | 复制⽂件 | 构建镜像时,复制⽂件到镜像中,COPY指令只能从执⾏ docker build所在的主机上读取资源并复制到镜像中。 |
ADD | 添加⽂件 | ADD指令更擅⻓读取本地tar⽂件并解压缩。⽽ADD指令还⽀ 持通过URL从远程服务器读取资源并复制到镜像中。 |
ENV | 环境变量 | 指定构建时的环境变量,后续的指令中,就可以使⽤这个环境变量。 |
ARG | 构建参数 | 与 ENV 作⽤⼀致,如果有ENV,那么ENV的相同名字的值始 终覆盖ARG的参数 |
VOLUME | 定义外部可以挂载的数据卷 | 指定镜像中的⽬录可以挂载到数据卷⽬录,启动容器时⽤-v绑 定,格式:VALUME ["⽬录"] |
EXPOSE | 暴露端⼝ | 定义容器运⾏时监听的端⼝,启动容器时,使⽤-p绑定暴露的 端⼝,格式:EXPOSE 80 或者 EXPOSE 80/tcp |
WORKDIR | ⼯作⽬录 | 指定容器内部的⼯作⽬录,作为⽤户⾸次登录容器时停留的⽬ 录,如果没有创建则⾃动创建,如果指定/,使⽤的是绝对地 址,如果不是/开头,那么是在上⼀条workdir的路径的相对路 径 |
USER | 指定执⾏⽤户 | 指定构建或者启动时镜像时,⽤户在RUN,CMD, ENTRYPONT执⾏时候的⽤户 |
HEALTHCHECK | 健康检查 | 指定监测当前容器的命令,基本上没⽤,应为很多时候,应⽤ 本身⾃带健康检查机制 |
ONBUILD | 触发器 | 当存在触发器关键字的镜像作为基础镜像时,当执⾏FROM完 成之后,会执⾏ONBUILD的命令,但是不影响当前镜像,⽤处 也不⼤ |
STOPSIGNAL | 发送信号到宿主机 | 该信号指令设置将发送到容器的系统调⽤信号以退出 |
SHELL | 执⾏执⾏脚本的shell | 指定执⾏ RUN,CMD,ENTRYPOINT执⾏命令时,使⽤的 shell |