【发布时间】:2020-03-19 12:41:21
【问题描述】:
我有一个应用程序 ABC,我想将它放在 docker 环境中。我构建了一个 Dockerfile 并获得了我在 docker-compose.yml 中使用的图像 abcd1234 但是在尝试构建 docker-compose 时,所有 requirements.txt 文件都被重新安装。能不能不使用已经存在的镜像,防止时间重装?
我是 docker 新手,想了解所有参数。另外,“上下文”是否正确?在 docker-compose.yml 中还是应该包含图像内的路径?
PS,我的 docker-compose.yml 不在项目的同一目录中,因为我将使用多个图像来公开更多端口。
docker-compose.yml:
services:
app:
build:
context: /Users/user/Desktop/ABC/
ports:
- "8000:8000"
image: abcd1234
command: >
sh -c "python manage.py migrate &&
python manage.py runserver 0.0.0.0:8000"
environment:
- PROJECT_ENV=development
Dockerfile:
FROM python:3.6-slim-buster AS build
MAINTAINER ABC
ENV PYTHONUNBUFFERED 1
RUN python3 -m venv /venv
RUN apt-get update && \
apt-get upgrade -y && \
apt-get install -y git && \
apt-get install -y build-essential && \
apt-get install -y awscli && \
apt-get install -y unzip && \
apt-get install -y nano
RUN apt-get install -y libsm6 libxext6 libxrender-dev
COPY . /ABC/
RUN apt-cache search mysql-server
RUN apt-cache search libmysqlclient-dev
RUN apt-get install -y libpq-dev
RUN apt-get install -y postgresql
RUN apt-cache search postgresql-server-dev-9.5
RUN pip install --upgrade awscli==1.14.5 s3cmd==2.0.1 python-magic
RUN pip install -r /ABC/requirements.txt
WORKDIR .
请指导我如何处理这两种情况。谢谢!
【问题讨论】:
-
如何启动服务?如果您正在执行
docker-compose up,除非您指定--build标志,否则不会重建图像。 -
您还可以优化您的 Dockerfile。您可以将
COPY . /ABC/放在底部,在安装依赖项之前,您只需复制requirements.txt。这样,除非您实际添加了一些依赖项(Docker 可以重用缓存中的层),否则您的依赖项不会在每个构建中重新安装。因此,当您更改代码中的某些内容时,只会重建该层(以及下面/之后的层)。 -
感谢@StefanGolubović dockerfile 的构建在第一次尝试中是成功的,我想避免在构建 docker-compose 时重新安装 requirements.txt。也会尝试这种方式。 PS。我将创建容器并在 8000 端口(通过邮递员)访问 Django 应用程序的 API,并将在 docker-compose. 中集成多个应用程序,每个应用程序位于不同的端口。
-
不安装 requirements.txt 应该如何工作?
标签: python python-3.x docker docker-compose dockerfile