`
dbp_cn
  • 浏览: 88143 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

Dockerfile介绍

 
阅读更多

下面是一个基本的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。
 
ENTRYPOINT 与CMD的差别:
1.ENTRYPOINT,表示镜像在初始化时需要执行的命令,不可被重写覆盖,需谨记
2.CMD,表示镜像运行默认参数,可被重写覆盖
3.ENTRYPOINT/CMD都只能在文件中存在一次,并且最后一个生效 多个存在,只有最后一个生效,其它无效!
4.需要初始化运行多个命令,彼此之间可以使用 && 隔开,但最后一个须要为无限运行的命令,需切记!
 

 Dockerfile-最佳实践

1. 应该有使用.dockerignore 文件的习惯。

2.最小化每个镜像的包的数量 ,保持他们尽可能小。不安装不必要的包。

3.每个容器只运行一个程序进程。每次当你需要一个新的应用程序,最好是使用一个新的容器来运行它。

4.命令排序:

  按实际使用的命令顺序排序,如下: 

          apt-get updata && apt-get install -y

  或者按字母顺序排序:

        apt-get update && apt-get install -y \ apache2 \

                                      git\

                                      mysql

 

 

分享到:
评论

相关推荐

    lsgwr#docker-k8s-devops#第3章 Dockerfile介绍1

    最后的.表示把当前目录的所有文件都打包到生成的image中去_x0008_Dockerfile语法RUN : 执行命令COPY :添加文件(尽可以复制本地的文件

    Packer和Dockerfile技术介绍.pdf

    Packer和Dockerfile技术介绍.pdf

    docker学习思维笔记.xmind

    docker 介绍 架构 安装 组成 命令 帮助命令 docker version docker info docker --help 镜像命令 docker images ... Dockerfile介绍 是什么 执行流程 关键字 数据卷 容器

    使用Dockerfile部署nodejs服务的方法步骤

    主要介绍了使用Dockerfile部署nodejs服务的方法步骤,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

    Docker基础-11-Dockerfile语法基本介绍.rar

    Docker基础-11-Dockerfile语法基本介绍.rar

    Dockerfile详解篇.doc

    本文档详细介绍了Dockerfile的使用和应用,涵盖了Dockerfile的基本概念、语法格式、FROM指令、MAINTAINER指令、LABEL指令等知识点。 Dockerfile基本概念 Dockerfile是一个文档,客户可以基于Dockerfile生成新的...

    用dockerfile打包带有nginx-monitor-vts模块的nginx镜像

    本篇文章将详细介绍如何使用Dockerfile打包带有Nginx-monitor-vts模块的Nginx镜像,从而为用户提供性能监控和流量分析的能力。 首先,我们需要了解Nginx-monitor-vts模块,这是一个用于Nginx的第三方模块,它可以...

    Dockerfile 魔法:自动化构建镜像的艺术

    本文将详细介绍如何使用 Dockerfile 来自动化构建镜像。 Dockerfile 是 Docker 容器化过程中的关键,通过本文的介绍,你应该对如何使用 Dockerfile 自动化构建镜像有了深入的了解。掌握 Dockerfile 的编写和使用,将...

    docker-noload:用于实现用户空间RDMA代码,SPDK,p2pmem以及用于NVMe-oF开发的相关工具的Dockerfile,以支持Eideticom NoLoad(tm)

    介绍 此存储库包含Dockerfile和其他文件,以下载,安装和运行RDMA用户空间代码以及一些与Fabrics相关的NVMe代码。 构建Docker映像 跑步 docker build -t rdma:latest . 在安装了docker的计算机上此仓库的顶级文件夹...

    浅谈docker Dockerfile 指令 VOLUME 介绍

    本篇文章主要介绍了浅谈docker Dockerfile 指令 VOLUME 介绍 ,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

    Dockerfile详解与实战:构建高效容器化应用

    内容概要:本文详细介绍了Dockerfile的基本概念、语法和关键字,并通过多个实战案例展示了如何使用Dockerfile构建高效的容器化应用。文章首先讲解了Dockerfile的作用及其重要性,接着通过具体的示例演示了如何编写...

    Docker进阶指南:Dockerfile的编写与优化

    内容概要:本文详细介绍了Dockerfile的编写和优化技巧,涵盖了基本语法、常用指令、多阶段构建、环境变量与构建参数、健康检查、用户权限管理、数据持久化、网络配置等方面。文章通过丰富的示例,帮助读者理解如何...

    dockerfile+springboot+idea发布使用1

    本文将详细介绍如何使用 Dockerfile、SpringBoot 和 IDEA 实现项目的自动化部署。我们将从头开始,逐步介绍如何创建 SpringBoot 项目、编写 Dockerfile 文件、打包项目、部署到服务器并启动容器。 创建 SpringBoot ...

    Dockerfile 为 Redis 创建 Docker 容器映像 .zip

    sameersbn/redis介绍贡献问题入门安装快速入门命令行参数持久性验证日志维护升级外壳访问介绍Dockerfile为Redis创建Docker容器镜像。Redis 是一个开源的、BSD 许可的、高级键值缓存和存储。它通常被称为数据结构...

    Python_Dockerfile_自动化部署_1741403130.zip

    "简介.txt"文件很可能是对整个教程内容的简短介绍,包括教程的编写目的、主要学习点以及可能的学习前提条件。通过阅读这个简介,学习者可以对教程的全貌有一个基本的了解,并且可以根据自己的实际情况判断是否适合...

    容器技术:Dockerfile编写与镜像管理及容器编排的应用实例解析

    内容概要:本文深入介绍了Docker容器技术和编排的相关内容,主要包括两大部分——Dockerfile的进阶与镜像管理和容器编排入门。在 Dockerfile的编写方面,详细探讨了从基础到高级的技术运用,涵盖了多阶段构建的方法...

    Dockerfile 部署java web的环境详解

    Dockfile 介绍: Dockfile是一种被Docker程序解释的脚本,Dockerfile由一条一条的指令组成,每条指令对应Linux下面的一条命令。Docker程序将这些Dockerfile指令翻译真正的Linux命令。Dockerfile有自己书写格式和支持...

Global site tag (gtag.js) - Google Analytics