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



本文转自 shouhou2581314 51CTO博客,原文链接:http://blog.51cto.com/thedream/1655322,如需转载请自行联系原作者

优秀的个人博客,低调大师

微信关注我们

原文链接:https://yq.aliyun.com/articles/555925

转载内容版权归作者及来源网站所有!

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。

相关文章

发表评论

资源下载

更多资源
优质分享Android(本站安卓app)

优质分享Android(本站安卓app)

近一个月的开发和优化,本站点的第一个app全新上线。该app采用极致压缩,本体才4.36MB。系统里面做了大量数据访问、缓存优化。方便用户在手机上查看文章。后续会推出HarmonyOS的适配版本。

Oracle Database,又名Oracle RDBMS

Oracle Database,又名Oracle RDBMS

Oracle Database,又名Oracle RDBMS,或简称Oracle。是甲骨文公司的一款关系数据库管理系统。它是在数据库领域一直处于领先地位的产品。可以说Oracle数据库系统是目前世界上流行的关系数据库管理系统,系统可移植性好、使用方便、功能强,适用于各类大、中、小、微机环境。它是一种高效率、可靠性好的、适应高吞吐量的数据库方案。

Apache Tomcat7、8、9(Java Web服务器)

Apache Tomcat7、8、9(Java Web服务器)

Tomcat是Apache 软件基金会(Apache Software Foundation)的Jakarta 项目中的一个核心项目,由Apache、Sun 和其他一些公司及个人共同开发而成。因为Tomcat 技术先进、性能稳定,而且免费,因而深受Java 爱好者的喜爱并得到了部分软件开发商的认可,成为目前比较流行的Web 应用服务器。

Java Development Kit(Java开发工具)

Java Development Kit(Java开发工具)

JDK是 Java 语言的软件开发工具包,主要用于移动设备、嵌入式设备上的java应用程序。JDK是整个java开发的核心,它包含了JAVA的运行环境(JVM+Java系统类库)和JAVA工具。