Sco*_*les 2 python docker docker-compose
当我运行时docker-compose up,为什么会创建一个新图像?如何告诉 docker-compose 使用我刚刚创建的映像运行?我在这里做错了什么?
docker build . -t prod_srdc_web当我使用干净的系统运行命令时docker system prune -a,一切都构建得很好。当我docker image ls在构建图像后运行时,我看到以下内容:
REPOSITORY TAG IMAGE ID CREATED SIZE
prod_srdc_web latest 923538608c06 5 seconds ago 1.1GB
<none> <none> 04b24dbf7c93 About a minute ago 4.23MB
python 3.7 42d620af35be 9 days ago 918MB
alpine 3.7 6d1ef012b567 4 months ago 4.21MB
Run Code Online (Sandbox Code Playgroud)
运行后,docker-compose up一切都会重新构建并且容器启动。现在docker image ps显示具有新名称的相同图像srdc_django_web:
REPOSITORY TAG IMAGE ID CREATED SIZE
srdc_django_web latest 7e75a841e0fd About a minute ago 1.1GB
prod_srdc_web latest 923538608c06 2 minutes ago 1.1GB
<none> <none> 04b24dbf7c93 4 minutes ago 4.23MB
python 3.7 42d620af35be 9 days ago 918MB
alpine 3.7 6d1ef012b567 4 months ago 4.21MB
Run Code Online (Sandbox Code Playgroud)
为什么要docker-compose up树立新形象?理想情况下,我想使用我刚刚构建并标记的图像,prod_srdc_web.
Dockerfile:
FROM alpine:3.7
RUN apk upgrade --no-cache build-base gcc python=3.7 python3-dev postgresql-dev bash git
ENV LIBRARY_PATH=lib:/usr/lib
FROM python:3.7
ENV PYTHONUNBUFFERED 1
RUN mkdir -p /code && mkdir -p /var/www/website.com/static/
WORKDIR /code
# Install dependencies
COPY requirements.txt /code/
RUN pip3 install --no-cache-dir --upgrade pip
RUN pip3 install -r requirements.txt
RUN pip3 install gunicorn
# Copy project
COPY . /code
# Copy entrypoint.prod.sh
COPY ./entrypoint.prod.sh /
EXPOSE 4500
# Run entrypoint.prod.sh
RUN [ "chmod", "+x", "./entrypoint.prod.sh" ]
ENTRYPOINT [ "./entrypoint.prod.sh" ]
Run Code Online (Sandbox Code Playgroud)
docker-compose.yml
version: '3'
services:
django_web:
build: .
volumes:
- .:/srdc
ports:
- "4500:4500"
container_name: srdc_c_django_web
Run Code Online (Sandbox Code Playgroud)
入口点.prod.sh
#!/usr/bin/env bash
python manage.py makemigrations
python manage.py migrate --noinput
python manage.py collectstatic --noinput
gunicorn srdc.wsgi:application -w 3 -b 0.0.0.0:4500
Run Code Online (Sandbox Code Playgroud)
看起来存储库名称srdc_django_web是通过将目录名称 ( srdc) 与 docker-compose.yml 文件 ( ) 中的服务名称连接起来创建的django_web。如果我最终添加 Nginx,我想使用 docker-compose up 来运行整个容器prod_srdc_web,而不是让它重新构建每个服务。
仅供参考,我的版本是:
Docker version 18.09.2, build 6247962
docker-compose version 1.23.2, build 1110ad01
Run Code Online (Sandbox Code Playgroud)
您的撰写文件未指定图像名称。因此,即使您提前手动构建镜像,docker-compose 也没有您要运行的构建和您已创建的镜像之间的任何映射。要指定图像名称,请指定:
version: '3'
services:
django_web:
build: .
image: prod_srdc_web:latest
volumes:
- .:/srdc
ports:
- "4500:4500"
container_name: srdc_c_django_web
Run Code Online (Sandbox Code Playgroud)
Docker 将使用图像缓存来避免重新创建已有的相同图像层。但是,由于您有以下情况:
COPY . /code
Run Code Online (Sandbox Code Playgroud)
构建上下文中的任何文件(当前目录,假设您不忽略带有 的文件.dockerignore)的更改都将导致创建新映像。这可以包括文件所有权和权限,并且还包括像 docker-compose.yml 这样的文件(如果它们位于此目录中)。
| 归档时间: |
|
| 查看次数: |
3383 次 |
| 最近记录: |