【发布时间】:2021-11-29 14:01:14
【问题描述】:
有没有办法避免每次我对源代码进行更改时都重新构建我的 Docker 映像?
我认为我已经优化了我的 Dockerfile 以减少构建时间,但它总是 2 个命令和一些等待时间,有时只添加一行代码。它比简单的 CTRL + S 更长,然后检查结果。
对于代码中的每个小更新,我必须执行的命令:
docker-compose down
docker-compose build
docker-compose up
这是我的 Dockerfile:
FROM python:3-slim as development
ENV PYTHONUNBUFFERED=1
COPY ./requirements.txt /requirements.txt
COPY ./scripts /scripts
EXPOSE 80
RUN apt-get update && \
apt-get install -y \
bash \
build-essential \
gcc \
libffi-dev \
musl-dev \
openssl \
wget \
postgresql \
postgresql-client \
libglib2.0-0 \
libnss3 \
libgconf-2-4 \
libfontconfig1 \
libpq-dev && \
pip install -r /requirements.txt && \
mkdir -p /vol/web/static && \
chmod -R 755 /vol && \
chmod -R +x /scripts
COPY ./files /files
WORKDIR /files
ENV PATH="/scripts:/py/bin:$PATH"
CMD ["run.sh"]
这是我的 docker-compose.yml 文件:
version: '3.9'
x-database-variables: &database-variables
POSTGRES_DB: ${POSTGRES_DB}
POSTGRES_USER: ${POSTGRES_USER}
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
ALLOWED_HOSTS: ${ALLOWED_HOSTS}
x-app-variables: &app-variables
<<: *database-variables
POSTGRES_HOST: ${POSTGRES_HOST}
SPOTIPY_CLIENT_ID: ${SPOTIPY_CLIENT_ID}
SPOTIPY_CLIENT_SECRET: ${SPOTIPY_CLIENT_SECRET}
SECRET_KEY: ${SECRET_KEY}
CLUSTER_HOST: ${CLUSTER_HOST}
DEBUG: 0
services:
website:
build:
context: .
restart: always
volumes:
- static-data:/vol/web
environment: *app-variables
depends_on:
- postgres
postgres:
image: postgres
restart: always
environment: *database-variables
volumes:
- db-data:/var/lib/postgresql/data
proxy:
build:
context: ./proxy
restart: always
depends_on:
- website
ports:
- 80:80
- 443:443
volumes:
- static-data:/vol/static
- ./files/templates:/var/www/html
- ./proxy/default.conf:/etc/nginx/conf.d/default.conf
- ./etc/letsencrypt:/etc/letsencrypt
volumes:
static-data:
db-data:
【问题讨论】:
-
你不需要运行
docker-compose down。您可以重组 Dockerfile 以提高效率:RUN apt-get install在您之前COPY任何东西;然后COPY requirements.txt和RUN pip install; 然后COPY在您的应用程序的其余部分。这样,如果只有scripts目录发生更改,您就不会重复缓慢调用网络的“安装”步骤。 -
谢谢你的回答,我马上去实施!
标签: docker docker-compose dockerfile