Docker images are now consistently labelled and a bit smaller (#10387)

Extracted from #10368
This commit is contained in:
Jarek Potiuk 2020-08-19 02:03:22 +02:00 коммит произвёл GitHub
Родитель d6f6d53bcd
Коммит 306a6660fd
Не найден ключ, соответствующий данной подписи
Идентификатор ключа GPG: 4AEE18F83AFDEB23
5 изменённых файлов: 76 добавлений и 24 удалений

Просмотреть файл

@ -34,8 +34,20 @@
!docs
!licenses
!metastore_browser
!scripts
# Add those folders to the context so that they are available in the CI container
!scripts/ci/in_container
!scripts/ci/pre_commit
!scripts/prod
!scripts/perf
!scripts/tools
# Add backport packages to the context
!backport_packages
# Add tests and kubernetes_tests to context.
!tests
!kubernetes_tests
!.coveragerc
!.rat-excludes

Просмотреть файл

@ -54,12 +54,6 @@ ARG PYTHON_MAJOR_MINOR_VERSION="3.6"
FROM ${PYTHON_BASE_IMAGE} as airflow-build-image
SHELL ["/bin/bash", "-o", "pipefail", "-e", "-u", "-x", "-c"]
LABEL org.apache.airflow.distro="debian"
LABEL org.apache.airflow.distro.version="buster"
LABEL org.apache.airflow.module="airflow"
LABEL org.apache.airflow.component="airflow"
LABEL org.apache.airflow.image="airflow-build-image"
ARG PYTHON_BASE_IMAGE
ENV PYTHON_BASE_IMAGE=${PYTHON_BASE_IMAGE}
@ -171,6 +165,9 @@ ARG AIRFLOW_CONSTRAINTS_REFERENCE="constraints-master"
ARG AIRFLOW_CONSTRAINTS_URL="https://raw.githubusercontent.com/apache/airflow/${AIRFLOW_CONSTRAINTS_REFERENCE}/constraints-${PYTHON_MAJOR_MINOR_VERSION}.txt"
ENV AIRFLOW_CONSTRAINTS_URL=${AIRFLOW_CONSTRAINTS_URL}
ENV PATH=${PATH}:/root/.local/bin
RUN mkdir -p /root/.local/bin
# In case of Production build image segment we want to pre-install master version of airflow
# dependencies from github so that we do not have to always reinstall it from the scratch.
RUN pip install --user \
@ -202,8 +199,6 @@ ENV AIRFLOW_INSTALL_VERSION=${AIRFLOW_INSTALL_VERSION}
WORKDIR /opt/airflow
ENV PATH=${PATH}:/root/.local/bin
RUN pip install --user "${AIRFLOW_INSTALL_SOURCES}[${AIRFLOW_EXTRAS}]${AIRFLOW_INSTALL_VERSION}" \
--constraint "${AIRFLOW_CONSTRAINTS_URL}" && \
if [ -n "${ADDITIONAL_PYTHON_DEPS}" ]; then pip install --user ${ADDITIONAL_PYTHON_DEPS} \
@ -228,6 +223,20 @@ RUN AIRFLOW_SITE_PACKAGE="/root/.local/lib/python${PYTHON_MAJOR_MINOR_VERSION}/s
RUN find /root/.local -executable -print0 | xargs --null chmod g+x && \
find /root/.local -print0 | xargs --null chmod g+rw
LABEL org.apache.airflow.distro="debian"
LABEL org.apache.airflow.distro.version="buster"
LABEL org.apache.airflow.module="airflow"
LABEL org.apache.airflow.component="airflow"
LABEL org.apache.airflow.image="airflow-build-image"
ARG BUILD_ID
ENV BUILD_ID=${BUILD_ID}
ARG COMMIT_SHA
ENV COMMIT_SHA=${COMMIT_SHA}
LABEL org.apache.airflow.buildImage.buildId=${BUILD_ID}
LABEL org.apache.airflow.buildImage.commitSha=${COMMIT_SHA}
##############################################################################################
# This is the actual Airflow image - much smaller than the build one. We copy
# installed Airflow and all it's dependencies from the build image to make it smaller.
@ -372,5 +381,20 @@ EXPOSE 8080
USER ${AIRFLOW_UID}
ARG BUILD_ID
ENV BUILD_ID=${BUILD_ID}
ARG COMMIT_SHA
ENV COMMIT_SHA=${COMMIT_SHA}
LABEL org.apache.airflow.distro="debian"
LABEL org.apache.airflow.distro.version="buster"
LABEL org.apache.airflow.module="airflow"
LABEL org.apache.airflow.component="airflow"
LABEL org.apache.airflow.image="airflow"
LABEL org.apache.airflow.uid="${AIRFLOW_UID}"
LABEL org.apache.airflow.gid="${AIRFLOW_GID}"
LABEL org.apache.airflow.mainImage.buildId=${BUILD_ID}
LABEL org.apache.airflow.mainImage.commitSha=${COMMIT_SHA}
ENTRYPOINT ["/usr/bin/dumb-init", "--", "/entrypoint"]
CMD ["--help"]

Просмотреть файл

@ -281,20 +281,11 @@ RUN yarn --cwd airflow/www run prod
COPY scripts/ci/in_container/entrypoint_ci.sh /entrypoint
RUN chmod a+x /entrypoint
# Copy selected subdirectories only
COPY .github/ ${AIRFLOW_SOURCES}/.github/
COPY metastore_browser/ ${AIRFLOW_SOURCES}/metastore_browser/
COPY dags/ ${AIRFLOW_SOURCES}/dags/
COPY common/ ${AIRFLOW_SOURCES}/common/
COPY licenses/ ${AIRFLOW_SOURCES}/licenses/
COPY scripts/ ${AIRFLOW_SOURCES}/scripts/
COPY docs/ ${AIRFLOW_SOURCES}/docs/
COPY tests/ ${AIRFLOW_SOURCES}/tests/
COPY airflow/ ${AIRFLOW_SOURCES}/airflow/
COPY .coveragerc .rat-excludes .flake8 pylintrc LICENSE MANIFEST.in NOTICE CHANGELOG.txt \
.github pytest.ini \
setup.cfg setup.py \
${AIRFLOW_SOURCES}/
# We can copy everything here. The Context is filtered by dockerignore. This makes sure we are not
# copying over stuff that is accidentally generated or that we do not need (such as .egginfo)
# if you want to add something that is missing and you expect to see it in the image you can
# add it with ! in .dockerignore next to the airflow, test etc. directories there
COPY . ${AIRFLOW_SOURCES}/
# Install autocomplete for airflow
RUN register-python-argcomplete airflow >> ~/.bashrc
@ -318,6 +309,21 @@ ENV PATH="${HOME}:${PATH}"
# Needed to stop Gunicorn from crashing when /tmp is now mounted from host
ENV GUNICORN_CMD_ARGS="--worker-tmp-dir /dev/shm/"
ARG BUILD_ID
ENV BUILD_ID=${BUILD_ID}
ARG COMMIT_SHA
ENV COMMIT_SHA=${COMMIT_SHA}
LABEL org.apache.airflow.distro="debian"
LABEL org.apache.airflow.distro.version="buster"
LABEL org.apache.airflow.module="airflow"
LABEL org.apache.airflow.component="airflow"
LABEL org.apache.airflow.image="airflow-ci"
LABEL org.apache.airflow.uid="0"
LABEL org.apache.airflow.gid="0"
LABEL org.apache.airflow.buildId=${BUILD_ID}
LABEL org.apache.airflow.commitSha=${COMMIT_SHA}
EXPOSE 8080
ENTRYPOINT ["/usr/bin/dumb-init", "--", "/entrypoint"]

Просмотреть файл

@ -576,6 +576,8 @@ Docker building ${AIRFLOW_CI_IMAGE}.
--build-arg ADDITIONAL_DEV_DEPS="${ADDITIONAL_DEV_DEPS}" \
--build-arg ADDITIONAL_RUNTIME_DEPS="${ADDITIONAL_RUNTIME_DEPS}" \
--build-arg UPGRADE_TO_LATEST_CONSTRAINTS="${UPGRADE_TO_LATEST_CONSTRAINTS}" \
--build-arg BUILD_ID="${CI_BUILD_ID}" \
--build-arg COMMIT_SHA="${COMMIT_SHA}" \
"${DOCKER_CACHE_CI_DIRECTIVE[@]}" \
-t "${AIRFLOW_CI_IMAGE}" \
--target "main" \
@ -724,6 +726,8 @@ function build_prod_image() {
--build-arg ADDITIONAL_AIRFLOW_EXTRAS="${ADDITIONAL_AIRFLOW_EXTRAS}" \
--build-arg ADDITIONAL_PYTHON_DEPS="${ADDITIONAL_PYTHON_DEPS}" \
--build-arg ADDITIONAL_DEV_DEPS="${ADDITIONAL_DEV_DEPS}" \
--build-arg BUILD_ID="${CI_BUILD_ID}" \
--build-arg COMMIT_SHA="${COMMIT_SHA}" \
"${DOCKER_CACHE_PROD_BUILD_DIRECTIVE[@]}" \
-t "${AIRFLOW_PROD_BUILD_IMAGE}" \
--target "airflow-build-image" \
@ -740,6 +744,8 @@ function build_prod_image() {
--build-arg AIRFLOW_BRANCH="${AIRFLOW_BRANCH_FOR_PYPI_PRELOADING}" \
--build-arg AIRFLOW_EXTRAS="${AIRFLOW_EXTRAS}" \
--build-arg EMBEDDED_DAGS="${EMBEDDED_DAGS}" \
--build-arg BUILD_ID="${CI_BUILD_ID}" \
--build-arg COMMIT_SHA="${COMMIT_SHA}" \
"${DOCKER_CACHE_PROD_DIRECTIVE[@]}" \
-t "${AIRFLOW_PROD_IMAGE}" \
--target "main" \

Просмотреть файл

@ -220,6 +220,10 @@ function initialize_common_environment {
# Namespace where airflow is installed via helm
export HELM_AIRFLOW_NAMESPACE="airflow"
COMMIT_SHA="$(git rev-parse HEAD || echo "Unknown")"
export COMMIT_SHA
export CI_BUILD_ID="0"
}
# Retrieves CI environment variables needed - depending on the CI system we run it in.
@ -233,7 +237,7 @@ function get_environment_for_builds_on_ci() {
export CI_TARGET_BRANCH="master"
export CI_SOURCE_REPO="apache/airflow"
export CI_SOURCE_BRANCH="master"
export CI_BUILD_ID="default-build-id"
export CI_BUILD_ID="0"
export CI_JOB_ID="default-job-id"
if [[ ${CI:=} != "true" ]]; then
echo