我有一个安装生产和测试依赖项的 Dockerfile。我想有单独的测试图像,所以生产图像更小,没有太多的代码重复。也许有类似的FROM语句来引用其他 Dockerfile?
Dockerfile 有以下几行:
ADD requirements.txt ${PROJECT_DIR}/requirements.txt
RUN pip install --no-cache --process-dependency-links --trusted-host github.com -r requirements.txt
ADD requirements-test.txt ${PROJECT_DIR}/requirements-test.txt
RUN pip install --no-cache --process-dependency-links --trusted-host github.com -r requirements-test.txt
Run Code Online (Sandbox Code Playgroud)
前两个为项目安装依赖项,后两个 - 安装用于测试的依赖项(pytest、pylint 等)。
我还有 docker-compose 可以启动数据库、redis 缓存等。这就是我运行服务和运行测试的方式:
run:
docker-compose -f docker-compose.yaml run
test:
docker-compose -f docker-compose-dev.yaml run py.test tests/
Run Code Online (Sandbox Code Playgroud)
里面都有docker-compose.yaml我的容器的这个构建配置:
build:
context: .
dockerfile: ./Dockerfile
Run Code Online (Sandbox Code Playgroud)
因此,我可以从我的docker-compose.yaml.
ben*_*opy 13
推荐的方法是多阶段构建:
https://docs.docker.com/develop/develop-images/multistage-build/
也就是说,不要将生产与测试 docker 文件分开。相反,将所有需求保存在一个文件中,并针对您需要的目标阶段进行构建。
Dockerfile 示例:
FROM python:3.8.7-slim-buster AS production
ADD requirements.txt ${PROJECT_DIR}/requirements.txt
RUN pip install -r requirements.txt
FROM production AS test
ADD requirements-test.txt ${PROJECT_DIR}/requirements-test.txt
RUN pip install -r requirements-test.txt
Run Code Online (Sandbox Code Playgroud)
然后为您的生产构建目标选择正确的阶段:
docker build --target production -t org/service:latest .
Run Code Online (Sandbox Code Playgroud)
Docker Engine 17.05 中引入了多阶段构建语法。
FROM是去这里的方式。生产和开发映像不应该有太大差异,或者根本没有差异,因为其想法是部署您开发的内容。根据我的经验,从生产映像开始并从中扩展开发映像更容易,因为开发需要更多的软件,如调试器、编译器等。
由于评论:
在一个dockerfile的FROM指令处理图像标签,所以像ubuntu:latest比码头工人将首先尝试在本地寻找比尝试图像从回购拉,如果不是。
如果您没有存储库,您可以通过运行在本地创建基础镜像:
docker build --tag vendor/production:0.0.1 .
Run Code Online (Sandbox Code Playgroud)
什么将编译图像。比你可以写:
FROM vendor/production:0.0.1
Run Code Online (Sandbox Code Playgroud)
在你的dev-dockerfile和编译这个。我通常为所有编译内容创建一个小的 bash 脚本。
| 归档时间: |
|
| 查看次数: |
7320 次 |
| 最近记录: |