【Docker系列】Dockerfile 中指令作用介绍

这篇具有很好参考价值的文章主要介绍了【Docker系列】Dockerfile 中指令作用介绍。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言

当今容器技术已经成为了现代应用程序开发和部署的重要工具,Docker 作为当前最受欢迎的容器平台之一,提供了高效、轻量级的容器解决方案。而 Dockerfile,则是定义 Docker 容器镜像构建过程的文件,它包含了所有构建该镜像所需的指令及其参数。在本文中,我们将详细介绍 Dockerfile 中所有常见指令,以 centos7.9 镜像为例,并给出了相应的操作案例。

【Docker系列】Dockerfile 中指令作用介绍


指令 说明
FROM 指明当前的镜像基于哪个镜像构建
ARG 定义构建镜像过程中使用的变量
LABEL 标记镜像信息,添加元数据
EXPOSE 通知 Docker 容器在运行时监听指定的网络端口
ENV 指定环境变量
ENTRYPOINT 指定镜像的默认入口命令
VOLUME 创建一个数据卷挂载点
USER 指定运行容器时的用户名或 UID
WORKDIR 配置工作目录
RUN 运行指定命令
CMD 启动容器时指定默认执行的命令
ADD 添加内容到镜像
COPY 复制内容到镜像
ONBUILD 创建子镜像时指定自动执行的操作指令
STOPSIGNAL 指定退出的信号值
HEALTHCHECK 配置启动容器如何进行健康检查
SHELL 指定默认 shell 类型

一、配置指令

1.1、ARG

ARG 指令用于设置构建参数,在构建时可以通过 --build-arg 参数传递值。例如:

ARG VERSION=7.9.2009
FROM centos:${VERSION}

1.2、FROM

FROM 指令指定了所需要用到的基础镜像,指定构建该镜像所依赖的运行环境。例如:

FROM centos:7.9.2009

此指令需要在 Dockerfile 的开始处进行定义,并且只能被定义一次

1.3、LABEL

LABEL 指令用于设置镜像的作者和相关说明信息。其中,Maintainer 是一个特殊的标签,用于设置镜像的维护者信息(已废弃)。
例如:

LABEL maintainer="John Doe <john@doe.com>"
LABEL version="1.0"
LABEL description="This is a CentOS 7.9.2009 base image."

1.4、EXPOSE

EXPOSE 指令用于指定容器监听的网络端口号(一个或多个端口),但并不会将该端口暴露到宿主机环境,不能用于容器端口的绑定和映射。
例如:

EXPOSE 80/tcp
EXPOSE 443/tcp

1.5、ENV

ENV 指令用于定义环境变量(也可以直接通过 --env 参数在运行容器时传递环境变量)。环境变量可在容器内部通过 $VARIABLE_NAME 使用。
例如:

ENV HTTP_PROXY=http://proxy.example.com:8080/
ENV HTTPS_PROXY=https://proxy.example.com:

1.6、ENTRYPOINT

ENTRYPOINT 指令指定容器启动时要执行的命令。与CMD类似,但是 CMD 会在 ENTRYPOINT 声明的命令之后执行。
例如:

ENTRYPOINT ["/usr/sbin/nginx"]

1.7、VOLUME

VOLUME 指令声明了数据卷需要挂载到容器中,与宿主机上的一个目录相对应。
例如:

VOLUME ["/data", "/var/lib/mysql"]

1.8、USER

USER 指令设置运行容器时的用户账户信息。
例如:

USER appuser

1.9、WORKDIR

WORKDIR 指令设置了工作目录,即 RUN, CMD, ENTRYPOINT, COPY, ADD等指令执行时的默认路径。
例如:

WORKDIR /home/app/

1.10、ONBUILD

ONBUILD:定义触发器指令,在当前镜像被用于构建下一级镜像时被触发执行。
例如:

ONBUILD COPY conf/ /usr/local/nginx/conf/
ONBUILD RUN chown -R nginx.nginx /usr/local/nginx/conf/

1.11、STOPSIGNAL

STOPSIGNAL:设置容器停止信号。默认为 SIGTERM。
例如:

STOPSIGNAL SIGINT

1.12、HEALTHCHECK

HEALTHCHECK:健康检查指令,用于确定容器是否在正常工作。
例如:

HEALTHCHECK --interval=5s --timeout=3s CMD curl -f http://localhost/ || exit 1

1.13、SHELL

SHELL指定 SHELL 程序的路径或类型。
例如:

SHELL ["/bin/bash", "-c"]

二、操作指令

2.1、RUN

RUN 指令用于在容器内执行命令,这些命令将在构建期间被执行。
例如:

RUN yum -y update && \
    yum install -y nginx

2.2、CMD

CMD 指令指定容器启动后默认执行的命令。如果在 docker run 启动时提供了命令,则会覆盖 CMD 中的命令。
该指令定义了默认的命令或参数,当以交互方式启动容器时运行。Dockerfile 中只能有一个 CMD
例如:

CMD ["/usr/sbin/nginx","-g","daemon off;"]

2.3、ADD

ADD 指令与 COPY 相似,但它比 COPY 更强大。除了支持将本地文件复制到 Docker 镜像外,它还可以解压缩 tar 文件、下载远程 URL 并自动解压缩等多种操作。
例如:

ADD http://example.com/big.tar.xz /usr/src/things/
ADD test.tar.gz /tmp

2.4、COPY

该指令允许将文件从主机复制到容器内部。
例如:

COPY src /app/src
COPY my.cnf /etc/mysql/my.cnf
COPY target/*.jar /app.jar 

其中,src 是我们要复制的主机源目录,/app/src 指容器内的目标路径,my.cnf 和 *.jar 同理。
在第一个例子中,我们使用 ADD 下载并提取了一份压缩过的文件。在第二个例子中,我们添加了另一个本地存档文件。

三、整体Dockerfile介绍

其中,每个指令都有对应的语法和用法。下面我们通过一个基于 CentOS 7.9 镜像的示例来介绍各个指令的具体操作方法。

我们首先来构建一个简单的 HTTP 服务的镜像:

# 使用 Centos 7.9 作为基础镜像
FROM centos:7.9.2009

# 指定作者和相关镜像说明信息
LABEL maintainer="John Doe <john@doe.com>"
LABEL description="A basic HTTP service image"

# 定义构建参数APP_ROOT,并设置其值为 /app
ARG APP_ROOT=/app

# 设置环境变量,分别设置环境变量 APP_ROOT、LANG 和 PATH,以便后续操作可以访问到这些环境变量
ENV APP_ROOT ${APP_ROOT}
ENV LANG zh_CN.utf8
ENV PATH $APP_ROOT/bin:$PATH

# 创建工作目录,将工作目录切换到 APP_ROOT 环境变量所指定的路径,即 /app
WORKDIR $APP_ROOT

# 暴露端口 80
EXPOSE 80/tcp

# 添加文件到容器中,将当前目录下的 index.html 文件添加到容器中的 APP_ROOT 目录下
ADD index.html $APP_ROOT/

# 运行脚本文件,定义容器启动时默认运行的命令为以后台方式运行 python 内置的 HTTP 服务器,监听在容器的 80 端口上
CMD ["sh", "-c", "python -m http.server 80"]

总结

  • FROM:指定使用的基础镜像,格式为 FROM [:]。
  • RUN:在当前镜像中执行命令(例如安装软件包),格式为 RUN 。
  • CMD:定义默认的容器启动命令,格式为 CMD [“executable”, “param1”, “param2”]或者CMD command param1 param2。
  • ENTRYPOINT:与 CMD 相似,但会将参数传递给 ENTRYPOINT 而不是运行时才调用命令。
  • ADD/COPY:将本地文件添加到镜像中,格式为 ADD/COPY … 。其中 ADD 支持 url 解压缩等操作。
  • ENV:设置环境变量,格式为 ENV 。
  • ARG:定义构建参数,格式为 ARG [=]。
  • EXPOSE:声明容器打算监听的端口,格式为 EXPOSE [ …]。
  • WORKDIR:设置工作目录路径,格式为 WORKDIR /path/to/workdir。
  • VOLUME:在容器中创建一个挂载点,方便在宿主机上保存数据,格式为 VOLUME /path/to/volume。

以上是常用的一些 Dockerfile 指令,可以根据需要选取使用。总体而言,Dockerfile 的编写灵活性较高,能够满足不同场景的需求。文章来源地址https://www.toymoban.com/news/detail-463664.html

到了这里,关于【Docker系列】Dockerfile 中指令作用介绍的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Docker 学习笔记(二)- Dockerfile 指令详解

    格式 FROM 镜像 定制镜像是以一个镜像为基础,在其上进行定制。在一个 Dockerfile 中 FROM 是必备的指令,并且必须是第一条指令。 在 Docker Hub 上有非常多的高质量的官方镜像,有可以直接拿来使用的服务类的镜像,如 nginx 、 redis 、 mongo 、 mysql 、 httpd 、 php 、 tomcat 等;也有

    2024年02月19日
    浏览(23)
  • Docker学习笔记(三)Dockerfile指令详解

    基础镜像是构建镜像的起点,定制镜像都需要以一个镜像为基础,然后对其进行修改,From就是用来指定基础镜像的,因此Dockerfile中From是必备的指令,而且必须是第一条。 Docker中存在一个特殊镜像名为 scratch 这个镜像并不存在,仅表示一个空白的镜像,下一条指令会作为镜像

    2024年04月16日
    浏览(21)
  • Docker技术入门| Part03:Dockerfile详解(Dockerfile概念、Dockerfile 指令、使用Dockerfile构建镜像)

    Docker镜像原理 Docker镜像是由特殊的文件系统叠加而成 最底端是bootfs,并使用宿主机的bootfs 第二层是root文件系统rootfs,称为base image 然后再往上可以叠加其他的镜像文件 统文件系统(UnionFile System)技术能够将不同的层整合成一个文件系统,为这些层提供了一个统的视角,这样就隐

    2024年02月09日
    浏览(34)
  • 【零基础入门Docker】Dockerfile中的USER指令以及dockerfile命令详解

    ✍ 面向读者:所有人 ✍ 所属专栏:Docker零基础入门专栏 目录 第 1 步:创建 Dockerfile 第 2 步:构建 Docker 镜像 第 3 步:运行 Docker 容器 第 4 步:验证输出 dockerfile命令详解 最佳实践 默认情况下,Docker 容器以 Root 用户身份运行。如果您在 Docker 容器内大规模部署应用程序,这

    2024年02月05日
    浏览(32)
  • Dockerfile制作容器--ssh容器,详细步骤与指令介绍

    目录 Dockerfile介绍 什么是Dockerfile dockerfile的基本结构 格式 dockerfile指令 FROM指令 MAINTAINER指令 COPY指令 ADD指令 WORKDIR指令 VOLUME指令 EXPOSE指令 ENV指令 RUN指令 CMD指令 ENTRYPOINT指令 使用Dockerfile创建一个支持SSH服务的镜像 测试 什么是Dockerfile         Dockerfile 是一个用来构建镜像

    2024年02月01日
    浏览(34)
  • Docker的数据管理和Dockerfile的指令

    管理 Docker 容器中数据主要有两种方式: 数据卷(Data Volumes)和数据卷容器(DataVolumes Containers)。 1、数据卷 数据卷是一个供容器使用的特殊目录,位于容器中。可将宿主机的目录挂载到数据卷上,对数据卷的修改操作立刻可见,并且更新数据不会影响镜像,从而实现数据在

    2024年02月15日
    浏览(22)
  • Docker Compose映射卷的作用是什么,dockerfile这个文件有什么区别和联系?

    Docker Compose中映射卷(Volumes)的作用和Dockerfile之间既有区别也有联系。下面详细解释两者的作用、区别和联系: Docker Compose映射卷的作用 在Docker Compose中,卷(Volumes)用于数据持久化和数据共享: 数据持久化 :容器自身是易失的,当容器被删除时,存储在容器内部的数据也

    2024年02月21日
    浏览(33)
  • Linux | nslookup详细介绍一下这指令的作用以及用法

    linux 当中,nslookup是一个网络工具,通常用于查询域名系统(DNS)服务器以获取主机名或IP地址相关的信息。它可以用于查找主机名的IP地址,反向查找IP地址的主机名,以及查询DNS记录的其他信息。以下是nslookup命令的用法和示例: 查询主机名的IP地址: nslookup example.com 这个

    2024年04月26日
    浏览(30)
  • 【Docker】Dockerfile介绍

    Dockerfile是一个文本文件,其中包含了一系列的指令,用于构建Docker镜像。这些指令可以用来自动化镜像的构建过程,并创建自定义镜像。 以下是一些常用的Dockerfile指令及其功能: FROM:指定基础镜像。这是Dockerfile中的第一条指令,用于告诉Docker从哪个镜像开始构建新的镜像

    2024年02月10日
    浏览(18)
  • docker基于已有容器和通过Dockerfile进行制作镜像配置介绍

    目录 一.制作镜像的两种方式 1.在已有容器中更新并提交这个镜像 2.使用Dockerfile来制作 二.基于容器制作镜像 1.格式 (1)主要格式 (2)可选参数 2.案例 基于容器创建镜像设置标签并进行验证是否可用 (1)运行容器并写入验证内容(改变容器存储层内容) (2)另起终端制

    2024年02月11日
    浏览(32)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包