|
1 |
| -# Use buster image because the default bullseye image has updated coreutils that require a newer |
2 |
| -# linux kernel than provided by CircleCI, per |
3 |
| -# https://forums.docker.com/t/multiple-projects-stopped-building-on-docker-hub-operation-not-permitted/92570/6 |
4 |
| -# and https://forums.docker.com/t/multiple-projects-stopped-building-on-docker-hub-operation-not-permitted/92570/11 |
5 |
| -FROM python:3.8.12-slim-buster |
6 |
| -MAINTAINER Harold Woo < [email protected]> |
| 1 | +FROM apache/airflow:slim-2.3.3-python3.8 |
7 | 2 |
|
8 |
| -ARG AIRFLOW_UID=10001 |
9 |
| -ARG AIRFLOW_GID=10001 |
10 |
| -ARG PROJECT_DIR="/app" |
| 3 | +ARG PROJECT_DIR="/opt/airflow" |
11 | 4 |
|
12 |
| -# add a non-privileged user for installing and running the application |
13 |
| -RUN mkdir $PROJECT_DIR && \ |
14 |
| - chown $AIRFLOW_UID:$AIRFLOW_GID $PROJECT_DIR && \ |
15 |
| - groupadd --gid $AIRFLOW_GID app && \ |
16 |
| - useradd --no-create-home --uid $AIRFLOW_UID --gid $AIRFLOW_GID --home-dir $PROJECT_DIR app |
| 5 | +ENV PYTHONUNBUFFERED=1 |
| 6 | +ENV PYTHONPATH="$PYTHONPATH:$PROJECT_DIR" |
| 7 | +ENV AIRFLOW_HOME=$PROJECT_DIR |
17 | 8 |
|
18 |
| -RUN apt-get update && \ |
19 |
| - apt-get install -y --no-install-recommends \ |
20 |
| - apt-transport-https build-essential curl git libpq-dev python-dev \ |
21 |
| - default-libmysqlclient-dev gettext sqlite3 libffi-dev \ |
22 |
| - lsb-release gnupg vim screen procps default-mysql-client && \ |
| 9 | +USER root |
| 10 | +RUN apt-get update \ |
| 11 | + && apt-get install -y --no-install-recommends build-essential default-libmysqlclient-dev |
| 12 | + |
| 13 | +# Legacy docker image dependencies to be reviewed |
| 14 | +RUN apt-get install -y --no-install-recommends \ |
| 15 | + lsb-release gnupg curl && \ |
23 | 16 | CLOUD_SDK_REPO="cloud-sdk-$(lsb_release -c -s)" && \
|
24 | 17 | echo "deb http://packages.cloud.google.com/apt $CLOUD_SDK_REPO main" | tee -a /etc/apt/sources.list.d/google-cloud-sdk.list && \
|
25 | 18 | curl https://packages.cloud.google.com/apt/doc/apt-key.gpg | apt-key add - && \
|
26 | 19 | apt-get update -y && apt-get install google-cloud-sdk -y && apt-get install google-cloud-sdk-gke-gcloud-auth-plugin && \
|
27 |
| - apt-get remove -y lsb-release gnupg && \ |
28 |
| - apt-get autoremove -y && \ |
| 20 | + apt-get remove -y lsb-release gnupg |
| 21 | + |
| 22 | +RUN apt-get autoremove -yqq --purge && \ |
29 | 23 | apt-get clean && \
|
30 |
| - rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* |
| 24 | + rm -rf /var/lib/apt/lists/* |
31 | 25 |
|
32 |
| -# Install Python dependencies |
33 |
| -COPY requirements.txt /tmp/ |
34 |
| -# Switch to /tmp to install dependencies outside home dir |
35 |
| -WORKDIR /tmp |
| 26 | +USER airflow |
36 | 27 |
|
37 |
| -RUN pip install --upgrade pip |
38 |
| -RUN export SLUGIFY_USES_TEXT_UNIDECODE=yes && pip install --no-cache-dir -r requirements.txt |
| 28 | +COPY requirements.txt / |
| 29 | +RUN pip install --no-cache-dir -r /requirements.txt |
39 | 30 |
|
40 |
| -# Switch back to home directory |
41 | 31 | WORKDIR $PROJECT_DIR
|
42 | 32 |
|
43 |
| -COPY . $PROJECT_DIR |
44 |
| - |
45 |
| -RUN chown -R $AIRFLOW_UID:$AIRFLOW_GID $PROJECT_DIR |
46 |
| - |
47 |
| -USER $AIRFLOW_UID |
48 |
| - |
49 |
| -ENV PYTHONUNBUFFERED=1 \ |
50 |
| - PORT=8000\ |
51 |
| - PYTHONPATH="$PYTHONPATH:$PROJECT_DIR" |
52 |
| - # AWS_ACCESS_KEY_ID= \ |
53 |
| - # AWS_SECRET_ACCESS_KEY= \ |
54 |
| - # DEPLOY_ENVIRONMENT = |
55 |
| - |
56 |
| -ENV AIRFLOW_HOME=$PROJECT_DIR \ |
57 |
| - AIRFLOW_EMAIL_BACKEND="airflow.utils.email.send_email_smtp" |
58 |
| - # AIRFLOW_AUTHENTICATE= \ |
59 |
| - # AIRFLOW_AUTH_BACKEND= \ |
60 |
| - # AIRFLOW_BROKER_URL= \ |
61 |
| - # AIRFLOW_RESULT_URL= \ |
62 |
| - # AIRFLOW_FLOWER_PORT= \ |
63 |
| - # AIRFLOW_DATABASE_URL= \ |
64 |
| - # AIRFLOW__CORE__FERNET_KEY= \ |
65 |
| - # AIRFLOW_SECRET_KEY= \ |
66 |
| - # AIRFLOW_SMTP_HOST= \ |
67 |
| - # AIRFLOW_SMTP_USER= \ |
68 |
| - # AIRFLOW_SMTP_PASSWORD= \ |
69 |
| - # AIRFLOW_SMTP_FROM= \ |
70 |
| - |
71 |
| - |
72 |
| -EXPOSE $PORT |
73 |
| - |
74 |
| -# Using /bin/bash as the entrypoint works around some volume mount issues on Windows |
75 |
| -# where volume-mounted files do not have execute bits set. |
76 |
| -# https://github.com/docker/compose/issues/2301#issuecomment-154450785 has additional background. |
77 |
| -ENTRYPOINT ["/bin/bash", "/app/bin/run"] |
| 33 | +# deploylib expects /app/version.json, copy the file if it exists |
| 34 | +COPY *version.json /app/version.json |
78 | 35 |
|
79 |
| -CMD ["web"] |
| 36 | +COPY . . |
0 commit comments