mirror of
				https://github.com/cookiecutter/cookiecutter-django.git
				synced 2025-10-31 07:57:42 +03:00 
			
		
		
		
	Updated the local and production dockerfiles with more repeatability and easier to update in mind.
This commit is contained in:
		
							parent
							
								
									483b636fcb
								
							
						
					
					
						commit
						15453df824
					
				|  | @ -1,31 +1,57 @@ | ||||||
| # Python build stage | ARG PYTHON_VERSION=3.8-slim-buster | ||||||
| FROM python:3.8-slim-buster as python-build-stage |  | ||||||
| ENV PYTHONDONTWRITEBYTECODE 1 |  | ||||||
| 
 | 
 | ||||||
|  | # define an alias for the specfic python version used in this file. | ||||||
|  | FROM python:${PYTHON_VERSION} as python | ||||||
|  | 
 | ||||||
|  | # Python build stage | ||||||
|  | FROM python as python-build-stage | ||||||
|  | 
 | ||||||
|  | ARG BUILD_ENVIRONMENT=local | ||||||
|  | 
 | ||||||
|  | # Install apt packages | ||||||
| RUN apt-get update && apt-get install --no-install-recommends -y \ | RUN apt-get update && apt-get install --no-install-recommends -y \ | ||||||
|   # dependencies for building Python packages |   # dependencies for building Python packages | ||||||
|   build-essential \ |   build-essential \ | ||||||
|  |   # psycopg2 dependencies | ||||||
|  |   libpq-dev | ||||||
|  | 
 | ||||||
|  | # Requirements are installed here to ensure they will be cached. | ||||||
|  | COPY ./requirements . | ||||||
|  | 
 | ||||||
|  | # Create Python Dependency and Sub-Dependency Wheels. | ||||||
|  | RUN pip wheel --wheel-dir /usr/src/app/wheels  \ | ||||||
|  |   -r ${BUILD_ENVIRONMENT}.txt | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | # Python 'run' stage | ||||||
|  | FROM python as python-run-stage | ||||||
|  | 
 | ||||||
|  | ARG BUILD_ENVIRONMENT=local | ||||||
|  | ARG APP_HOME=/app | ||||||
|  | 
 | ||||||
|  | ENV PYTHONUNBUFFERED 1 | ||||||
|  | ENV PYTHONDONTWRITEBYTECODE 1 | ||||||
|  | ENV BUILD_ENV ${BUILD_ENVIRONMENT} | ||||||
|  | 
 | ||||||
|  | WORKDIR ${APP_HOME} | ||||||
|  | 
 | ||||||
|  | # Install required system dependencies | ||||||
|  | RUN apt-get update && apt-get install --no-install-recommends -y \ | ||||||
|   # psycopg2 dependencies |   # psycopg2 dependencies | ||||||
|   libpq-dev \ |   libpq-dev \ | ||||||
|  |   # Translations dependencies | ||||||
|  |   gettext \ | ||||||
|   # cleaning up unused files |   # cleaning up unused files | ||||||
|   && apt-get purge -y --auto-remove -o APT::AutoRemove::RecommendsImportant=false \ |   && apt-get purge -y --auto-remove -o APT::AutoRemove::RecommendsImportant=false \ | ||||||
|   && rm -rf /var/lib/apt/lists/* |   && rm -rf /var/lib/apt/lists/* | ||||||
| 
 | 
 | ||||||
|  | # All absolute dir copies ignore workdir instruction. All relative dir copies are wrt to the workdir instruction | ||||||
|  | # copy python dependency wheels from python-build-stage | ||||||
|  | COPY --from=python-build-stage /usr/src/app/wheels  /wheels/ | ||||||
| 
 | 
 | ||||||
| # Requirements are installed here to ensure they will be cached. | # use wheels to install python dependencies | ||||||
| COPY ./requirements /requirements | RUN pip install --no-cache-dir --no-index --find-links=/wheels/ /wheels/* \ | ||||||
| 
 | 	&& rm -rf /wheels/ | ||||||
| # create python dependency wheels |  | ||||||
| RUN pip wheel --no-cache-dir --no-deps --wheel-dir /usr/src/app/wheels  \ |  | ||||||
|   -r /requirements/local.txt \ |  | ||||||
|   && rm -rf /requirements |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| # Python 'run' stage |  | ||||||
| FROM python:3.8-slim-buster as python-run-stage |  | ||||||
| 
 |  | ||||||
| ENV PYTHONUNBUFFERED 1 |  | ||||||
| ENV PYTHONDONTWRITEBYTECODE 1 |  | ||||||
| 
 | 
 | ||||||
| COPY ./compose/production/django/entrypoint /entrypoint | COPY ./compose/production/django/entrypoint /entrypoint | ||||||
| RUN sed -i 's/\r$//g' /entrypoint | RUN sed -i 's/\r$//g' /entrypoint | ||||||
|  | @ -49,26 +75,7 @@ RUN sed -i 's/\r$//g' /start-flower | ||||||
| RUN chmod +x /start-flower | RUN chmod +x /start-flower | ||||||
| {% endif %} | {% endif %} | ||||||
| 
 | 
 | ||||||
|  | # copy application code to WORKDIR | ||||||
|  | COPY . ${APP_HOME} | ||||||
| 
 | 
 | ||||||
| # installing required system dependencies | ENTRYPOINT ["/entrypoint"] | ||||||
| RUN apt-get update && apt-get install --no-install-recommends -y \ |  | ||||||
|   # psycopg2 dependencies |  | ||||||
|   libpq-dev \ |  | ||||||
|   # Translations dependencies |  | ||||||
|   gettext \ |  | ||||||
|   # cleaning up unused files |  | ||||||
|   && apt-get purge -y --auto-remove -o APT::AutoRemove::RecommendsImportant=false \ |  | ||||||
|   && rm -rf /var/lib/apt/lists/* |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| # copy python dependency wheels from python-build-stage |  | ||||||
| COPY --from=python-build-stage /usr/src/app/wheels  /wheels |  | ||||||
| 
 |  | ||||||
| # use wheels to install python dependencies |  | ||||||
| RUN pip install --no-cache /wheels/* \ |  | ||||||
|   && rm -rf /wheels |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| WORKDIR /app |  | ||||||
| 
 |  | ||||||
| ENTRYPOINT ["/entrypoint"] |  | ||||||
|  | @ -1,47 +1,75 @@ | ||||||
| {% if cookiecutter.js_task_runner == 'Gulp' -%} | {% if cookiecutter.js_task_runner == 'Gulp' -%} | ||||||
| FROM node:10-stretch-slim as client-builder | FROM node:10-stretch-slim as client-builder | ||||||
| 
 | 
 | ||||||
| WORKDIR /app | ARG APP_HOME=/app | ||||||
| COPY ./package.json /app | WORKDIR ${APP_HOME} | ||||||
|  | 
 | ||||||
|  | COPY ./package.json ${APP_HOME} | ||||||
| RUN npm install && npm cache clean --force | RUN npm install && npm cache clean --force | ||||||
| COPY . /app | COPY . ${APP_HOME} | ||||||
| RUN npm run build | RUN npm run build | ||||||
| 
 | 
 | ||||||
| {%- endif %} | {%- endif %} | ||||||
| 
 | 
 | ||||||
|  | ARG PYTHON_VERSION=3.8-slim-buster | ||||||
|  | 
 | ||||||
|  | # define an alias for the specfic python version used in this file. | ||||||
|  | FROM python:${PYTHON_VERSION} as python | ||||||
|  | 
 | ||||||
| # Python build stage | # Python build stage | ||||||
| FROM python:3.8-slim-buster as python-build-stage | FROM python as python-build-stage | ||||||
| 
 |  | ||||||
| ENV PYTHONDONTWRITEBYTECODE 1 |  | ||||||
| ARG BUILD_ENVIRONMENT |  | ||||||
| 
 | 
 | ||||||
|  | ARG BUILD_ENVIRONMENT=production | ||||||
| 
 | 
 | ||||||
|  | # Install apt packages | ||||||
| RUN apt-get update && apt-get install --no-install-recommends -y \ | RUN apt-get update && apt-get install --no-install-recommends -y \ | ||||||
|   # dependencies for building Python packages |   # dependencies for building Python packages | ||||||
|   build-essential \ |   build-essential \ | ||||||
|  |   # psycopg2 dependencies | ||||||
|  |   libpq-dev | ||||||
|  | 
 | ||||||
|  | # Requirements are installed here to ensure they will be cached. | ||||||
|  | COPY ./requirements . | ||||||
|  | 
 | ||||||
|  | # Create Python Dependency and Sub-Dependency Wheels. | ||||||
|  | RUN pip wheel --wheel-dir /usr/src/app/wheels  \ | ||||||
|  |   -r ${BUILD_ENVIRONMENT}.txt | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | # Python 'run' stage | ||||||
|  | FROM python as python-run-stage | ||||||
|  | 
 | ||||||
|  | ARG BUILD_ENVIRONMENT=production | ||||||
|  | ARG APP_HOME=/app | ||||||
|  | 
 | ||||||
|  | ENV PYTHONUNBUFFERED 1 | ||||||
|  | ENV PYTHONDONTWRITEBYTECODE 1 | ||||||
|  | ENV BUILD_ENV ${BUILD_ENVIRONMENT} | ||||||
|  | 
 | ||||||
|  | WORKDIR ${APP_HOME} | ||||||
|  | 
 | ||||||
|  | RUN addgroup --system django \ | ||||||
|  |     && adduser --system --ingroup django django | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | # Install required system dependencies | ||||||
|  | RUN apt-get update && apt-get install --no-install-recommends -y \ | ||||||
|   # psycopg2 dependencies |   # psycopg2 dependencies | ||||||
|   libpq-dev \ |   libpq-dev \ | ||||||
|  |   # Translations dependencies | ||||||
|  |   gettext \ | ||||||
|   # cleaning up unused files |   # cleaning up unused files | ||||||
|   && apt-get purge -y --auto-remove -o APT::AutoRemove::RecommendsImportant=false \ |   && apt-get purge -y --auto-remove -o APT::AutoRemove::RecommendsImportant=false \ | ||||||
|   && rm -rf /var/lib/apt/lists/* |   && rm -rf /var/lib/apt/lists/* | ||||||
| 
 | 
 | ||||||
|  | # All absolute dir copies ignore workdir instruction. All relative dir copies are wrt to the workdir instruction | ||||||
|  | # copy python dependency wheels from python-build-stage | ||||||
|  | COPY --from=python-build-stage /usr/src/app/wheels  /wheels/ | ||||||
| 
 | 
 | ||||||
| # Requirements are installed here to ensure they will be cached. | # use wheels to install python dependencies | ||||||
| COPY ./requirements /requirements | RUN pip install --no-cache-dir --no-index --find-links=/wheels/ /wheels/* \ | ||||||
|  | 	&& rm -rf /wheels/ | ||||||
| 
 | 
 | ||||||
| # create python dependency wheels |  | ||||||
| RUN pip wheel --no-cache-dir --no-deps --wheel-dir /usr/src/app/wheels  \ |  | ||||||
|   -r /requirements/production.txt \ |  | ||||||
|   && rm -rf /requirements |  | ||||||
| 
 |  | ||||||
| # Python 'run' stage |  | ||||||
| FROM python:3.8-slim-buster as python-run-stage |  | ||||||
| 
 |  | ||||||
| ENV PYTHONDONTWRITEBYTECODE 1 |  | ||||||
| ENV PYTHONUNBUFFERED 1 |  | ||||||
| 
 |  | ||||||
| RUN addgroup --system django \ |  | ||||||
|     && adduser --system --ingroup django django |  | ||||||
| 
 | 
 | ||||||
| COPY --chown=django:django ./compose/production/django/entrypoint /entrypoint | COPY --chown=django:django ./compose/production/django/entrypoint /entrypoint | ||||||
| RUN sed -i 's/\r$//g' /entrypoint | RUN sed -i 's/\r$//g' /entrypoint | ||||||
|  | @ -69,32 +97,17 @@ RUN sed -i 's/\r$//g' /start-flower | ||||||
| RUN chmod +x /start-flower | RUN chmod +x /start-flower | ||||||
| {%- endif %} | {%- endif %} | ||||||
| 
 | 
 | ||||||
| # installing required system dependencies |  | ||||||
| RUN apt-get update && apt-get install --no-install-recommends -y \ |  | ||||||
|   # psycopg2 dependencies |  | ||||||
|   libpq-dev \ |  | ||||||
|   # Translations dependencies |  | ||||||
|   gettext \ |  | ||||||
|   # cleaning up unused files |  | ||||||
|   && apt-get purge -y --auto-remove -o APT::AutoRemove::RecommendsImportant=false \ |  | ||||||
|   && rm -rf /var/lib/apt/lists/* |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| # copy python dependency wheels from python-build-stage |  | ||||||
| COPY --from=python-build-stage /usr/src/app/wheels  /wheels |  | ||||||
| 
 |  | ||||||
| # use wheels to install python dependencies |  | ||||||
| RUN pip install --no-cache /wheels/* \ |  | ||||||
|   && rm -rf /wheels |  | ||||||
| 
 | 
 | ||||||
|  | # copy application code to WORKDIR | ||||||
| {%- if cookiecutter.js_task_runner == 'Gulp' %} | {%- if cookiecutter.js_task_runner == 'Gulp' %} | ||||||
| COPY --from=client-builder --chown=django:django /app /app | COPY --from=client-builder --chown=django:django ${APP_HOME} ${APP_HOME} | ||||||
| {% else %} | {% else %} | ||||||
| COPY --chown=django:django . /app | COPY --chown=django:django . ${APP_HOME} | ||||||
| {%- endif %} | {%- endif %} | ||||||
| 
 | 
 | ||||||
|  | # make django owner of the WORKDIR directory as well. | ||||||
|  | RUN chown django:django ${APP_HOME} | ||||||
|  | 
 | ||||||
| USER django | USER django | ||||||
| 
 | 
 | ||||||
| WORKDIR /app | ENTRYPOINT ["/entrypoint"] | ||||||
| 
 |  | ||||||
| ENTRYPOINT ["/entrypoint"] |  | ||||||
		Loading…
	
		Reference in New Issue
	
	Block a user