Dockerfile-多阶段构建(3)

简介: Dockerfile-多阶段构建(3)

Dockerfile-多阶段构建(3)

将构建阶段命名

缺省情况下,阶段是没有命名的,但是我们可以通过他们的索引来引用他们,第一个FROM就是从0开始。

但是,这样也不太好,可读性还差那么点,因为我们完全可以用想要的名字来命名,如果你需要也可以自己加上阶段索引,我们可以通过将AS < NAME >来命名阶段。

下面这段用例,命名了阶段,并且在COPY指令中使用名称来改进前一个用例。这意味着我们的Dockerfile中的命令重新排序了,COPY也不会中断。

# syntax=docker/dockerfile:1
FROM golang:1.16 AS builder
WORKDIR /go/src/github.com/alexellis/href-counter/
RUN go get -d -v golang.org/x/net/html  
COPY app.go    ./
RUN CGO_ENABLED=0 GOOS=linux go build -a -installsuffix cgo -o app .
FROM alpine:latest  
RUN apk --no-cache add ca-certificates
WORKDIR /root/
COPY --from=builder /go/src/github.com/alexellis/href-counter/app ./
CMD ["./app"]

停在一个指定的构建阶段

多阶段构建真的提供了不少花活,但我们不想构建整个镜像的时候,我们可以指定停在一个阶段(这有什么场景吗?)我感觉大多数的多阶段构建设计,都是为了最终的镜像吧,可能是我接触的太少了,接着看吧。下面这段用例假设我们使用上方的dockerfile来构建的,然后就可以停在builder构建阶段。

docker build --target builder -t alexellis2/href-counter:latest .

官方紧接着给了几个场景,好评

  • 当我我们需要debug一些具体构建阶段的时候
  • 官方推荐可以给一个debug阶段,该阶段将所有debug工具打开,然后进入production阶段
  • 使用testing阶段,如果app需要用一些数据来测试的话,然后production阶段可以用真实数据

基本都是帮助我们debug,和测试的。

使用外部镜像作为一个阶段

使用多阶段构建时,不仅限于从之前的Dockerfile中创建的阶段进行复制。我们可以用COPY --from指令从独立的镜像中复制,可以使用本地的镜像名称,本地或Docker注册表上的ID,下面是用例:

COPY --from=nginx:latest /etc/nginx/nginx.conf /nginx.conf


相关文章
|
机器学习/深度学习 编解码 算法
【动手学计算机视觉】第九讲:传统目标检测之DPM模型
DPM模型在我心里的印象一直都非常深刻,不仅是因为它非常经典,此外,它是我进入CV领域看的第一篇文章。还记得当初开始做项目时,老师就发给我一篇文章,并反复声明,要认真研究,好好学习。我反复把这篇文章看了很多遍,也把源码看了几遍,真是深深的被这个神作惊叹到了。真不愧为传统目标识别领域的经典之作,虽然时间过去很多年,特征提取加机器学习这一套在效率上远不如深度学习,但是DPM的影响力和思想依然非常有生命力,从后面深度学习模型中经常可以看到DPM的身影,DPM的原文从2009年至今引用已经超过8000次,它的价值可见一斑,下面就来介绍一下这个经典的目标检测模型。
【动手学计算机视觉】第九讲:传统目标检测之DPM模型
|
缓存 Java Maven
Maven配置多仓库无效?来看看这篇文章
Maven配置多仓库无效?来看看这篇文章
1784 0
Maven配置多仓库无效?来看看这篇文章
|
Java Nacos 数据库
使用 nacos 搭建注册中心及配置中心
使用 nacos 搭建注册中心及配置中心
308 5
|
域名解析 网络协议 安全
【域名解析DNS专栏】进阶DNS管理:利用DNSSEC加强域名安全
【5月更文挑战第23天】DNSSEC使用公钥加密为DNS记录添加数字签名,防止DNS欺骗和中间人攻击。它涉及密钥对生成、记录签名、公钥发布和验证过程。部署DNSSEC需要选择支持的DNS提供商,管理密钥并配置签名区域。尽管面临复杂性、性能影响等挑战,DNSSEC的普及和与TLS、HTTPS结合将提升DNS安全性,构建更可信的互联网环境。通过实践DNSSEC,我们可以强化域名安全防线。
621 1
|
安全 数据安全/隐私保护 Python
2FA
【9月更文挑战第29天】
842 4
|
存储 数据采集 自然语言处理
知识图谱之《海贼王-ONEPICE》领域图谱项目实战(含码源):数据采集、知识存储、知识抽取、知识计算、知识应用、图谱可视化、问答系统(KBQA)等
知识图谱之《海贼王-ONEPICE》领域图谱项目实战(含码源):数据采集、知识存储、知识抽取、知识计算、知识应用、图谱可视化、问答系统(KBQA)等
知识图谱之《海贼王-ONEPICE》领域图谱项目实战(含码源):数据采集、知识存储、知识抽取、知识计算、知识应用、图谱可视化、问答系统(KBQA)等
|
前端开发 开发者 UED
UI 框架:nav-ui&uni-ui&vant
本文档介绍了`nav-ui`、`uni-ui`和`vant`三个UI库的基本使用方法,包括图标、表格和树的使用示例,以及如何在项目中安装和配置这些UI组件。对于`nav-ui`,详细说明了图标组件的安装与使用,包括本地图标和第三方图标库的集成方式。`uni-ui`部分则重点讲解了CSS的使用方法。最后,`vant`部分提供了从项目创建到组件安装的具体步骤,以及如何将下载的组件正确地集成到项目中。
536 4
|
NoSQL Redis Docker
docker部署redis
docker部署redis
223 4
|
开发工具 数据安全/隐私保护 git
git: 修改gitlab仓库提交地址
git: 修改gitlab仓库提交地址
737 0
|
前端开发 索引
解决React报错Encountered two children with the same key
解决React报错Encountered two children with the same key