docker-4-Dockerfile配置文件详解
Dockerfile简单一点就是描述你这个镜像安装了哪些软件包,有哪些操作,创建了什么东西。有些人喜欢用 docker commit 命令去打包镜像,这样是不好的,首先commit出来的镜像比你使用Dockerfile构建出来的体积大,而且commit出来的镜像属于黑盒镜像,除了制作者,谁都不知道你在里面干了什么,属于不安全的镜像,很少会有人使用,最后就是不便于你最终的管理和更新。所以推荐使用Dockerfile去管理你的镜像,下面将简单介绍Dockerfile常见的指令和注意事项:

注意:一行注释一行命令,不要乱注释,否则可能出现命令无效的情况,详情看dockerfile官方文档
文中加粗的是常用命令,一个命令可能有多种格式,注意!!
# escape=\
指定转译符,默认为\,可以使用任意符号
FROM
FROM <image>
FROM <image>:<tag>
FROM <image>:<digest>
FROM命令定义构建镜像的基础镜像,该条必须是dockerfile的首个命令。
对于官方没给出Dockerfile的软件想Docker化,那么引用的镜像一般是debian:jessie、alpine、ubuntu,如果官方已经有了,比如nginx、php、mysql这写,那么基本直接引用即可。
MAINTAINER
MAINTAINER <messages>

声明作者信息,可以放在文件任何位置,建议放在FROM后面
LABEL <key>=<value> <key>=<value> <key>=<value> ...
标签,将后面的元数据添加到镜像中,可以用docker inspect查看
RUN
RUN <commands>
RUN ["executable", "param1", "param2"] (exec form)
在基础镜像上创建新的镜像执行命令,并提交结果,生成的新的镜像将作为dockerfile中接下来的命令基础(建议一个dockerfile中只要一个RUN命令,如果要执行多条命令请用连接符)(因为docker镜像使用的是分层结构,一个指令就是一层,三个RUN就会有三层)https://s1.51cto.com/images/blog/201712/28/ebf68134078208b6dde4e600dceb7858.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=" alt="docker-4-Dockerfile配置文件详解" style="cursor: pointer;">

EXPOSE
EXPOSE <port>[<port>/<protocol>...]
容器暴露的端口(会直接绑定容器和docker宿主机的该端口,可以指定连接协议,默认为tcp协议)
CMD
CMD <commands>
容器启动时执行操作,如果一个Dockerfile中有多个CMD命令,那么只有最后一个CMD命令生效。CMD的指令可以在docker run的时候覆盖。
ENTRYPOINT
ENTRYPOINT
Dockerfile是用来构建镜像,而ENTRYPOINT则是用来启动镜像,它会将CMD作为参数传递进去运行。
启动时的默认命令,此命令设置不可被修改。如果一个Dockerfile中有多个ENTRYPOINT,那么只有最后一个生效。
详情请看docker问答录和官方文档
eg:
ENTRYPOINT ["nginx"]
CMD ["-g","daemon off;"]
如上,如果执行 docker run -d --name nginx -P nginx 则最终容器内执行的命令是nginx -g daemon off; ,如果你执行的命令是 docker run -d --name nginx -P nginx bash 则最终容器内执行的命令是nginx bash 注意区别。
USER
USER <user>[:<group>]
USER <UID>[:<GID>]
指定docker构建,运行使用的用户,如果不设置,将使用root的用户和组来构建。前提是用户要存在。
WORKDIR /path/to/workdir
docker构建、复制、运行等的工作目录,一个dockerfile中可以指定多次,如果没有指定将会自动创建,默认/,如果使用相对路径,将在之前的路径下。
ENV
ENV <key> <value>
ENV <key>=<value> ...
设置docker镜像的环境变量,可以在构建镜像时使用,也可以在运行的容器中使用,使用键值对的形式,可以一次指定多个。
ADD
ADD <src>... <dest>
ADD ["<src>",... "<dest>"]
The ADD instruction copies new files, directories or remote file URLs from <src> and adds them to the filesystem of the image at the path <dest>.
这个命令将会把src(源)目录、文件、远程文件URL复制到镜像的文件系统中,存放目录为dest(目标)目录。如果src是压缩文件会帮你解压出来。
COPY
COPY <src>... <dest>
COPY ["<src>",... "<dest>"]
The COPY instruction copies new files or directories from <src> and adds them to the filesystem of the container at the path <dest>.
src只能是本地文件或目录,压缩文件不会解压。。。
VOLUME
VOLUME ["/data"]
卷,由于docker容器不能持久化存储数据,因此将会发生变化的数据使用卷来管理,卷分为宿主目录、数据卷、容器卷。
VOLUME命令会设置你的卷,在启动容器的时候Docker会在/var/lib/docker/的下一级目录下创建一个卷,以保存你在容器中产生的数据。若没有申明则不会创建。
eg:
VOLUME ["/data"]
VOLUME ["/data","/opt"]
WORKDIR
指定容器中的工作目录,可以在构建时使用,也可以在启动容器时使用,构建使用就是通过 WORKDIR 将当前目录切换到指定的目录中,容器中使用的意思则是在你使用 docker run 命令启动容器时,默认进入的目录是 WORKDIR 指定的,下面的example中我使用环境变量。
eg:
WORKDIR /app
ARG
ARG <name>[=<default value>]
变量,可以有值,也可以没有。可以在构建时使用--build-arg定义。详情请看官方文档
ONBUILD
ONBUILD [INSTRUCTION]
ONBUILD命令在容器中添加一个触发器,在将该镜像作为基础镜像构建其他镜像是触发。会在下个容器FROM一调用就执行。
STOPSIGNAL signal
停止信号
HEALTHCHECK [OPTIONS] CMD command
用于检测容器是否有效
SHELL ["executable", "parameters"]
使用命令的shell窗口来覆盖默认的shell窗口,应该就是用容器的shell窗口覆盖宿主机的shell窗口吧,没用过。
参考
官方文档:https://docs.docker.com/engine/reference/builder/
docker问答录:https://blog.lab99.org/post/docker-2016-07-14-faq.html
感谢小沫大佬的指导
原文地址:https://blog.51cto.com/13323775/2055561
docker-4-Dockerfile配置文件详解的更多相关文章
- Docker:Dockerfile命令详解
1.FROM 功能为指定基础镜像,并且必须是第一条指令. 如果不以任何镜像为基础,那么写法为:FROM scratch. 同时意味着接下来所写的指令将作为镜像的第一层开始 语法: FROM <i ...
- [转]Docker(三):Dockerfile 命令详解
本文转自:https://blog.csdn.net/ityouknow/article/details/79600406 上一篇文章Docker(二):Dockerfile 使用介绍介绍了 Dock ...
- Docker(三):Dockerfile 命令详解
上一篇文章Docker(二):Dockerfile 使用介绍介绍了 Dockerfile 的使用,这篇文章我们来继续了解 Dockerfile ,学习 Dockerfile 各种命令的使用. Dock ...
- [转帖]Docker学习之Dockerfile命令详解
Docker学习之Dockerfile命令详解 https://it.baiked.com/system/docker/2436.html 图挺好的 前言 之前,制作镜像的伪姿势搭建已经见过了,今天介 ...
- Docker(六):Dockerfile命令详解
Dockerfile 指令详解 1 FROM 指定基础镜像 FROM 指令用于指定其后构建新镜像所使用的基础镜像.FROM 指令必是 Dockerfile 文件中的首条命令,启动构建流程后,Docke ...
- Docker学习(六)——Dockerfile文件详解
Docker学习(六)--Dockerfile文件详解 一.环境介绍 1.Dockerfile中所用的所有文件一定要和Dockerfile文件在同一级父目录下,可以为Dockerfile父目录的子目录 ...
- Dockerfile 命令详解及最佳实践
Dockerfile 命令详解 FROM 指定基础镜像(必选) 所谓定制镜像,那一定是以一个镜像为基础,在其上进行定制.就像我们之前运行了一个 nginx 镜像的容器,再进行修改一样,基础镜像是必须指 ...
- 最佳实战Docker持续集成图文详解
最佳实战Docker持续集成图文详解 这是一种真正的容器级的实现,这个带来的好处,不仅仅是效率的提升,更是一种变革:开发人员第一次真正为自己的代码负责——终于可以跳过运维和测试部门,自主维护运行环境( ...
- docker entrypoint入口文件详解
docker entrypoint入口文件详解 pasting Dockerfile创建自定义Docker镜像以及CMD与ENTRYPOINT指令的比较 [k8s]args指令案例-彻底理解docke ...
随机推荐
- 拦截器和自定义注解@interface
1 .拦截器(Interceptor): 用于在某个方法被访问之前进行拦截,然后在Handler执行之前或之后加入某些操作,其实就是AOP的一种实现策略. 拦截用户的请求并进行相应的处理,比如:判断用 ...
- work-shineyoo:杂项1906
ylbtech-work-shineyoo:杂项1906 1.返回顶部 1. 1.1 SMS (手机的)短信服务.Short Message Service. 1.2 VOD 视频点播.Video o ...
- mysql内建命令快速手记 — 让手指跟上思考的速度(一)
在微信公众号上看到一篇文章说的很好,意思是说,大牛在尝试各种方案的时候可能并没有超神的预测和筛选能力 只是你通常测试一种情况时,大神已经测试了好几种方案了,讲的是"为什么大多数程序员不喜欢写 ...
- vue-cli的使用指南
vue-cli 2.0 安装vue-cli npm install -g vue-cli 创建一个项目模板 vue init <template-name> <project-nam ...
- Windows 系统文件夹目录挂载到 Linux服务器中
在Windows系统文件上传到Linux服务器时有时候很麻烦,因为Linux无界面的系统不像Windows系统一样,可以直接复制粘贴,下面方法可以解决Windows系统文件拷贝到Linux服务器. 1 ...
- js时间比较大小,时间加减
第一种: //时间类比较 startTime= new Date(Date.parse(starttime)); endTime=new Date(Date.parse(endTime)); //进行 ...
- 目标检测从入门到精通—SPP-Net详细解析(三)
SPP-Net网络结构分析 Author:Mr. Sun Date:2019.03.18 Loacation: DaLian university of technology 论文名称:<Spa ...
- 实战课堂 | MongoDB如何使用内存?内存满了怎么破?
最近接到多个MongoDB内存方面的线上case及社区问题咨询,主要集中在: 为什么我的 MongoDB 使用了 XX GB 内存? 一个机器上部署多个 Mongod 实例/进程,WiredTiger ...
- svn 设置快捷命令
# some more svn aliases alias svnset='svn propset svn:externals . -F' alias svnget='svn propget svn: ...
- vue项目 环境搭建
1.前端安装 安装项目:vue init webpack docvote 进入docvote里:cd docvote 安装脚手架:cnpm i 运行:npm run dev 2.异步加载 const ...