Ich habe ein Django-Angular-Webprojekt (Workflows genannt), das ich mit Jenkins CI erstelle. Jenkins das Repository überwacht und auf neue begehen Wieder baut Container mein Projekt mit den folgenden zwei Skripte, die Bereinigung und Wieder build ausführen:docker-compose build erstellt einige Schichten meines Containers nicht neu, was zu teilweise veraltetem Code führt
#!/bin/sh
docker rm -v $(docker ps -a -q -f status=exited) 2>/dev/null
docker rmi $(docker images -q -f 'dangling=true') 2>/dev/null
exit 0
Und die Wieder Build-Skript ist:
!/bin/sh
DOCKER_COMPOSE=/usr/local/bin/docker-compose
[ -x $DOCKER_COMPOSE ] || (
echo "docker-compose not found, install it from https://docs.docker.com/compose/install/"
exit 1
)
$DOCKER_COMPOSE build --pull || exit 1
$DOCKER_COMPOSE up -d || exit 2
$DOCKER_COMPOSE ps
I JavaScript-Frontend meiner django Website direkt in dem innerhalb Dockerfile
Anweisung wie folgt Docker Bild bauen:
FROM debian:jessie
ADD . /srv/workflows
# Install dependencies
RUN apt-get update && apt-get install -y git \
curl \
uwsgi \
uwsgi-plugin-python \
python-django \
python-psycopg2 \
python-django-celery \
python-django-jsonfield
RUN easy_install pip
RUN pip install djangorestframework \
python-social-auth
RUN pip install git+https://github.com/st4lk/django-rest-social-auth.git
# Set up node.js and build frontend
RUN curl --silent --location https://deb.nodesource.com/setup_5.x | bash -
RUN apt-get install -y nodejs
RUN npm install -g webpack gulp-cli bower
WORKDIR /srv/workflows/workflows/frontend
RUN npm install
RUN bower install --allow-root
RUN mkdir -p ../static
RUN mkdir -p ../../static
RUN gulp dist
# Get everything ready and run
WORKDIR /srv/workflows
RUN python manage.py validate
RUN python manage.py collectstatic --clear --noinput
CMD /bin/bash -c "python manage.py makemigrations --noinput; python manage.py migrate --noinput; /usr/bin/uwsgi --emperor /etc/uwsgi/apps-enabled/bostongene.ini"
Aber aus irgendeinem Grunde, wenn docker-compose
baut dieses Bild wieder auf, die Ergebnisse von django collectatic command (python manage.py collectstatic --clear --noinput
) enthalten immer noch die allererste alte Version von Dateien, die im allerersten Bild enthalten waren, als ich den Container zum ersten Mal daraus erstellte. Warum?
Verwandte Abschnitt docker-compose.yml
:
workflows-django:
restart: always
build: ./workflows
links:
- "workflows-db: workflows-db"
- "workflows-rabbitmq: workflows-rabbitmq"
volumes:
- /srv/workflows/static/
volumes_from:
- workflows-db
ports:
- "8000:8000"
command: /bin/bash -c "python manage.py makemigrations --noinput; python manage.py migrate --noinput; /usr/bin/uwsgi --emperor /etc/uwsgi/apps-enabled/bostongene.ini"
Verwenden Sie ein Volume in der Compose-Datei? – dnephin
@dnephin Ja, das tue ich. Den zugehörigen Abschnitt der 'docker-compose.yml'-Konfiguration zur Frage hinzugefügt. Also, ich denke, die Lautstärke bleibt zwischen den Builds erhalten und ich hätte sie mit etwas wie '--rm' oder' docker-cleanup-volumes.sh' löschen sollen? –
Was genau ist Ihr Docker-Befehl? –