多阶段构建

news/2024/5/18 15:14:59

一、多阶段构建原理
多阶段构建,是在Dockerfile中使用多个FROM指令,每个FROM指令可以使用不同的基础镜像,并且每个指令都开始一个新的构建,可以选择性地将一个阶段构建中生成的文件复制到另一个阶段,从而在最终image中只留下您想要的内容,缩小最终镜像的大小。

二、多阶段构命令详解
1、默认情况下阶段未命名,可以通过整数来引用它们,从第0个FROM指令开始。
示例1、

FROM golang:1.7.3
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=0 /go/src/github.com/alexellis/href-counter/app .
CMD ["./app"]  

2.通过向FROM指令添加as NAME来命名您的阶段,可以通过阶段名来引用,这意味着即使稍后重新排序Dockerfile中的指令,COPY也不会中断。
示例2、

FROM golang:1.7.3 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"] 

3、停在特定的构建阶段,构建镜像时,不一定需要构建整个Dockerfile每个阶段。
可以指定目标构建阶段。以下命令假定使用的是以前的Dockerfile,但在名为builder的阶段停止:

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

此功能主要运用到一下场景:
a、调试特定的构建阶段
b、在debug阶段,启用所有调试或工具,而在production阶段尽量精简
c、在testing阶段,您的应用程序将填充测试数据,但在production阶段则使用生产数据

4、使用外部镜像作为构建阶段
使用多阶段构建时,您不仅可以从Dockerfile中创建的镜像中进行复制。
您还可以使用COPY –from指令从单独的image中复制,使用本地image名称,本地或Docker注册表中可用的标记或标记ID。
如有必要,Docker会提取image并从那里开始复制。
语法是:

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


http://www.niftyadmin.cn/n/640688.html

相关文章

js复制文本到剪切板中 支持换行

/*** 复制文本到剪切板中** export* param {*} value 需要复制的文本* param {*} cb 复制成功后的回调*/ export function copy(value, cb) {// 动态创建 textarea 标签const textarea document.createElement(textarea)// 将该 textarea 设为 readonly 防止 iOS 下自动唤起键…

颜色模型和颜色应用---HLS颜色模型

2019独角兽企业重金招聘Python工程师标准>>> 转载于:https://my.oschina.net/liyangke/blog/2877018

一键部署Docker CE(CentOS 7)

一键部署脚本 #!/bin/sh # author ling# 定义显示颜色 RED\e[1;91m GREEN\e[1;92m WITE\e[1;97m NC\e[0m# centos7环境中安装docker function install_docker_in_contos7() {echo "Install docker in centos7!"echo "Remove old docker!"yum remove docke…

react —— 复制定制化带有标题的二维码

1. 生成二维码直接借助qrcode这个npm库即可生成二维码,但接到的需求要求是在鼠标点击的附近展示出二维码,点击弹窗里面的复制按钮即可赋值带标题的二维码图片到剪切板,实现效果如下图: 主要实现要点: 1.利用qrcode 生成…

Kubelet bootstrap认证配置步骤

kubelet 授权 kube-apiserver 的一些操作 exec run logs 等 RBAC 只需创建一次就可以 kubectl create clusterrolebinding kube-apiserver:kubelet-apis --clusterrolesystem:kubelet-api-admin --user kubernetes 创建 bootstrap kubeconfig 文件 注意: token 生效时间为 1day…

vue——移动端在线预览pdf并能缩放(pdfh5)

最近接了一个需求需要在移动端预览pdf,并切要能缩放,百度发现大多推荐vue-pdf,但是vue-pdf这个包,安装之后运行报错,解决之后的实现效果不符合需求需要,而且,实现缩放功能的时候,整个…

Docker网络实现容器互联

一、新建docker网络命令 docker network create -d bridge 网络名称 二、docker网络实现容器互联实践 步骤1、在/data/dockerfile目录下,vim Dockerfile添加如下内容: FROM ubuntu:14.04 RUN apt-get install -y ping RUN apt-get update &&…

vue-pdf安装之后,运行报错can not resolve ‘pdfjs-dist/es5/web/pdf_viewer‘

安装方式&#xff1a; npm i --save vue-pdf ​​​​​​​1. 使用组件&#xff1a; <PreViewPdf ref"PreViewPdf"></PreViewPdf>this.$refs.PreViewPdf.openPdf(item.oss_url) 2. 项目抛出如下错误&#xff1a; 通过查阅vue-pdf的github项目的issue发…