广告
返回顶部
首页 > 资讯 > 服务器 >Dockerfile文件详解
  • 818
分享到

Dockerfile文件详解

2024-04-02 19:04:59 818人浏览 薄情痞子
摘要

目录什么是Dockerfile?Dockerfile的基本结构Dockerfile文件说明FROMMaiNTAINERRUNshell执行exec执行ADDCOPYCMDENTRYP

什么是dockerfile?

Dockerfile是一个包含用于组合映像的命令的文本文档。可以使用在命令行中调用任何命令。 Docker通过读取Dockerfile中的指令自动生成映像。

docker build命令用于从Dockerfile构建映像。可以在docker build命令中使用-f标志指向文件系统中任何位置的Dockerfile。

例:

docker build -f /path/to/a/Dockerfile

Dockerfile的基本结构

Dockerfile 一般分为四部分:基础镜像信息、维护者信息、镜像操作指令和容器启动时执行指令,’#’为 Dockerfile 中的注释。

Dockerfile文件说明

Docker以从上到下的顺序运行Dockerfile的指令。为了指定基本映像,第一条指令必须是FROM。一个声明以字符开头则被视为注释。可以在Docker文件中使用RUNCMDFROMEXPOSEENV等指令。

在这里列出了一些常用的指令。

FROM

指定基础镜像,必须为第一个命令

#格式:
  FROM <image>
  FROM <image>:<tag>
  FROM <image>@<digest>
#示例:
  FROM Mysql:5.6

注:tag或digest是可选的,如果不使用这两个值时,会使用latest版本的基础镜像

MAINTAINER

维护者信息

#格式:
    MAINTAINER <name>
#示例:
    MAINTAINER Jasper Xu
    MAINTAINER sorex@163.com
    MAINTAINER Jasper Xu <sorex@163.com>

RUN

构建镜像时执行的命令

RUN用于在镜像容器中执行命令,其有以下两种命令执行方式:

shell执行

#格式:
    RUN <command>

exec执行

#格式:
    RUN ["executable", "param1", "param2"]
#示例:
    RUN ["executable", "param1", "param2"]
    RUN apk update
    RUN ["/etc/execfile", "arg1", "arg1"]

注:RUN指令创建的中间镜像会被缓存,并会在下次构建中使用。如果不想使用这些缓存镜像,可以在构建时指定--no-cache参数,如:docker build --no-cache

ADD

将本地文件添加到容器中,tar类型文件会自动解压(网络压缩资源不会被解压),可以访问网络资源,类似wget

#格式:
    ADD <src>... <dest>
    ADD ["<src>",... "<dest>"] 用于支持包含空格的路径
#示例:
    ADD hom* /mydir/          # 添加所有以"hom"开头的文件
    ADD hom?.txt /mydir/      # ? 替代一个单字符,例如:"home.txt"
    ADD test relativeDir/     # 添加 "test" 到 `WORKDIR`/relativeDir/
    ADD test /absoluteDir/    # 添加 "test" 到 /absoluteDir/

COPY

功能类似ADD,但是是不会自动解压文件,也不能访问网络资源

CMD

构建容器后调用,也就是在容器启动时才进行调用。

#格式:
    CMD ["executable","param1","param2"] (执行可执行文件,优先)
    CMD ["param1","param2"] (设置了ENTRYPOINT,则直接调用ENTRYPOINT添加参数)
    CMD command param1 param2 (执行shell内部命令)
#示例:
    CMD echo "This is a test." | wc -
    CMD ["/usr/bin/wc","--help"]

注:CMD不同于RUN,CMD用于指定在容器启动时所要执行的命令,而RUN用于指定镜像构建时所要执行的命令。[/code]

ENTRYPOINT

配置容器,使其可执行化。配合CMD可省去"application",只使用参数。

#格式:
    ENTRYPOINT ["executable", "param1", "param2"] (可执行文件, 优先)
    ENTRYPOINT command param1 param2 (shell内部命令)
#示例:
    FROM ubuntu
    ENTRYPOINT ["top", "-b"]
    CMD ["-c"]

注:ENTRYPOINT与CMD非常类似,不同的是通过docker run执行的命令不会覆盖ENTRYPOINT,而docker run命令中指定的任何参数,都会被当做参数再次传递给ENTRYPOINT。Dockerfile中只允许有一个ENTRYPOINT命令,多指定时会覆盖前面的设置,而只执行最后的ENTRYPOINT指令。

LABEL

用于为镜像添加元数据

#格式:
    LABEL <key>=<value> <key>=<value> <key>=<value> ...
#示例:
  LABEL version="1.0" description="这是一个WEB服务器" by="IT笔录"

注:使用LABEL指定元数据时,一条LABEL指定可以指定一或多条元数据,指定多条元数据时不同元数据之间通过空格分隔。推荐将所有的元数据通过一条LABEL指令指定,以免生成过多的中间镜像。

ENV

设置环境变量

#格式:
    ENV <key> <value>  #<key>之后的所有内容均会被视为其<value>的组成部分,因此,一次只能设置一个变量
    ENV <key>=<value> ...  #可以设置多个变量,每个变量为一个"<key>=<value>"的键值对,如果<key>中包含空格,可以使用\来进行转义,也可以通过""来进行标示;另外,反斜线也可以用于续行
#示例:
    ENV myName John Doe
    ENV myDog Rex The Dog
    ENV myCat=fluffy

EXPOSE

指定于外界交互的端口

#格式:
    EXPOSE <port> [<port>...]
#示例:
    EXPOSE 80 443
    EXPOSE 8080
    EXPOSE 11211/tcp 11211/udp

注:EXPOSE并不会让容器的端口访问到主机。要使其可访问,需要在docker run运行容器时通过-p来发布这些端口,或通过-P参数来发布EXPOSE导出的所有端口

VOLUME

用于指定持久化目录

#格式:
    VOLUME ["/path/to/dir"]
#示例:
    VOLUME ["/data"]
    VOLUME ["/var/www", "/var/log/apache2", "/etc/apache2"

 注:一个卷可以存在于一个或多个容器的指定目录,该目录可以绕过联合文件系统,并具有以下功能:

  • 1 卷可以容器间共享和重用
  • 2 容器并不一定要和其它容器共享卷
  • 3 修改卷后会立即生效
  • 4 对卷的修改不会对镜像产生影响
  • 5 卷会一直存在,直到没有任何容器在使用它

WORKDIR

工作目录,类似于cd命令

#格式:
    WORKDIR /path/to/workdir
#示例:
    WORKDIR /a  (这时工作目录为/a)
    WORKDIR b  (这时工作目录为/a/b)
    WORKDIR c  (这时工作目录为/a/b/c)

注:通过WORKDIR设置工作目录后,Dockerfile中其后的命令RUN、CMD、ENTRYPOINT、ADD、COPY等命令都会在该目录下执行。在使用docker run运行容器时,可以通过-w参数覆盖构建时所设置的工作目录。

USER

指定运行容器时的用户名或 UID,后续的 RUN 也会使用指定用户。使用USER指定用户时,可以使用用户名、UID或GID,或是两者的组合。当服务不需要管理员权限时,可以通过该命令指定运行用户。并且可以在之前创建所需要的用户

#格式:
  USER user
  USER user:group
  USER uid
  USER uid:gid
  USER user:gid
  USER uid:group

#示例:
  USER www

注:使用USER指定用户后,Dockerfile中其后的命令RUN、CMD、ENTRYPOINT都将使用该用户。镜像构建完成后,通过docker run运行容器时,可以通过-u参数来覆盖所指定的用户。

ARG

用于指定传递给构建运行时的变量

#格式:
    ARG <name>[=<default value>]
#示例:
    ARG site
    ARG build_user=www

ONBUILD

用于设置镜像触发器

#格式:
  ONBUILD [INSTRUCTION]
#示例:
  ONBUILD ADD . /app/src
  ONBUILD RUN /usr/local/bin/python-build --dir /app/src

注:当所构建的镜像被用做其它镜像的基础镜像,该镜像中的触发器将会被钥触发

以下是一个小例子:

# This my first Nginx Dockerfile
# Version 1.0

# Base images 基础镜像
FROM Centos

#MAINTAINER 维护者信息
MAINTAINER tianfeiyu 

#ENV 设置环境变量
ENV PATH /usr/local/nginx/sbin:$PATH

#ADD  文件放在当前目录下,拷过去会自动解压
ADD nginx-1.8.0.tar.gz /usr/local/  
ADD epel-release-latest-7.noarch.rpm /usr/local/  

#RUN 执行以下命令 
RUN rpm -ivh /usr/local/epel-release-latest-7.noarch.rpm
RUN yum install -y wget lftp GCc gcc-c++ make openssl-devel pcre-devel pcre && yum clean all
RUN useradd -s /sbin/nologin -M www

#WORKDIR 相当于cd
WORKDIR /usr/local/nginx-1.8.0 

RUN ./configure --prefix=/usr/local/nginx --user=www --group=www --with-Http_ssl_module --with-pcre && make && make install

RUN echo "daemon off;" >> /etc/nginx.conf

#EXPOSE 映射端口
EXPOSE 80

#CMD 运行以下命令
CMD ["nginx"]

最后用一张图解释常用指令的意义^-^

到此这篇关于Dockerfile文件的文章就介绍到这了。希望对大家的学习有所帮助,也希望大家多多支持编程网。

--结束END--

本文标题: Dockerfile文件详解

本文链接: https://www.lsjlt.com/news/152980.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Dockerfile文件详解
    目录什么是dockerfileDockerfile的基本结构Dockerfile文件说明FROMMAINTAINERRUNshell执行exec执行ADDCOPYCMDENTRYPO...
    99+
    2022-11-13
  • Dockerfile文件详细介绍
    目录一. dockerfile的介绍1.1 关于dockerfile1.2 dockerfile文件的组成部分1.3 dockerfile的执行二. docker bulid 命令的...
    99+
    2023-05-15
    Dockerfile文件详解 Dockerfile文件
  • Dockerfile文件有哪些命令
    这篇文章主要讲解了“Dockerfile文件有哪些命令”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Dockerfile文件有哪些命令”吧!一. dockerfile的介绍1.1 关于doc...
    99+
    2023-07-06
  • Dockerfile文件编写及构建镜像命令解析
    目录指令解析简单的Dockerfile文件Build命令添加dockerfile参数构建镜像构建容器并端口映射启动镜像上传到远程镜像仓库部署指令解析 FROM # 基于什么镜...
    99+
    2022-11-13
  • Docker构建文件Dockerfile简单入门
    1.Dockerfile介绍 在之前Docker的使用中,我们直接从仓库下载需要的镜像到本地,然后稍加配置就可以应用了,通常从仓库下载下来的镜像都是通用的,无任何私有化的东西,我们拿...
    99+
    2022-11-13
  • Dockerfile文件的基本结构是什么
    本篇内容介绍了“Dockerfile文件的基本结构是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!什么是dockerfileDocker...
    99+
    2023-07-02
  • 怎样利用Dockerfile文件部署PHP项目
    本篇文章主要给大家介绍了关于利用Dockerfile文件部署PHP项目的相关知识,环境部署一直是一个很大的问题,无论是开发环境还是生产环境,但是Docker将开发环境和生产环境以轻量级方式打包,提供了一致的环境,下面一起来看一下,希望对大家...
    99+
    2022-08-08
    php
  • AssemblyInfo.cs文件详解
    AssemblyInfo.cs是一个C#项目中的元数据文件,它包含了项目的一些重要信息,如程序集的版本号、标题、描述等。以下是Ass...
    99+
    2023-09-14
    详解
  • Parquet文件详解
    1、parquet文件简介 Apache Parquet是Apache Hadoop生态系统的一种免费的开源面向列的数据存储格式。 它类似于Hadoop中可用的其他列存储文件格式,如RCFile格式和ORC格式。 Apache Parque...
    99+
    2023-08-19
    hadoop 大数据 java
  • 详解build.gradle文件
    前言 一般来说一个新创建的项目中,有两个 build.gradle 文件,一个是工程目录下的,一个是 app 目录下的,这两个 build.gradle 文件对 Android Studio 项目的作...
    99+
    2023-09-03
    android android studio gradle
  • pom文件详解
    pom文件详解 前言什么是POM文件?POM文件的基本结构POM文件的常用配置项1. 坐标信息2. 依赖项配置3.构建配置4. 插件配置5. 仓库配置 父子pom父POM子POM父子POM的优点父子POM的使用 总结 前...
    99+
    2023-08-16
    java maven spring
  • AndroidManifest文件详解
    AndroidManifest 官方解释是应用清单(Manifest意思是货单),每个应用的根目录中都必须包含一个,并且文件名必须为AndroidManifest。这个文件中包含了APP的配置信息,系统需要根据里面的内容运行APP的代码,显...
    99+
    2023-08-18
    android android studio ide java
  • Linux文件/文件夹权限详解
    在Linux中,一个文件/文件夹的权限, 从文件/文件夹的归属来看,可以分为三类,一是文件/文件夹所有者权限、二是所有者所在的用户组权限、三是公共(不限)权限。 从文件本身的操作来看,也可以分为三类,一是读取权限、二是写入权限、三是执行权限...
    99+
    2023-10-24
    linux 运维 服务器
  • .Net AssemblyInfo.cs文件详解
    AssemblyInfo.cs文件是一个C#项目的元数据文件,用于指定程序集的属性和信息。它包含了程序集的版本号、作者、公司、版权信...
    99+
    2023-09-23
    .NET
  • Python 解压缩文件详解
    zipfile模块及相关方法介绍: 1 压缩 1.1 创建zipfile对象 zipfile.ZipFile(file, mode='r', compression=0, allowZip64=True, compresslevel=Non...
    99+
    2023-01-31
    解压缩 详解 文件
  • 详解Linux解压缩文件
    gzip 压缩:gzip -v 文件(夹)        eg: gzip -v b.log    ----> b...
    99+
    2022-06-04
    linux 解压缩文件
  • 怎么用docker Dockerfile文件制作自己的镜像
    本文小编为大家详细介绍“怎么用docker Dockerfile文件制作自己的镜像”,内容详细,步骤清晰,细节处理妥当,希望这篇“怎么用docker Dockerfile文件制作自己的镜像”文章能帮助大家解...
    99+
    2022-10-19
  • 利用Dockerfile文件部署php项目的全过程
    目录一、当前项目结构二、创建Dockerfile文件三、生成镜像文件四、使用镜像文件,并启动容器五、连接已启动的镜像容器六、 构建项目出现的问题七、删除容器、删除镜像文件八、镜像仓库...
    99+
    2022-11-13
  • python文件处理--文件读写详解
    目录1.读取文件2.写入文件总结1. 读取文件 文件读取很简单,就三步。 第一:在Windows的记事本中直接输入“愿你出走半生归来仍是少年!” 第二:通过代码读取文件 步骤: 使用open()函数打开文件...
    99+
    2022-06-02
    python python文件读写
  • Dockerfile及新型容器镜像构建技术详解
    目录一、容器镜像分类1、操作系统类2、应用类二、容器镜像获取方法1、在dockerhub直接下载2、把操作系统中文件系统打包为容器镜像3、把正在运行的容器打包为容器镜像,即docke...
    99+
    2023-05-16
    Dockerfile生成容器镜像 新型容器镜像构建技术 Dockerfile 新型容器镜像构建
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作