バックグラウンド:
docker を使用して python-web(django) 環境をデプロイしています。
そして、ランタイム環境のみを含み、ソースコードを含まないクリーンな 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
これを行う良い解決策はありますか?