当前位置: 首页 > 面试题库 >

在Docker构建期间在主机上执行命令

贺方伟
2023-03-14
问题内容

创建Dockerfile映像时是否可以创建在主机上执行命令的命令?

现在我正在做:

./script_that_creates_magic_file.sh
docker build .

使用Dockerfile:

FROM alpine
COPY magic_file

我希望能够做到:

docker build .

使用Dockerfile:

FROM alpine
# invoke script_that_creates_magic_file.sh on the host
COPY magic_file

当然,此脚本与Dockerfile位于同一目录中。


问题答案:

(只是一个建议)

通常,我们使用以下结构来构建docker映像:

my-image/
├── assets
│   ├── entrypoint.sh
│   └── install.sh
├── build.sh
├── Dockerfile
├── README.md
└── VERSION
  • build.sh :这是您应该调用的script_that_creates_magic_file.sh。其他常见任务包括下载所需文件或从主机临时复制ssh密钥。最后,此脚本将调用docker build .
  • Dockerfile :和往常一样,但是根据我们需要运行的命令数量,我们可能会有一个install.sh
  • install.sh :此文件可在容器中复制并运行,安装软件包,删除不必要的文件等。不确定100%-我认为这种方法减少了层数,避免了在单个命令中使用多个命令RUN
  • entrypoint.sh :容器的入口点。允许我们在容器启动时执行任务(例如解析环境变量)并打印调试信息

我发现上面的结构很方便且具有自说明性,因为团队中的每个人都可以构建任何图像(无特殊说明/步骤)。自述文件在那里解释图像在做什么…但是我不会对你说谎…它通常是空的…(或h1gitlab显示一个):)



 类似资料:
  • 问题内容: 我可以在主机上运行docker命令吗?我安装在Docker容器中,现在可以以某种方式在主机上使用命令(在后台使用Docker容器的aws)吗? 我的情况是这样的:我在生产主机上有数据库备份。现在我有Jenkins cron作业,它将从db容器中获取sql文件,并将其放入服务器文件夹中。现在我还希望jenkins将此备份文件上传到AWS存储上,但是在主机上我没有安装aws,也不想在主机上

  • 问题内容: 命令 : 下面的Dockerfile: 在最后一行失败(./configure …) 如果我删除了最后一行并在容器中运行了bash,然后手动执行了最后一行,那么它将起作用。 我希望将命令添加到Dockerfile中(由RUN前缀)后,在容器中成功运行的任何命令都应该起作用 我错过了什么吗? 问题答案: pwd在RUN命令中不是持久的。您需要在同一RUN中进行cd和配置。 这个Docke

  • 我正在运行一个Jenkinsdocker映像,我正在构建自己的映像,并希望添加对它的docker buildx支持,以便生成多平台映像,我不知道它应该如何工作。 当我检查受支持的平台时,我得到: 因为我在AMD64映像中。我读到我需要为此安装qemu,但我不知道Buildx如何识别它。 关于这一点,相关文档相对较少:https://docs.docker.com/buildx/working-wi

  • 是否可以在 Ansible 主机上运行命令? 我的场景是,我想从内部托管的git服务器(并且不能在公司防火墙之外访问)进行结帐。然后我想将结账(tarbated)上传到正式服(托管在外部)。 目前,我正在考虑运行一个脚本,执行签出、tarballs,然后运行部署脚本-但如果我可以将其集成到Ansible中,那将是更好的选择。

  • 机器A和B之间的通信工作良好。我可以运行像或这样的命令,它会给出预期的结果: 我听说过,但还没有尝试过,但据我所知,这并不能解决我的问题。 有什么方法可以直接使用来实现这一点。解决办法可能是使用连接到远程主机,并直接从远程主机使用客户机,但我希望尽可能避免这种解决方案。 在上运行,而不是在本地计算机上运行。

  • 我正在尝试将服务器URL传递给在Docker容器中运行的React应用程序。它在应用程序中发送HTTP请求时使用,访问方式如下:server_url。这在主机上存储为en环境变量。 我尝试过直接在我的does文件中设置变量:< code > ENV server _ URL = $ { server _ URL } ,我认为这不起作用,因为< code>${server_url}是针对does文件