dockerfile指令介绍

DOCKERFILE指令:CMD,ENTRYPOINT,ADD,COPY,VOLUME,WORKDIR,USER,ONBUILD,ENV等

1.CMD:用于指定一个容器启动时要运行的命令。类似于RUN指令,只是RUN指令是指定镜像被构建时的命令,而CMD是指容器被启动时要运行的命令

docker run -i -t zhoufujin/apache  /bin/true 和  CMD ["/bin/true"] 等效

这里需要注意:使用docker run命令可以覆盖CMD指令。如果我们在Dockerfile中指定了CMD指令,同时在docker run中也指定了要运行的命令。命令行中的命令会覆盖dockerfile中的CMD指令

在dockerfile中只能指定一条CMD指令。如果指定了多条CMD指令,也只有最后一条CMD指令会被使用。如果想在启动容器时运行多个进程或多条命令,可以考虑使用类似的supervisor的服务管理工具。

2.ENTRYPOINT :ENTRYPOIN指令提供的命令不容易在启动容器时被覆盖。实际上,在docker run命令行中指定的任何参数都会被当做参数再次传递给ENTRYPOIN指定中指定的命令。

ENTRYPOINT ["/usr/sbin/nginx", "-g" "daemon off;"]

如果需要,我们可以在运行时通过docker run的--entrypoint标志覆盖ENTRYPOINT指令

3.WORKDIR:用来在从镜像创建一个新容器时,在容器内部设置一个工作目录。ENTRYPOINT,CMD指定的程序都会 在这个目录中执行。

可以通过-w 标志在运行时覆盖工作目录

4.ENV:用来设置在镜像构建过程中的环境变量

例:ENV TARGET_DIR /opt/app

WORKDIR $TARGET_DIR

设置环境变量,WORKDIR引用环境变量

也可以使用docker run命令行中的 -e标志来传递环境变量

5.USER:用来指定该镜像以什么样的用户去运行

也可以在docker run 中通过-u选项来覆盖指定指令的值。

6.VOLUME:用来向基于镜像创建的容器添加卷。

卷功能,可以让我们将数据(如源代码),数据库或者其他内容添加到镜像中,而不是将这些内容提交到镜像汇总,并且运行我们在多个容器中共享

这些内容

例:VOLUME ["/opt/project"] 这条指令将会为基于此镜像创建的任何容器创建一个名为/opt/project的挂载点、

7.ADD:用来将构建环境下的文件和目录复制到镜像中。

不能对构建目录或者上下文之外的文件进行操作

ADD software.lic /opt/project/software.lic 这里的ADD指令会将构建目录下的software.lic复制到镜像中的/opt/project/software.lic

在ADD文件时,docker通过目的地址参数末尾的字符来判断文件源是目录还是文件。如果以/结尾就是目录,如果不是就是文件!

值得一提的一个ADD功能:如果将一个归档文件(gzip,bzip2,xz)指定为源文件,docker将会自动将归档文件解开

如:ADD latest.tar.gz /var/www/wordpress/

这条命令会将归档文件latest.tar.gz解开到/var/www/wordpress/ 中。如果目的位置不存在的话,docker将会为我们创建这个全路径,新创建的而文件和目录的模式为0755,并且uid和gid都是0.

8.COPY:类似于ADD,他们的根本不同是COPY 只关心在结构上下文中复制本地文件,而不会去做文件提取和解压的工作。

例:

COPY conf.d/ /etc/apache2/ 这条指令将会将本地conf.d目录 中的文件复制到/etc/apache2/

这里注意:文件路径必须是一个与当前构建环境相对应的文件或者目录,本地文件都放到和Dockerfile同一个目录下。COPY指令的目的位置必须是容器内的一个绝对路径。

任何由该指令创建的文件或者目录的uid和gid都会设置为0.

如果源文件是一个目录,那么这个目录将整个被复制到容器中,包括文件系统元数据。如果源文件为任何类型的文件,则该文件会随同元数据一起被复制。如果目的位置不存在,docker将会自动创建所有需要的目录结构。

9:ONBUILD:为镜像添加触发器。当一个镜像被用作其他镜像的基础镜像时,改镜像中的触发器将被执行。

触发器可以是任何构建指令

ONBUILD RUN cd app/src

ONBUILD 触发器会按照在父镜像中指定的顺序执行,并且只能被继承一次(也就是只能在子镜像中执行,而不会再孙子镜像中运行)

时间: 2024-10-04 02:36:32

dockerfile指令介绍的相关文章

docker学习笔记17:Dockerfile 指令 ONBUILD介绍

ONBUILD指令可以为镜像添加触发器.其参数是任意一个Dockerfile 指令. 当我们在一个Dockerfile文件中加上ONBUILD指令,该指令对利用该Dockerfile构建镜像(比如为A镜像)不会产生实质性影响. 但是当我们编写一个新的Dockerfile文件来基于A镜像构建一个镜像(比如为B镜像)时,这时构造A镜像的Dockerfile文件中的ONBUILD指令就生效了,在构建B镜像的过程中,首先会执行ONBUILD指令指定的指令,然后才会执行其它指令. 需要注意的是,如果是再利

Docker应用三:Dockerfile使用介绍

Dockerfile使用介绍 一.Dockerfile介绍 Dockerfile用于自定义创建docker镜像,是由一行行命令组成的文件. Docker file中的命令根据作用分为四类: 1.1.指定基础镜像信息指令: FROM 1.2.指定维护者信息指令: MAINTAINER 1.3.对镜像操作的指令: RUN:后面运行shell命令 COPY:拷贝本地文件到容器某目录 ADD:拷贝本地压缩包到容器,拷贝完成后在容器内部自动解压.也支持从url下载文件后拷贝到容器 VOLUME:指定容器中

Docker基本命令与使用 —— Dockerfile指令与构建(三)

一.Dockerfile指令上 1.指令格式 # Comment 注释, 以#开头 INSTRUCTION argument 以大写的指令+参数 #First Dockerfile 注释 FROM ubuntu:14.04 MAINTAINER dormancypress "[email protected]" RUN apt-get update RUN apt-get install -y nginx EXPOSE 80 From MAINTAINER RUN EXPOSE FRO

Dockerfile命令介绍及实例

Dockerfile命令介绍及实例 当你在使用 Docker构建镜像的时候,每一个命令都会在前一个命令的基础上形成一个新层.这些基础镜像可以用于创建新的容器.本篇文章将手把手教您如何从基础镜像,一步一步,一层一层的从Dockerfile构建容器的过程. 基础镜像可以用于创建Docker容器.镜像可以非常基础,仅仅包含操作系统:也可以非常丰富,包含灵巧的应用栈,随时可 以发布.当你在使用 Docker构建镜像的时候,每一个命令都会在前一个命令的基础上形成一个新层.这些基础镜像可以用于创建新的容器.

Dockerfile 指令

FROM 格式为 FROM <image>或FROM <image>:<tag> 第一条指令必须为 FROM 指令.并且,如果在同一个Dockerfile中创建多个镜像时,可以使用多个 FROM 指令(每个镜像一次) MAINTAINER 格式为 MAINTAINER <name>,指定维护者信息 RUN 格式为 RUN <command> 或 RUN ["executable", "param1", &q

AT&amp;T汇编指令介绍

linux中使用的AT&T格式的汇编指令,所以总结一下一些比较重要的指令. 1.寻址模式 有多种不同的寻址模式,允许不同形式的存储器引用.我们用符号Ea表示任意寄存器,R[Ea]表示它的值.M[addr]表示addr处地址的值. 题目: 答案:0x100,0xAB,0x108,0xFF,0x11,0x12,0xFF,0x11. 2.leal指令 加载有效地址指令其实是movl指令的变形.它的指令式是从存储器读数据到寄存器,但实际上它根本没有引用存储器.它的第一个操作数看上去是一个存储器引用,但该

C#中的预编译指令介绍

原文:C#中的预编译指令介绍 1.#define和#undef 用法: #define DEBUG #undef DEBUG #define告诉编译器,我定义了一个DEBUG的一个符号,他类似一个变量,但是它没有具体的值,可以将它看为一个符号而已.#undef就是删除这个符号的定义.如果符号DEBUG没定义过,则#undef不起作用,否则#define不起作用.二者都必须放在源代码之前.二者的顺序看代码的顺序: #define DEBUG #undef  DEBUG 这样的话,DEBUG是没有定

AngularJs的常用的指令介绍

Angular Js的常用指令介绍 1.内置指令(前缀为“ng”): a. Ng-app: 标记和指定了AngularJs脚本作用域: b. Ng-model: 设置表单的具体的控件与当前作用域的属性的值的绑定: 如:<input type="text" ng-model="userName" /><br /> <span>Hello {{userName}}!</span> c. Ng-init: 初始化指定内部作用

Docker Dockerfile 指令

Dockerfile 指令 CMD CMD指令用于指定一个容器启动时要运行的命令.这有点儿类似于RUN指令,只是RUN指令是指定镜像被构建时要运行的命令,而CMD是指定容器被启动时要运行的命令.这和使用docker run命令启动容器时指定要运行的命令非常类似 $ sudo docker run -i -t jamtur01/static_web /bin/true 可以认为上述命令和在Dockerfile中使用如下的CMD 指令是等效的. CMD ["/bin/true"] 选项和命