下面是一个基本的Dockerfile
FROM ubuntu:latest MAINTAINER Scott P. Gallagher <email@somewhere.com> RUN apt-get update && apt-get install -y apache2 ADD 000-default.conf /etc/apache2/sites-available/ RUN chown root:root /etc/apache2/sites-available/000-default.conf EXPOSE 80 CMD ["/usr/sbin/apache2ctl", "-D", "FOREGROUND"]
下面简单引用一段dockfile指令介绍:
指令
指令的一般格式为 INSTRUCTION arguments,指令包括 FROM、MAINTAINER、RUN 等。
FROM
格式为 FROM <image>或FROM <image>:<tag>。
第一条指令必须为 FROM 指令。并且,如果在同一个Dockerfile中创建多个镜像时,可以使用多个 FROM 指令(每个镜像一次)。
MAINTAINER
格式为 MAINTAINER <name>,指定维护者信息。
LABEL
LABEL命令用来增加镜像的额外信息,它可以是包括版本号或者一个描述的何信息,你应该尽量将labels放到一行,每次使用一个Label,就会给镜像增加一层,用了太多的标签也会导致镜像变得更低效。可以用inspect命令查看label信息:
$docker inspect <image_id>
RUN
格式为 RUN <command> 或 RUN ["executable", "param1", "param2"]。
前者将在 shell 终端中运行命令,即 /bin/sh -c;后者则使用 exec 执行。指定使用其它终端可以通过第二种方式实现,例如 RUN ["/bin/bash", "-c", "echo hello"]。
每条 RUN 指令将在当前镜像基础上执行指定命令,并提交为新的镜像。当命令较长时可以使用 \ 来换行。
CMD
支持三种格式
CMD ["executable","param1","param2"] 使用 exec 执行,推荐方式;
CMD command param1 param2 在 /bin/sh 中执行,提供给需要交互的应用;
CMD ["param1","param2"] 提供给 ENTRYPOINT 的默认参数;
指定启动容器时执行的命令,每个 Dockerfile 只能有一条 CMD 命令。如果指定了多条命令,只有最后一条会被执行。
如果用户启动容器时候指定了运行的命令,则会覆盖掉 CMD 指定的命令。
EXPOSE
格式为 EXPOSE <port> [<port>...]。
告诉 Docker 服务端容器暴露的端口号,供互联系统使用。在启动容器时需要通过 -P,Docker 主机会自动分配一个端口转发到指定的端口。
ENV
格式为 ENV <key> <value>。 指定一个环境变量,会被后续 RUN 指令使用,并在容器运行时保持。
可以通过docker inspect <IMAGE_ID> 来查看环境变量
可以在docker run 初始化命令时候用 -e 或者 --env 改变值
$ docker run -e username=superuser
$ docker run --env username=superuser
例子
ENV PG_MAJOR 9.3(或者 ENV PG_MAGOR=9.3)
ENV PG_VERSION 9.3.4
RUN curl -SL http://example.com/postgres-$PG_VERSION.tar.xz | tar -xJC /usr/src/postgress && …
ENV PATH /usr/local/postgres-$PG_MAJOR/bin:$PATH
ADD
格式为 ADD <src> <dest>。
该命令将复制指定的 <src> 到容器中的 <dest>。 其中 <src> 可以是Dockerfile所在目录的一个相对路径;也可以是一个 URL;还可以是一个 tar 文件(自动解压为目录)。
COPY
格式为 COPY <src> <dest>。
复制本地主机的 <src>(为 Dockerfile 所在目录的相对路径)到容器中的 <dest>。
当使用本地目录为源目录时,推荐使用 COPY。
ENTRYPOINT
两种格式:
ENTRYPOINT ["executable", "param1", "param2"]
ENTRYPOINT command param1 param2(shell中执行)。
配置容器启动后执行的命令,并且不可被 docker run 提供的参数覆盖。
每个 Dockerfile 中只能有一个 ENTRYPOINT,当指定多个时,只有最后一个起效。
VOLUME
格式为 VOLUME ["/data"]。
创建一个可以从本地主机或其他容器挂载的挂载点,一般用来存放数据库和需要保持的数据等。
USER
格式为 USER daemon。
指定运行容器时的用户名或 UID,后续的 RUN 也会使用指定用户。
当服务不需要管理员权限时,可以通过该命令指定运行用户。并且可以在之前创建所需要的用户,例如:RUN groupadd -r postgres && useradd -r -g postgres postgres。要临时获取管理员权限可以使用 gosu,而不推荐 sudo。
USER命令可以用在RUN,CMD或者ENTRYPOINT命令中。
WORKDIR
格式为 WORKDIR /path/to/workdir。
为后续的 RUN、CMD、ENTRYPOINT 指令配置工作目录。
可以使用多个 WORKDIR 指令,后续命令如果参数是相对路径,则会基于之前命令指定的路径。例如
WORKDIR /a
WORKDIR b
WORKDIR c
RUN pwd
则最终路径为 /a/b/c。
ONBUILD
格式为 ONBUILD [INSTRUCTION]。
配置当所创建的镜像作为其它新创建镜像的基础镜像时,所执行的操作指令。
例如,Dockerfile 使用如下的内容创建了镜像 image-A。
[...]
ONBUILD ADD . /app/src
ONBUILD RUN /usr/local/bin/python-build --dir /app/src
[...]
如果基于 image-A 创建新的镜像时,新的Dockerfile中使用 FROM image-A指定基础镜像时,会自动执行 ONBUILD 指令内容,等价于在后面添加了两条指令。
FROM image-A #Automatically run the followingADD . /app/srcRUN /usr/local/bin/python-build --dir /app/src
使用 ONBUILD 指令的镜像,推荐在标签中注明,例如 ruby:1.9-onbuild。
相关推荐
最后的.表示把当前目录的所有文件都打包到生成的image中去_x0008_Dockerfile语法RUN : 执行命令COPY :添加文件(尽可以复制本地的文件
Packer和Dockerfile技术介绍.pdf
docker 介绍 架构 安装 组成 命令 帮助命令 docker version docker info docker --help 镜像命令 docker images ... Dockerfile介绍 是什么 执行流程 关键字 数据卷 容器
主要介绍了使用Dockerfile部署nodejs服务的方法步骤,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
Docker基础-11-Dockerfile语法基本介绍.rar
本文将详细介绍如何使用 Dockerfile 来自动化构建镜像。 Dockerfile 是 Docker 容器化过程中的关键,通过本文的介绍,你应该对如何使用 Dockerfile 自动化构建镜像有了深入的了解。掌握 Dockerfile 的编写和使用,将...
介绍 此存储库包含Dockerfile和其他文件,以下载,安装和运行RDMA用户空间代码以及一些与Fabrics相关的NVMe代码。 构建Docker映像 跑步 docker build -t rdma:latest . 在安装了docker的计算机上此仓库的顶级文件夹...
本篇文章主要介绍了浅谈docker Dockerfile 指令 VOLUME 介绍 ,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
内容概要:本文详细介绍了Dockerfile的编写和优化技巧,涵盖了基本语法、常用指令、多阶段构建、环境变量与构建参数、健康检查、用户权限管理、数据持久化、网络配置等方面。文章通过丰富的示例,帮助读者理解如何...
本文将详细介绍如何使用 Dockerfile、SpringBoot 和 IDEA 实现项目的自动化部署。我们将从头开始,逐步介绍如何创建 SpringBoot 项目、编写 Dockerfile 文件、打包项目、部署到服务器并启动容器。 创建 SpringBoot ...
Dockfile 介绍: Dockfile是一种被Docker程序解释的脚本,Dockerfile由一条一条的指令组成,每条指令对应Linux下面的一条命令。Docker程序将这些Dockerfile指令翻译真正的Linux命令。Dockerfile有自己书写格式和支持...
详细介绍Docker的每一个只是细节,本册中主要介绍了Dockerfile的编写,各个指令的语法与用法
主要介绍了dockerfile echo指定文件多行文本的方法实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
主要介绍了Dockerfile中的ENV指令的具体使用详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧