背景:
我正在使用 docker 部署 python-web(django) 环境。
我想制作一个干净的docker镜像,只包含运行时环境,不包含源代码,然后将代码卷入。
我的 docker 镜像仓库:https ://github.com/EaseCloud/docker-django
FROM python:latest
MAINTAINER huangwc@easecloud.cn
WORKDIR /var/app
ENV PROJECT=app
RUN apt-get update && apt-get upgrade -y && apt-get autoremove -y
RUN pip install --upgrade pip && \
pip install gunicorn django greenlet eventlet
COPY ./startup.sh /var
RUN chmod +x /var/startup.sh
VOLUME ["/var/app", "/var/app/media"]
EXPOSE 8000
CMD ["/var/startup.sh"]
所以,我现在正在startup.sh
使用该CMD
命令运行一个脚本。
脚本内容为:
#!/bin/bash
set -e
if [ ! -e ./manage.py ]; then
django-admin startproject $PROJECT .
fi
if [ -f ./requirements.txt ]; then
pip install -r requirements.txt
fi
gunicorn -b 0.0.0.0:8000 -w 4 -k eventlet $PROJECT.wsgi
在脚本中,我将执行以下操作:
- 如果没有源卷,请尝试启动 django 项目;
- 在中安装 PyPI 要求
requirements.txt
; - 启动gunicorn服务;
问题:
现在,因为普通我会把源代码卷进去,包括requirements.txt
,所以我可能对不同的 docker 容器实例有不同的 PyPI 要求。
我要划线:
pip install -r requirements.txt
仅在我调用时执行docker run
:
docker run --name myproject \
-v /var/django/myproject:/var/app \
-e PROJECT=myproject \
huangwc/django
但是我不希望命令在我调用时运行:
docker start myproject
有没有一个好的解决方案来做到这一点?