首页 > 其他分享 >DOCKER 多段构建

DOCKER 多段构建

时间:2023-12-22 11:48:57浏览次数:40  
标签:依赖 构建 阶段 镜像 DOCKER Dockerfile Docker

DOCKER 多段构建

Docker 多段构建(Multi-Stage Build)是一种优化 Docker 镜像大小和构建过程的方法。它允许你在一个 Dockerfile 中定义多个构建阶段,每个阶段都可以有自己的基础镜像、依赖和构建步骤。这样,你可以在最终的镜像中只包含运行时所需的组件,而不包含构建时产生的中间文件和依赖。

优势和用途

Docker 多阶段构建(multi-stage builds)是一种 Dockerfile 的特性,它允许你在一个 Dockerfile 中定义多个构建阶段,以便最终生成一个更小、更精简的镜像。这对于减少镜像大小和最小化携带不必要的构建工具和依赖项非常有用。

以下是一些 Docker 多阶段构建的优势和用途:

  1. 减小镜像大小: 多阶段构建允许你在一个 Dockerfile 中包含多个 FROM 指令,每个 FROM 指令定义一个构建阶段。在最终阶段,你可以只将需要的文件和依赖项复制到最终镜像中,而不必携带构建过程中的所有工具和中间文件。这有助于减小最终镜像的大小。
  2. 分离构建环境和运行环境: 多阶段构建使得可以将构建工具和依赖项隔离在一个阶段中,而将运行时所需的文件和依赖项放置在另一个阶段。这样可以避免在最终镜像中包含不必要的构建工具,从而提高镜像的安全性和效率。
  3. 简化构建过程: 多阶段构建可以使 Dockerfile 更清晰、可维护,因为每个构建阶段都专注于特定的任务。这使得构建过程更容易理解和调试。
  4. 提高构建速度: 通过只复制最终阶段所需的文件和依赖项,而不是整个构建上下文,可以显著减少构建时间。这对于大型项目尤其有用。

最佳实践

dockerfile

# 阶段 1:构建阶段

FROM node:14 AS builder

WORKDIR /app

COPY package*.json ./

RUN npm install

RUN wget pkg #  下载一些仅在编译构建阶段使用的依赖

COPY . .

RUN npm run build

# 阶段 2:生产阶段
FROM nginx:alpine

COPY --from=builder /app/dist /usr/share/nginx/html # 仅导入构建生成的文件

EXPOSE 80

CMD ["nginx", "-g", "daemon off;"]

dockerfile 执行

 docker build -t my_app:20231127 .

标签:依赖,构建,阶段,镜像,DOCKER,Dockerfile,Docker
From: https://www.cnblogs.com/renoyuan/p/17921269.html

相关文章

  • 读程序员的README笔记17_构建可演进的架构(下)
    1. 可演进的API1.1. 随着需求的变化,你需要改变你的API,即代码之间的共享接口1.2. 改变API很容易,但很难做到正确1.3. 保持API小巧1.3.1. 小巧的API更易于理解和演进1.3.2. 只添加即刻需要的API方法或字段1.3.3. 带有许多字段的API方法应该有合理的默认值1.3.3.1. 开......
  • Docker常用命令记录.......
    Docker基本命令查看本地镜像dockerimages搜索镜像dockersearchtomcat拉取镜像dockerpulltomcat:版本号#默认是latest删除镜像dockerrmiIMAGEID运行镜像-it表示与容器进行交互式启动-d表示可后台运行容器(守护式运行)--name给要运行的容器起的名字-......
  • 风控规则引擎构建及挑战
    引言如果决策引擎是风控的大脑,那么规则引擎则是大脑内的重要构成,其编排了各种对抗黑产的规则,是多年对抗黑产的专家经验的累计,本文将向你介绍规则引擎的构成及实现。背景什么是规则引擎?规则引擎可以帮助企业将业务决策从应用程序代码中分离出来,并使用预定义的语义模块编写业务......
  • centos系统安装docker和docker 使用
    基于centos系统安装docker,可以让你的开发更加专注下载阿里云的docker镜像wget-O/etc/yum.repos.d/docker-ce.repohttps://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo使用yum方式安装docker镜像yum-yinstalldocker-ce  到这里表......
  • 从零开始构建报警中心:part10 接入统一登录
    前文使用flask-login实现了用户登入登出,在实际使用中过于简单,这里引入统一登录。关于统一登录可以看一下早前的这篇文档:一个简单的SSO统一登录设计对于接入统一登录可以参考一下的时序图:根据这个时序图,要接入已有的SSO,需要对现有系统进行一些修改:未登录情况下,在login视图中添加从co......
  • 【Docker】关于挂载修改&迁移问题
    如果进行容器挂载迁移,新挂载的目录会导致之前容器内的数据丢失,接下来给大家整理思路之前是没有进行数据挂载的,也就是默认路径#先查看一下默认路径dockerinspect【容器名】#Mounts这里有详细的挂载信息,可以看到最开始的默认路径是home/lib/docker/volumes/b9588a26ea88d44f1......
  • Windows10 卸载WSL Ubuntu (解决Docker Desktop 报错问题)
    首先在“程序”里面卸载“WindowsSubsystemforLinuxUpdate”然后使用命令行卸载已安装的子系统1、查看当前环境安装的wslwsl--list2、注销(卸载)当前安装的Linux的Windows子系统wsl--unregisterUbuntu3、卸载成功,查看当前安装的Linux的Windows子系统wsl--list4......
  • ​CentOS7一键脚本安装docker并创建ES集群(docker版本)
    CentOS7一键脚本安装docker并创建ES集群(docker版本)说明:1、脚本中修改了默认的docker的存储路径为/data/docker2、脚本中修改了docker默认的网段为10.112.0.1/243、脚本中拉取镜像并安装portainer容器Web管理工具#!/bin/bashsed-i's/enforcing/disabled/g'/etc/selinux/confi......
  • docker初步入门学习安装redis和mysql
    dockerrun--namemyredis-p6379:6379-dredisredis-server--appendonlyyesdockerrun--namemysql-eMYSQL_ROOT_PASSWORD=123456-d-p3306:3306mysql:5.7.27dockerpullmysql:5.7.27dockerrun-d--hostnamemy-rabbit--namemyra......
  • dremio 24.3 版本构建的一些问题
    dremio24.3社区版代码提供了,从官方文档来看,构建与以前不太一样了,以下是构建中一些问题说明主要问题jdk需要同时包含jdk8以及jdk11,maven配置toolchains解决方法对于多jdk的安装可以使用二进制程序,比如我使用的mac我使用了sdkman这个工具管理多jdktoolchains配置......