Dockerfile详细解析(一)——使用方法

使用Dockerfile构建镜像 Dockerfile 是构建和管理 Docker 镜像的重要工具,使用它可以简化应用程序的部署和管理,并提高可重复性、可自动化性、可定制性和可扩展性。由于格式和图片解析问题,为了更好体验可前往阅读原文。 阅读详情

Dockerfile参考指南

Docker 以通过读取Dockerfile里面的命令来自动构建镜像。Dockerfile 是一个包含了用户构建一个镜像的所有命令的文本文档。用户们可以使用 docker build 顺序执行一些列的命令行来自动构建镜像。
这篇博客主要是叙述在Dockerfile使用到的命令。当你完成了这篇博客的阅读,可以参考 Dockerfile 最佳实践指南提示。

使用方法

docker build 命令会根据Dockerfile文件和上下文来构建镜像。构建时的上下文主要是指在指定的路径PATH或者URL里面的文件集合。PATH指的是在本地文件系统里的路径。URL是指Git 仓库的路径。
构建的时候上下文是会递归执行的。所以,PATH包含了一些子路径和URL包含了仓库已经它的子模块。下面的例子展示了在当前路径作为上下文运行构建命令:

$ docker build .
Sending build context to Docker daemon  6.51 MB
...

构建是通过Docker daemon运行的,而不是客户端。在构建之前,会
发送整个上下文(递归地)daemon。在大多数情况下,一开始最好在一个空的目录作为上下文和保留你的Dockerfile在目录里。仅添加构建Dockerfile需要的文件。

注意:不要使用你的根目录,/,作为PATH, 因为构建的时候会把你整个硬盘的内容传送到Docker daemon。

想在构建的上下文使用一个文件,可以使用Dockerfile的命令去指定一个文件,例如,COPY 命令。为了提高构建的性能,可以通过添加一个.dockerignore文件去排除文件以及目录。至于怎么创建一个.dockerignore 文件,可以参考博客后面.dockerignore创建。
一般来说,Dockerfile 直接使用上下文的根目录里的Dockerfile。当然你可以在docker build时添加-f标志(参数)指定Dockerfile 在你文件系统里的任意位置。

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

当构建成功时,你可以指定一个镜像仓库和标签去保存新的镜像。

$ docker build -t shykes/myapp .

构建成功后,为了在多个镜像仓库给同一个镜像加标签,可以在使用build命令是添加多个 -t 参数:

$ docker build -t shykes/myapp:1.0.2 -t shykes/myapp:latest .

在Docker daemon 运行Dockerfile里面的命令之前,会执行Dockerfile初步的校验,当有语法不合法时,会返回错误提示。

$ docker build -t test/myapp .
Sending build context to Docker daemon 2.048 kB
Error response from daemon: Unknown instruction: RUNCMD

Docker daemon 会一行一行地运行Dockerfile里面的指令,在最后输出新的镜像前,会提交每个指令的必要的结果到新的镜像。Docker daemon 会自动清楚你发送的上下文。

需要知道的是,每一个指令是独立运行的,因此当一个镜像被创建了,运行 RUN cd/tmp 将不会影响下一个指令。

只要有可能,Docker 会重复利用镜像中间物(缓存),使之 docker build 的过程得到明显地加速,这个会在控制台输出 Using cache的信息来表明。(更多信息,请查看Dockerfile最佳实践指南的Build cache section):

$ docker build -t svendowideit/ambassador .
Sending build context to Docker daemon 15.36 kB
Step 1/4 : FROM alpine:3.2
 ---> 31f630c65071
Step 2/4 : MAINTAINER SvenDowideit@home.org.au
 ---> Using cache
 ---> 2a1c91448f5f
Step 3/4 : RUN apk update &&      apk add socat &&        rm -r /var/cache/
 ---> Using cache
 ---> 21ed6e7fbb73
Step 4/4 : CMD env | grep _TCP= | (sed 's/.`_PORT_\([0-9]`\)_TCP=tcp:\/\/\(.`\):\(.`\)/socat -t 100000000 TCP4-LISTEN:\1,fork,reuseaddr TCP4:\2:\3 \&/' && echo wait) | sh
 ---> Using cache
 ---> 7ea8aef582cc
Successfully built 7ea8aef582cc

当镜像有本地父链时才可以使用构建缓存。这意味着,这些镜像在前面的构建就已经被创建了或者整个镜像链通过 docker load 加载了。如果你想使用指定镜像的构建缓存,你可以通过使用 --cache-from 的选项。使用 --cache-from来指定的镜像不需要拥有父链和可以从其它注册中心拉取。

当你完成了构建,你就已经准备好了去参看 推送一个仓库到注册中心

【Docker】Dockerfile 使用 Dockerfile 是一个纯文本文件,包含一系列用于构建 Docker 镜像的指令。通过逐行执行这些指令,Docker 可以自动化地创建出一个可重复、轻量级的容器镜像。标准化环境:消除“在我机器上能跑”的问题。可移植性:镜像可在任何支持 Docker 的环境中运行。版本控制:Dockerfile 本身可与代码一同管理。构建高效的小体积镜像确保环境一致性实现安全的容器运行时使用hadolint进行 Dockerfile 语法检查定期扫描镜像漏洞(如。 阅读详情

相关推荐

保姆级教程:在寒武纪MLU370上从零部署YOLOv5(附安全帽数据集)

本文提供在寒武纪MLU370上从零部署YOLOv5的保姆级教程,涵盖环境配置、模型迁移、安全帽数据集处理、训练优化及推理部署全流程。通过实战案例展示MLU370在目标检测任务中的高效性能,适合开发者快速掌握国产AI加速卡的应用技巧。

weixin_27419879的博客 189

快速入门Docker--- Dockerfile文件

CMD vs RUN vs ENTRYPOINTCMD命令 :容器启动时默认的命令(一起容器启动时,要运行的命令)。当时如果当运行Container时候声明了 command,则忽略Image中的CMD命令。CMD的三种定义方法:CMD<cmd>这个当做 /bin/sh -c "cmd"来执行。CMD["executable","arg1","arg2"....]CMD["arg1&quot

谦190的博客 2845

C# Log4Net不输出日志的解决方法

log4net是一个流行的 .NET 日志框架,用于记录应用程序的日志信息。如果你在使用log4net。

精通搬砖,资深技术砖家,在软件开发,人工智能,设备开发等领域都有研究。商业合作&交流学习可私信联系。 1263

Docker进阶之Dockerfile

Docker进阶之Dockerfile

StoNENee的博客 4514

【STM32】H743的25MHZ外部晶振下480MHz时钟的CubeMX配置图

备忘 有时候临时调一个外设做实验需要快速搭建工程的时候,老忘记配置的数据 再补一段代码格式的 void SystemClock_Config(void) { RCC_OscInitTypeDef RCC_OscInitStruct = {0}; RCC_ClkInitTypeDef RCC_ClkInitStruct = {0}; RCC_PeriphCLKInitTypeDef PeriphClkInitStruct = {0}; /** Supply configuration up

一只爱做笔记的码农 3395

基于 MATLAB 的综合能源系统建模案例 

电平衡约束:P_{gt}(t)+P_{grid}(t)-P_{eb}(t)-P_{load}(t)=0,其中 P_{grid}(t) 为与外部电网的交互功率(正表示购电,负表示售电)。- 电锅炉的热输出功率 Q_{eb} 与输入电功率 P_{eb} 的关系为:Q_{eb}=\eta_{eb}\times P_{eb},其中 \eta_{eb} 为电锅炉的热效率。- 燃气轮机的余热回收功率 Q_{gt} 与发电功率也存在一定关系,例如:Q_{gt}=c\times P_{gt},c 为余热回收比例系数。

qq_57128262的博客 1394

已解决——cannot get resource ‘pods‘ in API group ‘‘ in the namespace ‘namespace-name‘ (K8s)问题

您好,云原生的探险者们!猫头虎博主🐯在这里带来了一则关于Kubernetes的探讨——那就是面临的问题时,我们应该怎样挑战并且解决它呢?🚀在云原生领域中,我们经常会遇到Kubernetes的权限和资源管理问题。不过,不要担心,我们将一起深入研究这个问题的原因,解决方法,以及预防措施。🛡️在这次的探讨中,我们不仅解决了这个问题,还进一步了解了Kubernetes的权限和资源管理机制。🌈 这些知识和经验将成为我们云原生之旅中的宝贵财富,帮助我们在未来更好地应对挑战!🚀。

GoCloudNative - 云原生技术的探索者。 2260

别再只用线性回归了!用sklearn的核岭回归搞定非线性数据(附RBF核调参实战)

本文详细介绍了如何使用sklearn的核岭回归处理非线性数据,特别是RBF核的应用与调参实战。通过网格搜索找到最佳参数组合,核岭回归能有效捕捉数据中的复杂波动,显著提升模型性能。适合需要解决非线性问题的数据科学家和机器学习工程师。

weixin_34246529的博客 336

pipeline流水线无法部署yaml-“system:serviceaccount:kube-ops:default“ cannot get resource “services“ in API g

pipeline流水线无法部署yaml-"system:serviceaccount:kube-ops:default" cannot get resource "services" in API g

qq_48349180的博客 2116

《用 AI 赋能医药科研创新》目录(持续更新)

本专栏旨在指导医学科研和药物研发人员运用AI技术提升研究效率。内容包括:利用AI分析文献、识别研究热点、自动生成研究草稿;在新药研发中,通过AI优化临床方案设计、受试者筛选等环节;介绍AI理论基础如大语言模型、提示词工程学及智能体技术发展历程。专栏采用5000-9000字的长文形式,系统讲解AI在医药研发各环节的应用方法,帮助研究者缩短周期、降低成本,推动医药研发进入智能化新阶段。

MD Code 498

Qt —— 在Win11下“Qt for Android“开发环境,通过USB在真机(华为Meta60 PRO)上调试运行,并打包APK并在真实手机运行

Qt —— 在Win11下“Qt for Android“开发环境,打包APK并在真实手机运行

310

Docker Dockerfile

什么是Dockerfile A Dockerfile is a text document that contains all the commands a user could call on the command line to assemble an image Dockerfile 是一个用来构建镜像的文本文件,文本内容包含了一条条构建镜像所需的指令和说明。 格式 1、 Dockerfile指令不区分大小写。但是,约定是将它们大写,以便更容易地将它们与参数区分开来。 2、 DockerDocker

a 590

Camunda 7.x 系列【67】实战篇之撤销流程

撤销流程 即撤销当前已发起的流程实例。这是一个常见的需求,Camunda本身不提供直接的方法来撤销正在执行的流程,需要自定义处理逻辑。

记录知识、锤炼自我 1376

根据docker image 解析出Dockerfile

第一种 使用docker history。编写Dockerfile。

xiangzaixiansheng的博客 729

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

DockerFile文件详细解析

从应用软件的角度而言,DockerFile,Docker镜像和Docker容器分别代表了软件的三个不同阶段DockerFile是软件的原材料Docker镜像是软件的交付品Docker容器则可以认为是软件镜像的运行状态,也是依照镜像运行的容器实例DockerFile面向开发,Docker镜像成为交付标准,Docker容器则涉及部署和运维,三者缺一不可,合理充当Docker体系的基石!Dockerfile,需要定义一个Dockerfile,Dockerfile定义了进程需要的一切东西。

IT小辉同学 1万+

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

docker入门(八)—— dockerfile详细介绍,编写dockerfile

docker入门到实战篇章(第八篇)—— 详细介绍什么是dockerfile,dockerfile的所有指令,如何从零编写一个dockerfile,如何去发布镜像

一弓虽的博客 3万+

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

使用Dockerfile构建镜像的详细指南

Dockerfile 是一个用来构建镜像的文本文件,文本内容包含了一条条构建镜像所需的指令和说明。

weixin_74268571的博客 1584

DockerFile详细解析

Dockerfile是用来构建Docker镜像的文本文件,是由一条条构建镜像所需的指令和参数构成的脚本。

weixin_51261234的博客 834

Dockerfile(Dockerfile的详细使用、通过Dockerfile构建apache镜像)

文章目录1 Dockerfile介绍2 基本结构2.1 Dockerfile分为四部分3 Dockerfile 基础知识4 Dockerfile常用指令4.1 FROM4.2 LABEL MAINTAINER4.3 RUN4.4 CMD4.5 EXPOSE4.6 ENV4.7 COPY4.8 ADD4.9 ENTRYPOINT4.10 VOLUME4.11 USER4.12 WORKDIR4.13 ONBUILD5 构建镜像注意事项6 使用Dockerfile构建apache镜像 1 Dockerfile介

m0_56305656的博客 3877

Dockerfile【超级详细】

Docker Hub 中 99% 镜像都是从这个基础镜像过来的 FROM scratch,然后配置需要的软件和配置来进行构建的。2、编写dockerfile文件 官方命名 Dockerfile ,build会自动寻找这个文件 就不需要 -f 指定了。CMD #指定这个容器启动的时候要运行的命令,只有最后一个会生效,可被替代。ENTRYPOINT #指定这个容器启动的时候要运行的命令,可以追加命令。在/home/tomcat/test 下构建两个文件。

danke的博客 2万+

Dockerfile使用

官网地址。

onePlus5T的博客 4019

Dockerfile详细解析(三)——解析器指令

解析器指令(Parser directives) 解析器指令是可选的,并影响对Dockerfile中后续行的处理方式。解析器指令不会增加层到构建,也不会展示在构建步骤。解析器指令是一种以特殊形式的注释编写的 # directive=value。一个指令只可以用一次。 一旦一个注释,空的行和构建指令被执行,Docker 不再查找解析器指令,相反docker把任何格式作为一个解析器指令的内容当作注释而...

programer_bei的博客 929

dockerfile文件使用方法

转载自:https://www.cnblogs.com/normanlin/p/13890542.html dockerfile文件使用方法 什么是dockerfile? Dockerfile是一个包含用于组合映像的命令的文本文档。可以使用在命令行中调用任何命令。 Docker通过读取Dockerfile中的指令自动生成映像。 docker build命令用于从Dockerfile构建映像。可以在docker build命令中使用-f标志指向文件系统中任何位置的Dockerfile。 例: d

自主无人机 PX4 ROS SLAM 路径规划 MVS等技术分享 4179

DockerFile详细学习

什么是 Dockerfile? Dockerfile 是一个文本文件,包含了构建 Docker 镜像的所有指令。 Dockerfile 是一个用来构建镜像的文本文件,文本内容包含了一条条构建镜像所需的指令和说明。通过定义一系列命令和参数,Dockerfile 指导 Docker 构建一个自定义的镜像。

2401_83649605的博客 1437

Dockerfile指令解析

Dockerfile Dockerfile是由一系列命令和参数构成的脚本,以FROM命令为开始,然后是各种方法和参数的使用,最终生成一个新的镜像。在使用Docker构建镜像的时,每一个命令都会在前一个命令的基础上形成一个新层。 Dockerfile示例 这里以制作一个centos+jdk8的镜像为例: FROM centos MAINTAINER MAINTAINER authors_...

程序新视界 1882

Docker 解析:使用 Dockerfile 自动构建镜像

Docker容器是使用基础镜像创建的。一个镜像可以是基本的,只包含操作系统的基本要素,也可以包含一个准备好启动的复杂的预构建应用程序堆栈。在使用 Docker 构建镜像时,每个操作(例如执行的命令,比如 apt-get install)都会形成一个新的层叠在之前的层之上。然后可以使用这些基础镜像来创建新的容器。在这篇 DigitalOcean 文章中,我们将尽可能自动化这个过程,并演示通过来实现 Docker 和容器的最佳实践和方法:逐步、自动地从基础镜像构建容器。什么是语法?

rubys007的博客 1629
上一篇: 解决Error response from daemon: ... connect: connection refused 问题
下一篇: Dockerfile详细解析(二)——格式
programer_bei
博客等级 码龄11年 13粉丝 36原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值