首先,回答“为什么不起作用VOLUME?” VOLUME在Dockerfile中定义a 时,只能定义目标,而不能定义卷的源。在构建期间,您将仅从中获得一个匿名卷。该匿名卷将在每个RUN命令处挂载,并预先填充映像的内容,然后在RUN命令末尾丢弃。仅保存对容器所做的更改,不保存对体积的更改。

自从提出此问题以来,已经发布了一些功能可能会有所帮助。首先是多阶段构建,它允许您构建磁盘空间效率低下的第一阶段,并将所需的输出仅复制到出厂的最后阶段。第二个功能是Buildkit,它极大地改变了图像的构建方式,并向构建中添加了新功能。

对于多阶段构建,您将有多FROM行,每行开始创建一个单独的映像。默认情况下,仅最后一张图像被标记,但是您可以复制前一阶段的文件。标准用途是具有一个编译器环境来构建一个二进制或其他应用程序工件,以及一个运行时环境作为在该工件上进行复制的第二阶段。你可以有:

FROM debian:sid as builder

COPY export /export

RUN compile command here >/result.bin

FROM debian:sid

COPY --from=builder /result.bin /result.bin

CMD ["/result.bin"]

这将导致构建仅包含生成的二进制文件,而不包含完整的/ export目录。

Buildkit将于18.09发布。这是对构建过程的完全重新设计,包括更改前端解析器的功能。这些解析器更改之一已实现了该RUN --mount选项,该选项使您可以为运行命令安装缓存目录。例如,这是一个挂载一些debian目录的文件(通过重新配置debian映像,这可以加快软件包的重新安装速度):

# syntax = docker/dockerfile:experimental

FROM debian:latest

RUN --mount=target=/var/lib/apt/lists,type=cache \

--mount=target=/var/cache/apt,type=cache \

apt-get update \

&& DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends \

git

您可以根据自己的应用程序缓存来调整缓存目录,例如$ HOME / .m2(用于maven)或/root/.cache(用于golang)。

TL; DR:答案在这里:使用该RUN --mount语法,您还可以从构建上下文绑定安装只读目录。该文件夹必须存在于构建上下文中,并且不会映射回主机或构建客户端:

# syntax = docker/dockerfile:experimental

FROM debian:latest

RUN --mount=target=/export,type=bind,source=export \

process export directory here...

请注意,由于目录是从上下文挂载的,因此它也是只读挂载的,您不能将更改推回主机或客户端。构建时,您需要18.09或更高版本的安装,并使用启用构建工具包export DOCKER_BUILDKIT=1。

docker run 挂载卷_如何在构建期间将主机卷挂载到Dockerfile中的Docker容器中相关推荐

  1. docker 启动sqlserver_Docker mssql-server-linux:如何在构建期间启动.sql文件(来自Dockerfile)...

    我正在尝试使用MSSQL DB创建自己的Docker镜像以进行开发.它基于microsoft / mssql-server-linux映像.在构建期间,我想将一些.sql文件复制到容器中,然后运行这些 ...

  2. docker run 服务名_在 WSL2.0 的 Ubuntu 18 里使用 Docker

    近日,随着Windows 10 2004版本的发布,WSL 2经过了近一年的insider测试,现在也正式上线了.Windows 10 2004中引入了一个真实的Linux kernel,使得系统全部 ...

  3. docker run

    一.docker run 简介 docker run命令可以与docker commit命令结合使用,以改变容器运行的命令. $ docker run [OPTIONS] IMAGE [COMMAND ...

  4. 我的docker随笔33:在容器中连接oracle数据库

    本文涉及一种在容器中连接 oracle 数据库的方法和步骤,最后给出测试结果.至于使用程序的方式连接,则是后续要实施的工作. 一.引言 之前在 Windows 实现了连接 oracle 数据库,本次尝 ...

  5. python共享内存mmap_python - IPC在单独的Docker容器中的Python脚本之间共享内存 - 堆栈内存溢出...

    问题 我已经编写了一个神经网络分类器,该分类器可以获取海量图像(每张图像约1-3 GB),将其打补丁,然后分别通过网络传递这些补丁. 培训的进行过程非常缓慢,因此我对其进行了基准测试,发现用大约50秒 ...

  6. docker run 挂载卷_使用Windows主机时如何挂载Docker卷?

    在Windows主机下安装Docker卷对我来说是一个巨大的痛苦,而且我无法使其正常工作. 目前,我得到了以下简单的Dockerfile: FROM php:5-apache RUN apt-get ...

  7. k8s挂载目录_云原生存储详解:容器存储与 K8s 存储卷

    作者 | 阚俊宝 阿里云技术专家 导读:云原生存储详解系列文章将从云原生存储服务的概念.特点.需求.原理.使用及案例等方面,和大家一起探讨云原生存储技术新的机遇与挑战.本文为该系列文章的第二篇,会对容 ...

  8. docker︱docker run的解读与一键部署

    这是之前的文章: docker︱在nvidia-docker中使用tensorflow-gpu/jupyter 文章目录 1 docker run的解读 1.1 docker run 1.2 几种进入 ...

  9. docker run命令_CVE-2019-14271:Docker cp命令漏洞分析

    0x00 前言 在过去几年中,研究人员在各种容器平台的copy(cp)命令中发现了几个漏洞,这些平台包括Docker.Podman及Kubernetes,其中最严重的漏洞直到今年7月份才被发现和披露. ...

最新文章

  1. matlab中prismastic,魅力值是什么意思
  2. MySQL之concat、concat_ws以及group_concat的使用
  3. 学生管理系统stuSystem函数
  4. 2018 UESTC Training for Data Structures
  5. 直播丨数据库上云趋势下,如何面对海量数据迁移及落地实践-2021云和恩墨大讲堂...
  6. 计算机硬件维修教材,计算机硬件组装与维护教程(21世纪高等教育计算机规划教材)...
  7. 2012.4.20总结
  8. 程序员工资待遇,投票!
  9. VueJs 自定义过滤器使用总结
  10. 夜光带你走进Bootstrap(2)
  11. JQuery插件二--colorbox
  12. 插画构图如何学习,小白必看
  13. 用angular JS和 bootstrap完成一个简单的购物车界面
  14. 全局zomm缩放后echarts鼠标偏移的问题(鼠标触发提示框位置有偏差)
  15. 说话做事的110条技巧
  16. 碳监测能源消耗监测管理系统_碳排放在线监测管理系统_碳管理平台
  17. 阿里云李飞飞:中国数据库的时与势
  18. flask装饰器顺序
  19. cocos creator接入微信登陆sdk ios篇
  20. 计算机技术在图形图像处理中的应用,计算机技术在图形图像处理中的应用研究...

热门文章

  1. JVM学习笔记之四:分代垃圾回收
  2. lm-sensors工具安装和使用
  3. Android入门之TabHost,TabWidget
  4. effective c++
  5. Java字符类型练习
  6. Centos下源码安装git
  7. 在Android上实现HttpServer
  8. myeclipse调试java
  9. IoC~MVC3+EF+Autofac实现松耦合的系统架构 [转载]
  10. Network Manager碰到的问题