Рубрики
Без рубрики

Одиночный докер для тестирования и производства с использованием многоступенчатых сборки

В разных контекстах, таких как разработка, проведение тестов или обслуживающих продуктов, наши приложения имеют разные … Теги с докером, многоступенчатым, докерфилом, Python.

В разных контекстах, таких как разработка, проведение тестов или обслуживающих продуктов, наши приложения имеют разные потребности, когда речь идет до их докера. Для разработки вы можете потребоваться сервер Live-Reled со всеми необходимыми зависимостями. Для тестирования вам, вероятно, нужны еще несколько пакетов, которые вы Определенно Не хочу на производство.

Есть способы поступить в это, первый, который имеет в виду, использует несколько докерфайлов, и просто рассказывает докер, который использовать. Но этот подход имеет свои пределы, особенно вдоль дороги, где каждый файл может очень легко развивать свою жизнь, расходящийся друг от друга, помимознания.

К счастью, поскольку Docker 17.05 у нас есть концепция Многоступенчатые сборки Отказ Способность объявлять отдельные изображения в одном Dockerfile и свободно наследовать или копировать данные между собой. Это точный подход, который я использовал при строительстве изображений для Lox :

#############################################
# Base container with all necessary deps
FROM tiangolo/uvicorn-gunicorn:python3.7-alpine3.8 AS base

ENV HOME=/app 
    BUILD_DEPS="build-base linux-headers postgresql postgresql-dev libffi-dev"
WORKDIR ${HOME}

# Copy the pipenv files
COPY Pipfile ${WORKDIR}/
COPY Pipfile.lock ${WORKDIR}/

# 1. Install system dependencies
# 2. Install pipenv
# 3. Use pipenv to install app deps
# 4. Remove system deps to save space
RUN apk add --no-cache ${BUILD_DEPS} \
    && pip install --no-cache-dir pipenv \
    && pipenv install --system \
    && apk del ${BUILD_DEPS}

#############################################
# Test container from a common base
FROM base AS test
# Same as in the base image but this time we also install the --dev packages
RUN apk add --no-cache ${BUILD_DEPS} \
    && pip install --no-cache-dir pipenv \
    && pipenv install --system --dev \
    && apk del ${BUILD_DEPS}

#############################################
# Live container with Webpack watcher
FROM base AS live
# Install Node.js dependencies
RUN apk add --no-cache nodejs npm
# Install all Webpack dependencies
COPY package.json package-lock.json ./
RUN npm install
# Finally copy the current sources and build the bundle
COPY . .
RUN npm run bundle:build

#############################################
# Final container with the app
FROM base AS production
# Only copy the ready app dir from the live step
COPY --from=live ${WORKDIR} ${WORKDIR}

Примечание: Ради краткости, это Dockerfile Не содержит всех улучшений размера и произведет немного большие изображения.

Теперь вы можете строить отдельные изображения для каждого из ваших потребностей:

Тестирование

$ docker build -t suda/lox/test --target test .

Разработка W/Live-Reled

$ docker build -t suda/lox/live --target live .

Производство

$ docker build -t suda/lox --target production .

P.S.: Возможно, вы заметили, что использовал отличный базовый образ Python из Себастьян Рамирес И если вы хотите развернуть проект Django с помощью ASGI , У меня есть некоторые инструкции, которые могут помочь вам Отказ

Оригинал: “https://dev.to/suda/single-dockerfile-for-testing-and-production-using-multi-stage-builds-189o”