docker-dockerfile
dockerfile是用来构建docker镜像的文本文件,是由一条条构建镜像所需的指令和参数构成的脚本
一般的,dockerfile分为四部分:基础镜像信息、维护者信息、镜像操作指令和容器启动时指令
基础
- 每条保留字指定都必须为大写字母,且后面要跟至少一个参数
- 指令按照从上到下,顺序执行
- #表示注释
- 每条指令都会创建一个新的镜像并对镜像进行提交
执行流程
- docker从基础镜像运行一个容器
- 执行一条指令并对容器做出修改
- 执行类似docker commit的操作提交一个新的镜像层
- docker再基于刚提交的镜像运行一个新容器
- 执行dockerfile中的下一条指令直到所有指令都执行完成
保留字
保留字 | 作用 |
---|---|
FROM | 基础镜像,当前新镜像是基于哪个镜像的,指定一个已存在的镜像作为模板,第一条指令必须是FROM |
MAINTAINER | 镜像维护者的姓名和邮箱地址 |
RUN | 容器构建时需要运行的命令,有shell格式和exec格式,RUN是在docker build时运行。因为每个指令都会在docker上新建一层,过多的层会造成镜像膨胀。可用使用&& 和\ 减少命令数量 |
EXPOSE | 当前容器对外暴露的端口,在docker run -P时,会自动映射EXPOSE端口 |
WORKDIR | 指定工作目录,在镜像构建的过程中,每一个RUN命令都是新建一层。只有WORKDIR创建的目录才会一直存在 |
USER | 该镜像以什么样的用户去执行,如果不指定,默认root |
ENV | 用来在构建镜像过程中设置变量环境,语法:ENV key value |
ARG | 与ENV作用一致。不过作用域不一样。ARG设置的环境变量仅在dockerfile内有效,也就是说只有docker build的过程中有效,构建好的镜像内不存在此环境变量 |
LABEL | 用来给镜像添加一些元数据 |
ADD | 将宿主机目录下的文件拷贝进镜像且会自动处理url和解压tar压缩包 |
COPY | 类似ADD,拷贝文件和目录到镜像中。语法COPY 源路径 目标路径 |
VOLUME | 容器数据卷,用于数据保存和持久化。 |
CMD | 容器启动后要干的事。有shell格式、exec格式和参数列表格式(在指定了ENTRYPOINT后)。可用有多个CMD指令,但之后最后一个生效。CMD会被docker run之后的参数替换。CMD是在docker run时运行 |
ENTRYPOINT | 用来指定一个容器启动时要运行的命令,类似CMD命令,但是ENTRYPOINT不会被docker run后面的命令覆盖,而且这些命令参数会被当作参数送给ENTRYPOINT指令指定的程序 |
ONBUILD | 延迟构建的命令执行。配置当所创建的镜像作为其他新创建的基础镜像时,所执行的操作指令 |
HEALTHCHECK | 用于指定某个程序或者指令来监控docker容器服务的运行状态 |
docker build
语法
docker build [选项] 路径
常用选项说明
- –build-arg=[]:设置镜像创建时的变量
- –lablel=[]:设置镜像使用的元数据
- -f:指定要使用的dockerfile路径
- –force-rm:设置镜像过程中删除中间容器
- –rm:设置镜像成功后删除中间容器
- -m:设置最大内存
- –no-cache:创建镜像的过程中不使用缓存
- –pull:尝试去更新镜像的新版本
- –squash:将dockerfile中的所有操作缩为一层
- –quiet、-q:安静模式,成功后只输出镜像id
- –tag、-t:镜像的名字及标签,通常为name:tag或name的格式,可用设置多个
- -m:设置内存最大值