镜像创建乏味耗时?为啥不用DockerFile
发布时间:2022-06-04 12:31:30 所属栏目:云计算 来源:互联网
导读:Dockerfile是为快速构建Docker Image而设计的,它为构建镜像提供了简单的语法。Docker 会读取当前目录下的命名为Dockerfile的纯文本文件并执行里面的指令构建出一个Docker Image,这样,在Docker中创建镜像会更加简单,并且易用。本篇文章对DockerFile入门知
|
Dockerfile是为快速构建Docker Image而设计的,它为构建镜像提供了简单的语法。Docker 会读取当前目录下的命名为Dockerfile的纯文本文件并执行里面的指令构建出一个Docker Image,这样,在Docker中创建镜像会更加简单,并且易用。本篇文章对DockerFile入门知识及在实践过程中的使用技巧进行整合,希望能够帮助您在使用Dockerfiles以及构建镜像时受益。 还记得我们介绍过的15个Docker命令吗?那15个命令在手动创建镜像时会用到,它们涵盖镜像的创建、提交、搜索、pull和push的功能。 现在问题来了,既然Docker能自动创建镜像,那为什么要选择耗时而又乏味的方式来创建镜像呢? Docker为我们提供了Dockerfile来解决自动化的问题。在这篇文章中,我们将讨论什么是Dockerfile,它能够做到的事情以及DockerFile一些基本语法。 命令为易于自动化 Dockerfile是包含创建镜像所需要的全部指令。基于在DockerFile中的指令,我们可以使用Docker build命令来创建镜像。通过减少镜像和容器的创建过程来简化部署。 Dockerfiles支持支持的语法命令如下: 复制 INSTRUCTION argument 指令不区分大小写。但是,命名约定为全部大写。 所有Dockerfile都必须以FROM命令开始。 FROM命令会指定镜像基于哪个基础镜像创建,以及接下来的命令也会基于这个基础镜像(译者注:CentOS和Ubuntu有些命令可是不一样的)。FROM命令可以使用多次,表示会创建多个镜像。具体语法如下: 复制 FROM <image name> 例如: 复制 FROM ubuntu 1. 上面的指定告诉我们,新的镜像将基于Ubuntu的镜像来构建。 继FROM命令,DockefFile还提供了一些其它的命令以实现自动化。在文本文件或Dockerfile文件中这些命令的顺序就是它们被执行的顺序。 让我们了解一下这些有趣的Dockerfile命令吧。 1. MAINTAINER:设置该镜像的作者。语法如下: 复制 MAINTAINER <author name> 2. RUN:在shell或者exec的环境下执行的命令。RUN指令会在新创建的镜像上添加新的层,接下来提交的结果用于在Dockerfile的下一条指令。语法如下: 复制 RUN 《command》 3. ADD:复制文件指令,它有两个参数<source>和<destination>。destination是容器内的路径。source可以是URL或者是启动配置上下文中的一个文件。语法如下: 复制 ADD 《src》 《destination》 4. CMD:提供了容器默认的执行命令。 Dockerfile只允许CMD指令使用一次。 使用多个CMD会抵消之前所有的,只有最后一个生效。 CMD有三种形式: 复制 CMD ["executable","param1","param2"] CMD ["param1","param2"] CMD command param1 param2 5. EXPOSE:指定容器在运行时监听的端口。语法如下: 复制 EXPOSE <port>; 6. ENTRYPOINT:配置容器一个可执行的命令,这意味着在每次使用镜像创建容器时一个特定的应用程序可以被设置为默认程序。同时也意味着该镜像每次被调用时仅能运行指定的应用。类似于CMD,Docker只允许一个ENTRYPOINT,多个ENTRYPOINT会抵消之前所有的,只执行最后的ENTRYPOINT指令。语法如下: 复制 ENTRYPOINT [‘executable’, ‘param1’,’param2’] ENTRYPOINT command param1 param2 7. WORKDIR:指定RUN、CMD与ENTRYPOINT命令的工作目录。语法如下: 复制 WORKDIR /path/to/workdir 1. 8. ENV:设置环境变量。它们使用键值对,并增加运行的程序的灵活性。语法如下: 复制 ENV <key> <value> 1. 9. USER:镜像正在运行时设置一个UID。语法如下: 复制 USER <uid> 1. 10. VOLUME:授权访问从容器内到主机上的目录。语法如下: 复制 VOLUME ['/data'] 1. (编辑:桂林站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
站长推荐


