docker - 使用构建上下文和 Dockerfile 文件夹中的文件从任意文件夹编写
问题描述
我想在保持项目文件结构整洁的同时编写服务。但 Docker 似乎在构建上下文之外的路径存在问题。我正在创建一个包,并希望将所有与 Docker 相关的东西保存在项目根目录下的文件夹中。但我找不到从docker-compose
和引用项目文件的方法Dockerfile
。从项目创建容器文件时,必须复制。
这是我目前的项目结构:
root/
docker/
docker-compose.yml
Dockerfile
docker_resource.txt
config
src/
project-files.whatever
root-files.txt
现在如果 I$cd docker
和$docker-compose up
,我尝试了两种可能性。我的 Dockerfile 复制文件COPY .. /path/in/container
或 compose 文件具有构建指令,例如:
x-build: &my-build
context: ..
dockerfile: docker/Dockerfile
第一种方法不起作用。显然 Dockerfile 不能引用构建上下文之外的任何内容。第二种方法似乎有效,但只有在我将复制命令从docker_resource.txt
to编辑之后docker/docker_resource.txt
。理想情况下,我希望保留docker build
从./docker
和保持事物清洁的能力——不必担心 Dockerfile 中的组合上下文。这可能吗?
至少我在寻找一种将 docker 相关文件放在任意文件夹中并能够在 compose 文件中指定构建上下文而无需额外更改的方法。
解决方案
您需要将其视为src/project-files.whatever
自给自足的最小构建。我会在 src 中放置一个 Dockerfile。它应该被视为项目的一部分,并且应该针对它。不过,您仍然需要编辑您的复制命令。
root/
docker/
docker-compose.yml
docker_resource.txt
config
src/
project-files.whatever
Dockerfile
root-files.txt
无论如何,您都希望将 compose 和 Dockerfile 和资源分开。根据里面的内容,docker_resource
您可能希望将其移动到 src.src 中。将图像视为程序本身,无需配置。我建议将资源/配置内容放在一个卷中,这样您就不必在每次更改时都从头开始重建。
另一种方法是将 Dockerfile 放在上一层并允许您的根目录作为构建上下文。在这种情况下,您的结构将是这样的:
/root
Dockerfile
docker-compose.yml
docker_resource.txt
config
src/
project-files.whatever
root-Files/
root-files.txt
不确定你是否喜欢这样。
推荐阅读
- python - Heroku:ModuleNotFoundError:没有名为“sklearn_pandas”的模块
- visual-studio-code - 如何删除 VS Code 中的编辑器匹配括号行?
- python - 本地开发服务器错误
- r - ggplot2:基于数据点分布的箱线图颜色渐变
- macos - SwiftUI 拖放 - 来自其他应用程序的文件
- c++ - 调用 std::this_thread::sleep_for 时 C++ 线程无法运行
- javascript - Mocha:期望用给定的文本抛出错误
- javascript - 添加导入 css 和脚本后字段集出现错误
- python - Python用以前的值填充NaN
- google-chrome-extension - 浏览器扩展 - 基于会话的登录