一起学docker系列之十二什么是dockerfile

目录

  • 1 基本概念
  • 2 语法规则
  • 3 Dockerfile构建步骤
  • 4 Dockerfile、Docker镜像和Docker容器的关系
  • 5 保留字介绍
    • 5.1 FROM
    • 5.2 MAINTAINER
    • 5.3 RUN
    • 5.4 EXPOSE
    • 5.5 WORKDIR
    • 5.6 USER
    • 5.7 ENV
    • 5.8 ADD
    • 5.9 COPY
    • 5.10 VOLUME
    • 5.11 CMD
    • 5.12 ENTRYPOINT
  • 6 总结
  • 7 参考地址

1 基本概念

Dockerfile是一种文本文件,用于构建Docker镜像的脚本,能够定义和构建 Docker 镜像的步骤和配置。它包含一系列指令,用于描述镜像的构建流程和所需的环境设置。允许开发者自定义镜像内容、环境和配置。它的指令由一行行的命令组成,按顺序逐条执行,从而生成一个定制化的镜像。

在这里插入图片描述

2 语法规则

  • 指令和参数: Dockerfile中的指令必须以大写字母开头,后跟一个或多个参数。
  • 注释: 使用 # 符号进行注释,注释内容会被忽略。
  • 层次结构: 每条指令在执行时都会创建一个新的镜像层,并将更改提交到镜像。

3 Dockerfile构建步骤

在这里插入图片描述

  1. 编写Dockerfile文件: Dockerfile是用来构建Docker镜像的文本文件,其中包含了一系列指令和参数,定义了镜像的构建过程和配置。通过编辑Dockerfile,开发者可以指定基础镜像、安装软件、设置环境变量、复制文件等操作。
  2. 使用docker build命令构建镜像: 一旦Dockerfile文件编写完成,使用 docker build 命令来执行构建操作。这个命令会按照Dockerfile中的指令逐条执行,并生成一个新的Docker镜像。该命令的语法通常为:docker build -t 新镜像名称:标签路径 .。其中,“-t”用于指定镜像的名称和标签,“.`”表示Dockerfile所在的当前目录。
  3. 运行Docker容器: 构建完成镜像后,使用 docker run 命令来启动一个容器实例。该命令的语法通常为:docker run [OPTIONS] 镜像名称 [COMMAND] [ARG...]。通过运行容器,可以基于镜像创建一个运行环境,这个环境是镜像的一个实例化版本。

4 Dockerfile、Docker镜像和Docker容器的关系

  • Dockerfile: 是一个文本文件,包含了构建Docker镜像的指令和配置,可被视为构建镜像的“原材料”,主要面向开发人员,描述了镜像的组成和构建流程。
  • Docker镜像: 是由Dockerfile构建而成的二进制文件,包含了运行一个应用所需的所有内容:代码、运行时、库、环境变量和配置文件等。镜像可视为构建好的“交付品”或“交付标准”,用于创建Docker容器的基础。
  • Docker容器: 是Docker镜像的运行实例,是镜像的一个运行环境。当使用 docker run 命令启动容器时,会创建一个基于镜像的运行时实体,具有独立的文件系统、网络空间和进程空间。容器是面向部署与运维的,允许开发者将镜像部署为可运行的应用实例。

Dockerfile是用来构建Docker镜像的脚本文件,镜像是Docker容器的基础,而容器则是镜像的运行实例。通过Dockerfile定义了镜像的内容和构建过程,然后使用 docker build 命令来构建镜像。运行容器时,实际上是在基于镜像创建一个独立的运行环境,这个环境可以独立运行并与宿主机隔离开来,这就是Docker容器的概念。三者共同构成了Docker技术体系,使得开发、部署和运维变得更加便捷和高效。

5 保留字介绍

在这里插入图片描述

5.1 FROM

  • 作用: 指定基础镜像,用于构建新镜像的起点。
  • 用法: FROM <镜像名称>[:<标签>]
  • 示例: FROM ubuntu:latest

5.2 MAINTAINER

  • 作用: 设置镜像维护者的信息,包括姓名和邮箱等。
  • 用法: MAINTAINER <维护者信息>
  • 示例: MAINTAINER John Doe <john@example.com>

5.3 RUN

  • 作用: 在镜像构建过程中执行命令,安装软件包、更新系统等。
  • 用法:
    • RUN <命令> (shell格式)
    • RUN ["可执行文件", "参数1", "参数2"] (exec格式)
  • 示例:
    • RUN apt-get update && apt-get install -y python
    • RUN ["apt-get", "update"]

5.4 EXPOSE

  • 作用: 声明容器运行时监听的端口,仅声明并不会实际打开端口。
  • 用法: EXPOSE <端口号>
  • 示例: EXPOSE 80

5.5 WORKDIR

  • 作用: 设置容器启动后的工作目录。
  • 用法: WORKDIR /path/to/directory
  • 示例: WORKDIR /usr/app

5.6 USER

  • 作用: 指定容器中执行命令所用的用户名或UID。
  • 用法: USER <用户名>
  • 示例: USER myuser

5.7 ENV

  • 作用: 设置环境变量,供后续指令使用。
  • 用法: ENV <变量名> <值>
  • 示例: ENV MY_VAR my_value

5.8 ADD

  • 作用: 将宿主机文件或目录复制到镜像中,自动处理URL和解压tar包。
  • 用法: ADD <源路径> <目标路径>
  • 示例: ADD ./files /app

5.9 COPY

  • 作用: 类似于ADD命令,用于将宿主机文件或目录复制到镜像中。
  • 用法: COPY <源路径> <目标路径>
  • 示例: COPY ./files /app

5.10 VOLUME

  • 作用: 创建挂载点,用于持久化数据或与宿主机共享数据。
  • 用法: VOLUME ["路径"]
  • 示例: VOLUME ["/data"]

5.11 CMD

  • 作用: 指定容器启动后要运行的默认命令。
  • 用法:
    • CMD ["可执行文件", "参数1", "参数2"] (exec格式)
    • CMD <命令> (shell格式)
  • 示例:
    • CMD ["python", "app.py"]
    • CMD echo "Hello World"

5.12 ENTRYPOINT

  • 作用: 设置容器启动时要执行的命令,可以被覆盖但不会被忽略。
  • 用法: ENTRYPOINT ["可执行文件", "参数1", "参数2"]
  • 示例: ENTRYPOINT ["echo", "Hello"]

这些保留字是Dockerfile中用来定义镜像构建和容器运行的关键指令,每个都有特定的作用和用法,通过合理的组合和使用,可以构建出符合需求的Docker镜像和容器。

6 总结

Dockerfile是定义Docker镜像构建过程的关键文件,通过一系列指令和参数描述了镜像的组成、配置和行为。遵循最佳实践编写Dockerfile能够生成高效、安全、可靠的镜像,为容器化应用提供良好的基础环境。

7 参考地址

https://docs.docker.com/engine/reference/builder

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/224769.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

答题小程序挑战专题1V1PK答题模式感受竞技乐趣

作为答题小程序的重要部分&#xff0c;专题赛是一种吸引用户参与、增加用户互动性和提高用户参与度的有效方式。下面&#xff0c;我将为大家详细介绍答题小程序的专题赛怎么玩。 首先&#xff0c;每个专题可以设置单独的开放时间。例如&#xff0c;在2024年1月1日&#xff0c;…

Couchdb 命令执行漏洞复现 (CVE-2017-12636)

Couchdb 命令执行漏洞复现 &#xff08;CVE-2017-12636&#xff09; 1、下载couchdb.py 2、修改目标和反弹地址 3、Python3调用执行即可 couchdb.py文件下载地址: https://github.com/vulhub/vulhub/blob/master/couchdb/CVE-2017-12636/exp.py ‍ 在VULFocus上开启环境 …

2019年11月8日 Go生态洞察:庆祝Go语言十周年

&#x1f337;&#x1f341; 博主猫头虎&#xff08;&#x1f405;&#x1f43e;&#xff09;带您 Go to New World✨&#x1f341; &#x1f984; 博客首页——&#x1f405;&#x1f43e;猫头虎的博客&#x1f390; &#x1f433; 《面试题大全专栏》 &#x1f995; 文章图文…

YOLOv8独家原创改进: AKConv(可改变核卷积),即插即用的卷积,效果秒杀DSConv | 2023年11月最新发表

💡💡💡本文全网首发独家改进:可改变核卷积(AKConv),赋予卷积核任意数量的参数和任意采样形状,为网络开销和性能之间的权衡提供更丰富的选择,解决具有固定样本形状和正方形的卷积核不能很好地适应不断变化的目标的问题点,效果秒殺DSConv 1)AKConv替代标准卷积进行…

第29期 | GPTSecurity周报

GPTSecurity是一个涵盖了前沿学术研究和实践经验分享的社区&#xff0c;集成了生成预训练Transformer&#xff08;GPT&#xff09;、人工智能生成内容&#xff08;AIGC&#xff09;以及大型语言模型&#xff08;LLM&#xff09;等安全领域应用的知识。在这里&#xff0c;您可以…

虚幻学习笔记2—点击场景3D物体的两种处理方式

一、前言 本文使用的虚幻引擎为5.3.2&#xff0c;两种方式分别为&#xff1a;点击根物体和精准点击目标物体。 二、实现 2.1、玩家控制器中勾选鼠标点击事件&#xff1a;这一步很重要&#xff0c;如图2.1.1所示&#xff1a;在自定义玩家控制器中勾 图2.1.1 选该项&#xff0c…

学习知识回顾随笔

文章目录 如何远程连接MySQL数据库1.创建用户来运行&#xff0c;此用户从任何主机连接到mysql数据库2.使用IP地址来访问MySQL数据库 如何远程访问Django项目Web应用什么是Web应用应用程序的两种模式Web应用程序的优缺点 HTTP协议&#xff08;超文本传输协议&#xff09;简介HTT…

KepServer配置OPC UA

KepServer在进行OPC UA配置时需要一个身份验证&#xff0c;密码是安装KepServer时输入的密码&#xff0c;但是这个用户名有些人可能不清楚&#xff0c;KepServer默认的管理员用户名为&#xff1a;administrator。 登录进去之后可以进行OPC UA服务配置。 如果想添加自定义的用户…

2.ORB-SLAM3中如何从二进制文件中加载多地图、关键帧、地图点等数据结构

目录 1 为什么保存&加载(视觉)地图 1.1 加载多地图的主函数 1.2 加载各个地图 Atlas::PostLoad 1.3 加载关键帧及地图点Map::PostLoad 1.4 恢复地图点信息 MapPoint::PostLoad 1.5 恢复关键帧信息KeyFrame::PostLoad 1 为什么保存&加载(视觉)地图 因为我们要去做导…

企业如何选择安全又快速的大文件传输平台

在现代信息化社会&#xff0c;数据已经成为各个行业的重要资源&#xff0c;而数据的传输和交换则是数据价值的体现。在很多场合&#xff0c;企业需要传输或接收大文件&#xff0c;例如设计图纸、视频素材、软件开发包、数据库备份等。这些文件的大小通常在几百兆字节到几十个字…

CSS新手入门笔记整理:CSS字体样式

字体类型&#xff1a;font-family 语法 font-family&#xff1a;字体1,字体2,...,字体n; font-family可以指定多种字体。使用多个字体时&#xff0c;将按从左到右的顺序排列&#xff0c;并且以英文逗号&#xff08;,&#xff09;隔开。如果我们不定义font-family&#xff0c…

Ant Design布局:Flex, Grid, Layout

文章目录 FlexGridLayout React初步antd初步 任何UI工具&#xff0c;布局都是设计过程中必不可少的一环&#xff0c;前端更是如此。但网页和桌面应用还有区别&#xff0c;正常的网页&#xff0c;无论在手机还是PC上&#xff0c;基本都是自上而下排布的信息流&#xff0c;这种浏…