【问题标题】:Configure git in Dockerfile with base of Ubuntu使用 Ubuntu 基础在 Dockerfile 中配置 git
【发布时间】:2019-10-17 05:40:03
【问题描述】:

我了解到 Ubuntu 的官方镜像没有内置 git。所以我以 Ubuntu 为基础创建一个 Dockerfile,然后构建一个新镜像,如下所示:

# Base image is Ubuntu 18.04
FROM ubuntu:18.04

# Update software repository
RUN apt-get update

# Install git, then remove cache
RUN apt-get install -y git

但我不认为这是一种可持续的方式,因为 Dockerfile 最终会变得更大。同时,它也非常缓慢和手动。我想知道是否有一些方法可以在裸露的 Ubuntu Docker 映像中更快地安装 git 或其他必要的包。谢谢!

【问题讨论】:

  • alpine 提供git 图像。
  • 我可以在一个 Dockerfile 中使用两个基础镜像吗?
  • 你可以,但是我不明白你为什么会这样。如果您的要求是拥有 git,那么基本映像并不重要。另外,alpine 比 ubuntu 小。

标签: git docker ubuntu dockerfile


【解决方案1】:

这就是将包安装到容器映像中的最简单和最简单的方法。另一种方法是从源代码构建包,这涉及更多的手动配置!

还有其他可以从注册表中免费获取的镜像(例如dockerhub),其中可能包含您已经在镜像中想要的包。然后您需要做的就是拉取图像并开始使用它。

关于构建速度,请记住镜像的特定构建指令(即 Dockerfile 中的每一行)通常仅在以下情况下运行:

  1. 这是指令第一次运行。
  2. 构建指令中的某些内容发生了变化(例如,您将新包添加到列表中)
  3. 构建过程使用--no-cache 标志运行,它始终从头开始构建整个映像。

因此,一旦您构建了一次映像,Dockerfile 中任何未更改的行都不会再次执行。构建过程从最后一个未更改的构建指令开始。

【讨论】:

  • 那么 docker 中的 build 命令是否相对独立,即使它们是按顺序编写并在单个文件中编写的?
  • 是的 - 运行 docker build(没有 --no-cache 标志)实际上为每个构建指令(Dockerfile 中的行)构建了一个中间容器映像。下一条指令基于前一个中间图像构建另一个中间图像。检查命令的输出 - 你应该看到它执行的 Dockerfile 的每一行的图像哈希值...
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-08-20
  • 2020-06-30
  • 2017-08-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-03-20
相关资源
最近更新 更多