docker-4-Dockerfile配置文件详解

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

原文地址:https://www.cnblogs.com/jpfss/p/11278040.html

时间: 2024-11-01 16:41:57

docker-4-Dockerfile配置文件详解的相关文章

6.9 docker(一) Dockerfile 指令详解

Dockerfile 指令详解 COPY 复制文件 格式: COPY [--chown=<user>:<group>] <源路径>... <目标路径> COPY [--chown=<user>:<group>] ["<源路径1>",... "<目标路径>"] 一种类似于命令行,一种类似于函数调用 <源路径> 的文件/目录复制到新的一层的镜像内的 <目标路

Docker(三):Dockerfile 命令详解

上一篇文章Docker(二):Dockerfile 使用介绍介绍了 Dockerfile 的使用,这篇文章我们来继续了解 Dockerfile ,学习 Dockerfile 各种命令的使用. Dockerfile 指令详解 1 FROM 指定基础镜像 FROM 指令用于指定其后构建新镜像所使用的基础镜像.FROM 指令必是 Dockerfile 文件中的首条命令,启动构建流程后,Docker 将会基于该镜像构建新镜像,FROM 后的命令也会基于这个基础镜像. FROM语法格式为: FROM <i

Docker Compose 配置文件详解

Docker Compose 配置文件详解 左蓝关注 72017.01.19 23:25:09字数 2,827阅读 144,706 先来看一份 docker-compose.yml 文件,不用管这是干嘛的,只是有个格式方便后文解说: version: '2' services: web: image: dockercloud/hello-world ports: - 8080 networks: - front-tier - back-tier redis: image: redis links

监控服务 - Nagios配置文件详解

一.Nagios的配置文件类型: Nagios安装后有四种默认的配置文件:主配置文件.CGI配置文件.资源定义文件.对象定义文件.这些配置文件间具有一些关系,只有充分理解各配置文件,才能使得配置Nagios服务如行云流水. 二.Nagios配置文件详解: 1.主配置文件(nagios.cfg): Nagios的主配置文件是用来定义Nagios服务的基本参数信息的,其中包括:对象定义文件的声明.CGI配置文件的声明.资源定义文件的声明等.其常用参数如下: log_file=/usr/local/n

Hadoop1.2.1 配置文件详解

首先我们先回顾一下Hadoop的一些概念: Apache Hdoop 1.x 组成 NameNode(元数据服务器) Secondary NameNode(辅助元数据服务器) JobTracker(任务调度员) DataNodes(块存储) TaskTrackers(任务执行) HDFS文件系统 NameNoode:属于管理层,用于管理数据存储 SecondaryNameNode:也属于管理层,辅助NameNode进行管理 DataNode:属于应用层,用户进行数据的存储,被NameNode进行

ThinkPHP源码阅读2-----C函数配置文件详解

ThinkPHP的配置非常灵活,可自定义加载.大概看了一下,一共有这几个地方会加载配置文件,方便以后的读取 /** * 获取和设置配置参数 支持批量定义 * * @param string|array $name * 配置变量 * @param mixed $value * 配置值 * @return mixed */ function C($name = null, $value = null) { static $_config = array (); // 无参数时获取所有 if (emp

Zabbix配置文件详解之服务端——zabbix_server

作为zabbix的部署,这里就不说了,网上一大堆文档,但关于配置文件的说明就比较少,这里列出服务端的配置文件zabbix_server的详细解释,感谢我主管的功劳. Zabbix Server端配置文件说明 # This is a configuration file for Zabbix Server process # To get more information about Zabbix, # visit http://www.zabbix.com ############ GENERA

Spring AOP注解通过@Autowired,@Resource,@Qualifier,@PostConstruct,@PreDestroy注入属性的配置文件详解

原创整理不易,转载请注明出处:Spring AOP注解通过@Autowired,@Resource,@Qualifier,@PostConstruct,@PreDestroy注入属性的配置文件详解 代码下载地址:http://www.zuidaima.com/share/1772661373422592.htm 本文介绍了使用Spring注解注入属性的方法.使用注解以前,注入属性通过类以及配置文件来实现.现在,注入属性可以通过引入@Autowired注解,或者@Resource,@Qualifi

[转]Web.config配置文件详解(新手必看)

本文转自:http://www.cnblogs.com/gaoweipeng/archive/2009/05/17/1458762.html 花了点时间整理了一下ASP.NET Web.config配置文件的基本使用方法.很适合新手参看,由于Web.config在使用很灵活,可以自定义一些节点.所以这里只介绍一些比较常用的节点. <?xml version="1.0"?> <!--注意: 除了手动编辑此文件以外,您还可以使用 Web 管理工具来配置应用程序的设置.可以