资讯专栏INFORMATION COLUMN

Dockerfile指令汇总及解析

suemi / 2408人阅读

摘要:命令可能是最重要的命令。命令必须是的首个命令。命令有两个参数,源和目标。命令是执行命令的核心部分。命令用于设置指明的命令的运行目录。

原文地址:http://www.maoyupeng.com/dockerfile-command-introduction.html

什么是Dockerfile

Dockerfile是由一系列命令和参数构成的脚本,这些命令应用于基础镜像并最终创建一个新的镜像。它们简化了从头到尾的流程并极大的简化了部署工作。Dockerfile从FROM命令开始,紧接着跟随者各种方法,命令和参数。其产出为一个新的可以用于创建容器的镜像。

当你在使用 Docker构建镜像的时候,每一个命令都会在前一个命令的基础上形成一个新层。这些基础镜像可以用于创建新的容器。本篇文章将手把手教您如何从基础镜像,一步一步,一层一层的从Dockerfile构建容器的过程。

Dockerfile示例
# Version 1.0
FORM ubuntu:14.04
MAINTAINER Mao "hongtu1993@sina.cn"
RUN apt-get update && apt-get install -y nginx
RUN echo "Hello,I am work" > /usr/share/nginx/html/index.html
EXPOSE 80 80
Docker执行步骤分析

以上Dockerfile示例中,每条指令都会创建一个新的镜像层并对镜像进行提交.Docker执行Dockerfile大致流程:

Docker从基础镜像运行一个容器;

执行一条指令,对容器做出修改;

执行类似docker commit的操作,提交一个新的镜像层;

Docker再基于刚提交的镜像运行一个新容器;

执行Dockerfile中的下一条指令,直到所有指令都执行完毕;

示例解析

FROM:每个dockerfile的第一条命令是FROM.FROM指令指定一个已经存在的镜像,则代表FROM后续的指令都是基于该镜像(ubuntu14.04)进行的.

MAINTAINER:该指令告诉Docker,作者和邮箱地址

RUN:通俗地说,RUN指令会在shell里使用命令包装器 /bin/sh -c 来执行.如果在不支持shell的平台上运行,则可使用exec格式的RUN指令RUN ["apt-get","install","-y","nginx"]

EXPOSE: 向外公开端口

Dockerfile指令汇总及解析 MAINTAINER

我建议这个命令放在Dockerfile的起始部分,虽然理论上它可以放置于Dockerfile的任意位置。这个命令用于声明作者,并应该放在FROM的后面。

# MAINTAINER [name] [email]
MAINTAINER authors_name "hongtu1993@sina.cn"
FROM

FROM命令可能是最重要的Dockerfile命令。改命令定义了使用哪个基础镜像启动构建流程。基础镜像可以为任意镜 像。如果基础镜像没有被发现,Docker将试图从Docker image index来查找该镜像。FROM命令必须是Dockerfile的首个命令。

# FROM [image name]

FROM ubuntu 
ADD

ADD命令有两个参数,源和目标。它的基本作用是从源系统的文件系统上复制文件到目标容器的文件系统。如果源是一个URL,那该URL的内容将被下载并复制到容器中。

# ADD [source directory or URL] [destination directory]

ADD /my_app_folder /my_app_folder 
RUN

RUN命令是Dockerfile执行命令的核心部分。它接受命令作为参数并用于创建镜像。不像CMD命令,RUN命令用于创建镜像(在之前commit的层之上形成新的层)。

# RUN [command]

RUN apt-get update
CMD

RUN命令相似,CMD可以用于执行特定的命令。和RUN不同的是,这些命令不是在镜像构建的过程中执行的,而是在用镜像构建容器后被调用。

# CMD application "argument", "argument", ..

CMD "echo" "Hello Mao!"
ENTRYPOINT

ENTRYPOINT帮助你配置一个容器使之可执行化,如果你结合CMD命令和ENTRYPOINT命令,你可以从CMD命令中移除“application”而仅仅保留参数,参数将传递给ENTRYPOINT命令。

# Usage: ENTRYPOINT application "argument", "argument", ..
# Remember: arguments are optional. They can be provided by CMD
# or during the creation of a container.
ENTRYPOINT echo

# Usage example with CMD:
# Arguments set with CMD can be overridden during *run*
CMD "Hello docker!"
ENTRYPOINT echo
ENV

ENV命令用于设置环境变量。这些变量以”key=value”的形式存在,并可以在容器内被脚本或者程序调用。这个机制给在容器中运行应用带来了极大的便利。

# ENV key value

ENV SERVER_WORKS 4
USER

USER命令用于设置运行容器的UID。

# USER [UID]

USER 751
VOLUME

VOLUME命令用于让你的容器访问宿主机上的目录。

# VOLUME ["/dir_1", "/dir_2" ..]

VOLUME ["/my_files"]
WORKDIR

WORKDIR命令用于设置CMD指明的命令的运行目录。

# WORKDIR /path

WORKDIR ~/
EXPOSE

EXPOSE指令用来告诉Docker这个容器在运行时会监听哪些端口,Docker在连接不同的容器(使用–link参数)时使用这些信息;
两个Docker的核心概念是可重复和可移植。镜像应该可以运行在任何主机上并且运行尽可能多的次数。在 Dockerfile中你有能力映射私有和公有端口,但是你永远不要通过Dockerfile映射公有端口。通过映射公有端口到主机上,你将只能运行一个容器化应用程序实例。(译者注:运行多个端口不就冲突啦)

# EXPOSE [port]

# private and public mapping
EXPOSE 80:8080

# private only
EXPOSE 80

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/26731.html

相关文章

  • 并存共生or相爱相杀?容器、虚拟机与Docker概念全解析

    摘要:本文立足于新手,从容器和虚拟机两个大的概念入手,由浅入深,由宏转微,为我们解析了的方方面面。出于各种考量与需求,容器在外观上与虚拟机非常相似。大家可以在数秒钟内完成容器的创建与运行,而虚拟机则由于需要引导完整的虚拟操作系统而耗费更多时间。 当小数看到这篇文章时内心是激动的,因为或许介绍Docker容器的文章有无数,但是如此清晰易懂、对小白如此友好的却不多见。本文立足于新手,从容器和虚拟...

    aboutU 评论0 收藏0
  • Docker技术之构建镜像和网络模式解析

    Docker技术之构建镜像和网络模式解析 img{ display:block; margin:0 auto !important; width:100%; } body{ width:75%; ...

    不知名网友 评论0 收藏3004
  • Dockerfile参考

    摘要:例如,以下命令将启动一个默认监控端口的命令行参数将被追加到以形式的所有元素后面,并且覆盖使用指定的所有元素。这种形式将使用处理代替环境变量,并且将忽略任何或者命令的命令行参数。下表显示了对不同组合执行的命令 Docker可以从Dockerfile中读取指令来自动构建镜像。Dockerfile是一个文本文件,它包含了用户可以在命令调用以制作镜像的命令。用户可以使用docker build...

    Jaden 评论0 收藏0
  • 从零开始学习 Docker

    摘要:此命令下载测试镜像并在容器中运行它。国内很多云服务商都提供了加速器服务,例如阿里云加速器注册用户并且申请加速器,会获得如这样的地址。获取镜像阿里云镜像库上有大量的高质量的镜像可以用,这里我们就说一下怎么获取这些镜像并运行。 showImg(https://segmentfault.com/img/remote/1460000012924583); 这篇文章是我学习 Docker 的记录...

    lily_wang 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<