From 2c887ee6fbd22e1e58feb71e386487d92688392e Mon Sep 17 00:00:00 2001 From: Jarek Potiuk Date: Mon, 12 Jul 2021 22:31:35 +0200 Subject: [PATCH] Publish warning about installing packages dynamically (#450) --- .../docker-stack/_sources/entrypoint.rst.txt | 21 +++++++++++++++-- docs-archive/docker-stack/build.html | 4 ++-- docs-archive/docker-stack/entrypoint.html | 23 +++++++++++++++++-- docs-archive/docker-stack/searchindex.js | 2 +- 4 files changed, 43 insertions(+), 7 deletions(-) diff --git a/docs-archive/docker-stack/_sources/entrypoint.rst.txt b/docs-archive/docker-stack/_sources/entrypoint.rst.txt index c386a67ead2..943831487f4 100644 --- a/docs-archive/docker-stack/_sources/entrypoint.rst.txt +++ b/docs-archive/docker-stack/_sources/entrypoint.rst.txt @@ -262,11 +262,28 @@ and Admin role. They also forward local port ``8080`` to the webserver port and Installing additional requirements .................................. +.. warning:: Installing requirements this way is a very convenient method of running Airflow, very useful for + testing and debugging. However, do not be tricked by its convenience. You should never, ever use it in + production environment. We have deliberately chose to make it a development/test dependency and we print + a warning, whenever it is used. There is an inherent security-related issue with using this method in + production. Installing the requirements this way can happen at literally any time - when your containers + get restarted, when your machines in K8S cluster get restarted. In a K8S Cluster those events can happen + literally any time. This opens you up to a serious vulnerability where your production environment + might be brought down by a single dependency being removed from PyPI - or even dependency of your + dependency. This means that you put your production service availability in hands of 3rd-party developers. + At any time, any moment including weekends and holidays those 3rd party developers might bring your + production Airflow instance down, without you even knowing it. This is a serious vulnerability that + is similar to the infamous + `leftpad `_ + problem. You can fully protect against this case by building your own, immutable custom image, where the + dependencies are baked in. You have been warned. + Installing additional requirements can be done by specifying ``_PIP_ADDITIONAL_REQUIREMENTS`` variable. The variable should contain a list of requirements that should be installed additionally when entering the containers. Note that this option slows down starting of Airflow as every time any container starts -it must install new packages. Therefore this option should only be used for testing. When testing is -finished, you should create your custom image with dependencies baked in. +it must install new packages and it opens up huge potential security vulnerability when used in production +(see below). Therefore this option should only be used for testing. When testing is finished, +you should create your custom image with dependencies baked in. Example: diff --git a/docs-archive/docker-stack/build.html b/docs-archive/docker-stack/build.html index 27cf1a4dd77..4d165cbc5d8 100644 --- a/docs-archive/docker-stack/build.html +++ b/docs-archive/docker-stack/build.html @@ -1283,7 +1283,7 @@

Examples of image customizing
rm docker-context-files/*.whl docker-context-files/*.tar.gz docker-context-files/*.txt || true
 
 curl -Lo "docker-context-files/constraints-3.7.txt" \
-    https://raw.githubusercontent.com/apache/airflow/constraints-2.0.2/constraints-3.7.txt
+    https://raw.githubusercontent.com/apache/airflow/constraints-2.1.0/constraints-3.7.txt
 
 # For Airflow pre 2.1 you need to use PIP 20.2.4 to install/download Airflow packages.
 pip install pip==20.2.4
@@ -1323,7 +1323,7 @@ 

Examples of image customizing
docker build . \
     --build-arg PYTHON_BASE_IMAGE="python:3.7-slim-buster" \
     --build-arg AIRFLOW_INSTALLATION_METHOD="apache-airflow" \
-    --build-arg AIRFLOW_VERSION="2.0.2" \
+    --build-arg AIRFLOW_VERSION="2.1.0" \
     --build-arg INSTALL_MYSQL_CLIENT="false" \
     --build-arg AIRFLOW_PRE_CACHED_PIP_PACKAGES="false" \
     --build-arg INSTALL_FROM_DOCKER_CONTEXT_FILES="true" \
diff --git a/docs-archive/docker-stack/entrypoint.html b/docs-archive/docker-stack/entrypoint.html
index 771dda69854..0d5f3c3409b 100644
--- a/docs-archive/docker-stack/entrypoint.html
+++ b/docs-archive/docker-stack/entrypoint.html
@@ -805,11 +805,30 @@ 

Creating admin user

Installing additional requirementsΒΆ

+
+

Warning

+

Installing requirements this way is a very convenient method of running Airflow, very useful for +testing and debugging. However, do not be tricked by its convenience. You should never, ever use it in +production environment. We have deliberately chose to make it a development/test dependency and we print +a warning, whenever it is used. There is an inherent security-related issue with using this method in +production. Installing the requirements this way can happen at literally any time - when your containers +get restarted, when your machines in K8S cluster get restarted. In a K8S Cluster those events can happen +literally any time. This opens you up to a serious vulnerability where your production environment +might be brought down by a single dependency being removed from PyPI - or even dependency of your +dependency. This means that you put your production service availability in hands of 3rd-party developers. +At any time, any moment including weekends and holidays those 3rd party developers might bring your +production Airflow instance down, without you even knowing it. This is a serious vulnerability that +is similar to the infamous +leftpad +problem. You can fully protect against this case by building your own, immutable custom image, where the +dependencies are baked in. You have been warned.

+

Installing additional requirements can be done by specifying _PIP_ADDITIONAL_REQUIREMENTS variable. The variable should contain a list of requirements that should be installed additionally when entering the containers. Note that this option slows down starting of Airflow as every time any container starts -it must install new packages. Therefore this option should only be used for testing. When testing is -finished, you should create your custom image with dependencies baked in.

+it must install new packages and it opens up huge potential security vulnerability when used in production +(see below). Therefore this option should only be used for testing. When testing is finished, +you should create your custom image with dependencies baked in.

Example:

docker run -it -p 8080:8080 \
   --env "_PIP_ADDITIONAL_REQUIREMENTS=lxml==4.6.3 charset-normalizer==1.4.1" \
diff --git a/docs-archive/docker-stack/searchindex.js b/docs-archive/docker-stack/searchindex.js
index 4ef34de4cf5..454396fd4f3 100644
--- a/docs-archive/docker-stack/searchindex.js
+++ b/docs-archive/docker-stack/searchindex.js
@@ -1 +1 @@
-Search.setIndex({docnames:["build","build-arg-ref","entrypoint","index","recipes"],envversion:{"sphinx.domains.c":2,"sphinx.domains.changeset":1,"sphinx.domains.citation":1,"sphinx.domains.cpp":3,"sphinx.domains.index":1,"sphinx.domains.javascript":2,"sphinx.domains.math":2,"sphinx.domains.python":2,"sphinx.domains.rst":2,"sphinx.domains.std":1,"sphinx.ext.intersphinx":1,"sphinx.ext.viewcode":1,sphinx:56},filenames:["build.rst","build-arg-ref.rst","entrypoint.rst","index.rst","recipes.rst"],objects:{},objnames:{},objtypes:{},terms:{"0002":[0,2],"1gb":0,"2020":0,"230":0,"322":4,"3306":2,"3rd":2,"4096":2,"50000":[1,2],"5432":2,"5672":2,"6379":2,"8080":2,"874":0,"874mb":0,"case":[0,1,2,3,4],"default":[0,1,2,3],"final":[0,1,2],"function":3,"import":[0,4],"new":[2,3,4],"public":4,"short":0,"switch":0,"true":[0,1,2],"try":[0,2,3],"var":[0,4],"while":0,But:0,For:[0,1,2,3],GCS:4,Such:[0,2],That:0,The:[1,2,3,4],Then:[0,2,4],There:[0,3],Uses:0,Using:1,Yes:0,_airflow:2,_airflow_db_upgrad:2,_airflow_www_user_cr:2,_airflow_www_user_email:2,_airflow_www_user_firstnam:2,_airflow_www_user_lastnam:2,_airflow_www_user_password:2,_airflow_www_user_password_cmd:2,_airflow_www_user_rol:2,_airflow_www_user_usernam:2,_cmd:2,_pip_additional_requir:2,abl:[0,2],about:[0,2],abov:[0,2],accept_eula:0,access:2,accommod:[0,2],accompani:0,account:[0,2],achiev:[0,2],action:2,actual:[0,3],adapt:0,add:[2,3,4],added:[0,2],adding:2,addit:[0,1,4],addition:2,additional_airflow_extra:[0,1],additional_dev_apt_command:[0,1],additional_dev_apt_dep:[0,1],additional_dev_apt_env:[0,1],additional_python_dep:[0,1],additional_runtime_apt_command:[0,1],additional_runtime_apt_dep:[0,1],additional_runtime_apt_env:[0,1],admin:0,adoptopenjdk:4,advantag:[0,1],advis:2,after:[0,2],agre:4,agreement:4,air:0,airflow:[0,4],airflow__celery__broker_url:2,airflow__celery__broker_url_cmd:2,airflow__core__sql_alchemy_conn:[2,3],airflow__core__sql_alchemy_conn_cmd:2,airflow_branch:1,airflow_constraints_loc:[0,1],airflow_constraints_refer:[0,1],airflow_extra:1,airflow_gid:[1,2],airflow_hom:[1,3],airflow_installation_method:[0,1],airflow_pip_vers:1,airflow_pre_cached_pip_packag:[0,1],airflow_repo:1,airflow_sources_from:1,airflow_sources_to:1,airflow_uid:[1,2,4],airflow_user_home_dir:1,airflow_vers:[0,1],airflow_version_specif:[0,1],airflowadmin:2,all:[0,1,2,3],allow:[0,1],alpha:4,alreadi:[0,1,2],also:[0,1,2,3,4],alwai:[0,2],amd64:4,amqp:2,ani:[0,2,4],anoth:[0,1,2],answer:0,apach:[0,1,2],api:4,appli:0,applic:[3,4],approach:0,appropri:1,apt:[1,4],arbitrari:[0,1],archiv:[0,4],arg:[1,4],argument:[0,2],artifact:0,asc:[0,4],asf:4,aspect:0,assign:2,assum:[0,3],async:0,attempt:[0,2],authent:0,auto:1,autom:1,automat:[0,2],autoremov:[0,4],avail:[0,2,3],avoid:0,awar:0,aws:0,azur:0,back:0,backend:2,bad:0,bake:2,bar:1,bare:3,base:[0,1],base_airflow_imag:4,bash:[2,4],bashoper:4,basi:4,basic:0,beautifulsoup4:0,becaus:[0,1,2],becom:2,befor:[0,1],behalf:1,behaviour:2,below:[0,1,2,4],best:[0,1,2],beta:4,better:0,between:2,big:0,bigger:0,bin:4,binari:[0,1],blob:0,both:0,box:0,branch:[0,1,3],build:[2,3,4],built:[0,1],buster:[0,1,4],cach:[0,2],call:0,can:[0,1,2,3,4],candid:3,cannot:0,capabl:0,captur:4,casual:0,celeri:0,certain:[1,2],cfg:1,chang:[0,1,2],channel:4,chapter:[0,2],charset:2,chart:[0,3],check:[0,1,2],checkout:0,choic:0,choos:0,chown:0,clean:[0,4],cli:0,client:[0,1],cloud_sdk_vers:4,cloudsdk:4,cluster:[0,4],cmake:0,code:0,com:[0,2,4],combin:0,come:[0,2],command:[0,1,3,4],comment:0,commit:0,common:[0,1,3,4],commun:[0,3,4],compar:0,comparison:0,compat:[0,2],complet:4,complex:0,complianc:4,compon:[3,4],compos:[0,2,3],concept:[2,4],concurr:2,condit:4,config:0,configur:0,conflict:0,connection_check_max_count:2,connection_check_sleep_tim:2,connector:4,consist:0,constraint:[0,1],constraints_github_repositori:0,contain:[0,1,3],content:2,context:[0,1],continu:2,continue_on_pip_check_failur:1,contribut:4,contributor:4,control:[1,2],conveni:[0,3],copi:[0,4],copyright:4,corpor:1,could:0,creat:[0,1,3,4],creation:2,criteria:0,curl:[0,4],current:3,custom:[1,2,3],dag:[2,3],dag_nam:0,dask:0,data:4,databas:[1,2,3],dataflowstartsqljoboper:4,dataproc:4,date:0,datepars:0,datetim:0,days_ago:0,deal:0,deb:4,debian:0,declar:0,dedic:0,deepli:0,default_arg:0,defin:1,dep:[0,1],depend:[0,2,3],depends_on_past:0,deploi:0,deploy:[0,3],deriv:2,describ:[0,2],descript:1,dest:0,detail:[2,3],detect:[1,2],determin:0,dev:[0,1],dev_apt_command:1,dev_apt_dep:1,devel:[1,3],develop:[0,1,3],differ:[0,2],dir:[0,1],direct:0,directli:[0,1],directori:[1,2,3],disabl:[0,1,2],disadvantag:0,dist:4,distinguish:2,distribut:[0,3,4],dive:0,do_otherth:2,do_someth:2,doc:[0,4],docker:[0,1,2,4],dockerfil:[1,3,4],dockerhub:3,dockerignor:[0,1],document:[0,4],doe:0,doesn:0,done:[0,2],down:2,download:[0,1,4],download_url:4,drop:2,drwxr:2,dummi:0,dummyoper:0,dure:[0,1,2],dynam:[0,2],earli:0,earlier:0,eas:3,easier:0,easiest:0,echo:[2,4],effect:1,egg:0,either:[0,1,2,3,4],elasticsearch:0,email:2,embed:2,empti:[1,2],encount:0,encourag:4,end:0,engin:0,enough:0,enter:[0,2],enterpris:0,entri:2,entrypoint:0,env:[1,2,4],environ:[1,2,3,4],equal:2,equival:0,error:2,especi:0,essenti:0,establish:2,etc:[0,2,4],evalu:2,even:[0,2,3],everi:[0,2,3],everyon:[0,3],everyth:0,exampl:[1,2,3],except:4,exclus:0,execut:[0,1,3],exist:0,exit:2,expert:0,explain:0,explan:0,expos:0,express:4,extend:[1,2,3],extens:0,extern:[0,2],extra:[0,1,2,3],extract:0,factor:0,fail:[0,1,2],fals:[0,1,4],familiar:0,far:0,faster:1,few:[0,2],file:[0,1,4],find:3,finish:[0,2],first:[0,2],firstnam:2,fit:0,fix:0,flag:[0,2],flexibl:[0,2],flow:0,flower:2,folder:[0,1,2,3],follow:[0,1,2,3],fork:[0,1],form:0,format:2,forward:2,found:0,foundat:4,fragil:0,framework:0,frequent:4,friendli:0,from:[1,2,3,4],front:2,fsl:4,fssl:4,fulfil:0,funni:0,further:0,futur:0,gape:0,gcc:0,gcloud:4,gcloud_hom:4,gcp:0,gcs:4,gcs_jar_path:4,gcs_jar_url:4,gcs_variant:4,gcs_version:4,gener:0,get:[0,4],gid:[0,1,2],git:[0,3],github:1,githubusercont:0,githyb:0,gitignor:0,give:0,gkestartpodoper:4,glob:1,goal:0,good:[0,1,3],googleapi:4,govern:4,gpg:4,group:[0,1,2],guarante:0,guid:[0,2],guidelin:2,had:0,hadoop2:4,hadoop_classpath:4,hadoop_conf_dir:4,hadoop_hom:4,hadoop_url:4,hadoop_vers:4,happen:[0,2],has:[0,1,2,3],have:[0,1,2],hdf:0,headless:0,heavi:0,heavili:0,helm:[0,3],help:0,here:0,high:1,highli:[0,1],hive:4,hive_conf_dir:4,hive_hom:4,hive_url:4,hive_vers:4,hobbyist:0,home:[1,2],host:[0,2],hotspot:4,how:3,howev:[0,2,3],http:[0,4],idea:0,ids:2,ignor:0,imag:[2,4],immedi:2,impli:4,improv:0,includ:[0,1,4],increas:0,increment:1,independ:0,index:0,individu:0,inform:[0,2,4],initi:[1,2],inject:0,instal:3,install_from_docker_context_fil:[0,1],install_from_pypi:1,install_mysql_cli:[0,1],install_providers_from_sourc:1,instead:0,intend:2,interact:1,interest:[3,4],intern:[0,2],introduc:2,involv:[0,2],is_al:2,iter:[0,1],jar:4,java:4,java_hom:4,jdbc:0,jfrog:4,jre:[0,4],jun:2,just:[0,3],jvm:4,kaniko:0,keep:[0,2],kei:[0,4],kind:[0,4],know:0,knowledg:[0,4],known:0,kubectl:4,kubernet:0,languag:4,last:0,lastnam:2,later:[0,2],latest:[0,3],launch:3,law:4,layer:0,lead:0,lean:0,learn:[0,3],least:[0,2],less:0,let:0,level:1,lib:[0,4],libopenmpi:0,librari:[0,2],licens:4,lightweight:0,like:[0,2,4],limit:[1,2,4],linux:[0,2,4],list:[0,2,4],load:0,local:[0,1,2],log:[1,2,3,4],longer:0,look:0,loop:2,lxml:[0,2],machin:0,mai:[3,4],main:[0,1,2,4],mainli:3,maintain:0,mainten:2,make:[0,2],man1:4,man7:4,man:4,manag:[0,3],mani:[0,2,3],manual:[0,2],master:2,match:[0,1,2],mean:[0,2,3],member:4,method:[0,2],microsecond:0,microsoft:0,might:[0,1,2],minikub:0,minim:[0,3],minut:0,mkdir:[0,4],mktemp:4,model:0,modif:0,modul:0,more:[1,2,3,4],most:[0,1,3],mostli:[0,2],mount:2,mpi4pi:0,mpi:0,msodbcsql17:0,mssql:0,much:[0,1],multihomed_network:4,multipl:0,must:[0,2],mysql:[0,1,2],mysqlclient:0,name:0,necessari:[0,2],need:[1,2,3],never:2,newer:[0,1,2],node:0,non:[0,2],none:2,normal:2,note:[0,1,2],notic:4,now:0,now_to_the_hour:0,number:[0,2],oauth2client:0,obtain:4,occasion:0,odbc:0,offici:0,often:[0,3,4],older:2,onc:0,one:[0,1,2,4],onli:[0,1,2],open:2,openmpi:0,openshift:2,oper:[0,2,4],opt:[0,1,3,4],optim:3,option:0,oracl:0,order:[0,1,2],org:4,origin:0,other:[0,1,2,3,4],otherwis:0,our:[0,2],out:[0,3],output:[0,2,4],over:2,overhead:2,overrid:1,own:[1,2,3],owner:0,ownership:4,packag:[1,2,3],panda:0,paramet:[0,1,2],part:0,parti:2,particularli:0,pass:[0,2],passwd:2,password:[0,2],path:4,pattern:0,perform:2,permiss:4,pip21:0,pip:0,pip_progress_bar:1,pip_us:0,pipefail:4,place:[0,1],platform:0,podman:0,point:[0,1,2],popular:0,port:2,portabl:0,possibl:3,postgr:[0,2],potiuk:0,power:0,practic:[0,2],pre:0,preced:2,predict:0,prepar:[0,1,3],prerequisit:0,present:[0,2],pretti:0,prevent:0,previou:0,previous:[0,1],print:2,privat:0,problem:0,procp:0,prod:0,produc:[0,1],product:[0,1,2,3],progress:1,project:[0,2],proof:0,properli:0,prove:4,provid:[0,1,3],proxi:0,publish:[0,3],pull:4,pure:1,purg:[0,4],purpos:[0,2,3],push:0,pypi:1,pypirc:0,python3:[0,2],python:[0,1,2,3],python_base_imag:[0,1],pythonx:3,queri:2,question:0,quick:[0,3],quickli:0,quickstart:2,quiet:4,quit:0,rabbitmq:2,random:2,randomli:2,rang:0,rapid:4,rather:[0,1],raw:0,reach:0,read:[0,2],readi:3,realiz:2,realli:0,reason:[0,2],rebas:0,rebuild:[0,1],recip:0,recommend:[0,4],recompil:0,redi:[0,2],reduct:0,refer:[2,3],reflect:0,regard:4,regardless:1,registri:0,releas:[0,1,3,4],rememb:[0,2],remot:0,remov:[0,1],renam:1,replac:0,repo:[1,4],report:4,repositori:[0,1],request:4,requir:[1,3,4],resolv:0,respect:0,rest:2,restrict:1,restricted_environ:0,result:[0,1,2],right:[0,2],rocketchat_api:0,role:2,root:[0,1,2,4],rout:0,rst:0,run:[0,1,4],run_this_1:0,run_this_2:0,run_this_3:0,runtim:[0,1,2,4],runtime_apt_command:1,runtime_apt_dep:1,safe:0,same:[0,2],save:0,scenario:0,schedul:2,schedule_interv:0,schema:2,scheme:2,script:[0,2],second:0,secret:2,section:4,secur:[1,2],see:[0,1,2,3,4],segment:0,select:[0,2],separ:[0,1],set:[0,1,2,3],set_upstream:0,setup:1,sever:[0,2],share:4,shell:[2,4],shift:2,should:[0,1,2],show:0,shown:[0,4],side:0,significantli:0,similar:0,similarli:2,simpl:0,simplest:0,simpli:[0,2],sinc:2,size:[0,3],skip:2,slack:0,sleep:2,slim:[0,1],slow:2,small:0,smaller:0,softwar:4,solut:0,solv:0,some:[0,1,2,3,4],someon:0,someth:0,sometim:[0,3,4],sophist:0,sound:0,sourc:[1,4],spark:4,specif:[0,1,3,4],specifi:[0,1,2],speed:1,spin:3,split:0,sqlite:[1,2,3],ssh:0,stabl:0,stack:0,stage:0,start:[0,1,2,3],start_dat:0,statsd:0,step:[0,1,4],still:[0,2],storag:[0,4],store:[0,1],strip:4,structur:0,stuff:0,submit:[0,4],subsequ:0,suit:0,summit:0,support:[0,2,3],suppos:[0,2],sure:0,synchron:0,system:[0,2],tag:[0,1,4],take:[2,3,4],taken:[0,1],talk:0,tar:[0,1,4],target:[0,1],task:[0,4],task_id:0,team:0,techniqu:0,tell:0,tempt:0,term:0,test:[0,3],test_dag:0,test_dag_v1:0,than:[0,1,2,3],thei:[0,1,2,3,4],them:[0,2],therefor:[0,2,3],thi:[0,1,2,3,4],thing:[0,3],those:[0,1,2,3],through:0,thu:[0,1],time:[0,1,2,3],timedelta:0,tmp:4,tmp_dir:4,tool:[0,4],total:2,transpar:0,treat:[1,2],tri:2,trigger:2,tty:0,turn:0,two:0,txt:0,type:[0,2],typeform:0,typic:0,uid:[1,2],umask:[0,2],under:4,understand:0,unixodbc:0,unless:4,until:2,updat:[0,4],upgrad:1,upgrade_to_newer_depend:1,url:[0,1,2],usag:[0,4],use:[0,1,2,3,4],used:[0,1,2,3,4],useful:[0,1,2,4],user:[0,1,3,4],usermod:0,usernam:[0,2],uses:0,using:[0,2,4],usr:4,usual:[0,1],util:0,utilis:2,valu:[1,2],variabl:[0,1,2,3],variou:2,veri:[0,3],verifi:[0,1,2,4],verify_docker_imag:0,version:[0,1,2,3,4],vet:[0,1],via:[0,1,2,3],viabl:0,view:0,vim:0,virtualenv:0,volum:2,wai:[0,1,2,4],want:[1,2,3],warranti:4,webserv:2,well:[0,3],were:0,what:[0,1],whatev:0,wheel:0,when:[1,2,3],whenev:[0,2],where:[0,1],whether:1,which:[0,1,2,3],whl:[0,1],who:0,wide:0,wish:1,without:[0,1,4],work:[0,1,2,3,4],worker:2,world:4,worri:0,would:[0,2],writabl:[1,2],write:[2,4],writeabl:0,www:4,x86_64:4,xvf:4,xzf:4,yaml:2,you:[1,2,3,4],your:[1,2,3],your_constraint_fil:0,yqq:[0,4]},titles:["Building the image","Image build arguments reference","Entrypoint","Docker Image for Apache Airflow","Recipes"],titleterms:{"new":0,Adding:0,The:0,Using:0,add:0,adding:0,addit:2,admin:2,airflow:[1,2,3],allow:2,apach:[3,4],apt:0,arbitrari:2,architectur:0,arg:0,argument:1,basic:1,broker:2,build:[0,1],cach:1,celeri:2,cloud:4,command:2,compil:0,connect:2,contain:2,creat:2,custom:0,dag:0,depend:1,detail:0,differ:1,directori:0,docker:3,dockerfil:0,emb:0,embed:0,entrypoint:2,environ:0,exampl:0,execut:2,extend:0,from:0,github:0,googl:4,hadoop:4,how:0,imag:[0,1,3],instal:[0,1,2,4],method:1,modifi:0,more:0,need:0,optim:[0,1],option:[1,2],own:0,packag:0,pip:1,pre:1,pypi:0,quick:2,recip:4,refer:[0,1],requir:[0,2],restrict:0,run:2,sdk:4,secur:0,sourc:0,stack:4,test:2,upgrad:2,usag:3,user:2,using:1,wait:2,want:0,when:0,why:0,writabl:0,you:0,your:0}})
\ No newline at end of file
+Search.setIndex({docnames:["build","build-arg-ref","entrypoint","index","recipes"],envversion:{"sphinx.domains.c":2,"sphinx.domains.changeset":1,"sphinx.domains.citation":1,"sphinx.domains.cpp":3,"sphinx.domains.index":1,"sphinx.domains.javascript":2,"sphinx.domains.math":2,"sphinx.domains.python":2,"sphinx.domains.rst":2,"sphinx.domains.std":1,"sphinx.ext.intersphinx":1,"sphinx.ext.viewcode":1,sphinx:56},filenames:["build.rst","build-arg-ref.rst","entrypoint.rst","index.rst","recipes.rst"],objects:{},objnames:{},objtypes:{},terms:{"0002":[0,2],"1gb":0,"2020":0,"230":0,"322":4,"3306":2,"3rd":2,"4096":2,"50000":[1,2],"5432":2,"5672":2,"6379":2,"8080":2,"874":0,"874mb":0,"case":[0,1,2,3,4],"default":[0,1,2,3],"final":[0,1,2],"function":3,"import":[0,4],"new":[2,3,4],"public":4,"short":0,"switch":0,"true":[0,1,2],"try":[0,2,3],"var":[0,4],"while":0,But:0,For:[0,1,2,3],GCS:4,K8S:2,Such:[0,2],That:0,The:[1,2,3,4],Then:[0,2,4],There:[0,2,3],Uses:0,Using:1,Yes:0,_airflow:2,_airflow_db_upgrad:2,_airflow_www_user_cr:2,_airflow_www_user_email:2,_airflow_www_user_firstnam:2,_airflow_www_user_lastnam:2,_airflow_www_user_password:2,_airflow_www_user_password_cmd:2,_airflow_www_user_rol:2,_airflow_www_user_usernam:2,_cmd:2,_pip_additional_requir:2,abl:[0,2],about:[0,2],abov:[0,2],accept_eula:0,access:2,accommod:[0,2],accompani:0,account:[0,2],achiev:[0,2],action:2,actual:[0,3],adapt:0,add:[2,3,4],added:[0,2],adding:2,addit:[0,1,4],addition:2,additional_airflow_extra:[0,1],additional_dev_apt_command:[0,1],additional_dev_apt_dep:[0,1],additional_dev_apt_env:[0,1],additional_python_dep:[0,1],additional_runtime_apt_command:[0,1],additional_runtime_apt_dep:[0,1],additional_runtime_apt_env:[0,1],admin:0,adoptopenjdk:4,advantag:[0,1],advis:2,after:[0,2],against:2,agre:4,agreement:4,air:0,airflow:[0,4],airflow__celery__broker_url:2,airflow__celery__broker_url_cmd:2,airflow__core__sql_alchemy_conn:[2,3],airflow__core__sql_alchemy_conn_cmd:2,airflow_branch:1,airflow_constraints_loc:[0,1],airflow_constraints_refer:[0,1],airflow_extra:1,airflow_gid:[1,2],airflow_hom:[1,3],airflow_installation_method:[0,1],airflow_pip_vers:1,airflow_pre_cached_pip_packag:[0,1],airflow_repo:1,airflow_sources_from:1,airflow_sources_to:1,airflow_uid:[1,2,4],airflow_user_home_dir:1,airflow_vers:[0,1],airflow_version_specif:[0,1],airflowadmin:2,all:[0,1,2,3],allow:[0,1],alpha:4,alreadi:[0,1,2],also:[0,1,2,3,4],alwai:[0,2],amd64:4,amqp:2,ani:[0,2,4],anoth:[0,1,2],answer:0,apach:[0,1,2],api:4,appli:0,applic:[3,4],approach:0,appropri:1,apt:[1,4],arbitrari:[0,1],archiv:[0,4],arg:[1,4],argument:[0,2],artifact:0,asc:[0,4],asf:4,aspect:0,assign:2,assum:[0,3],async:0,attempt:[0,2],authent:0,auto:1,autom:1,automat:[0,2],autoremov:[0,4],avail:[0,2,3],avoid:0,awar:0,aws:0,azur:0,back:0,backend:2,bad:0,bake:2,bar:1,bare:3,base:[0,1],base_airflow_imag:4,bash:[2,4],bashoper:4,basi:4,basic:0,beautifulsoup4:0,becaus:[0,1,2],becom:2,been:2,befor:[0,1],behalf:1,behaviour:2,being:2,below:[0,1,2,4],best:[0,1,2],beta:4,better:0,between:2,big:0,bigger:0,bin:4,binari:[0,1],blob:0,both:0,box:0,branch:[0,1,3],bring:2,brought:2,build:[2,3,4],built:[0,1],buster:[0,1,4],cach:[0,2],call:0,can:[0,1,2,3,4],candid:3,cannot:0,capabl:0,captur:4,casual:0,celeri:0,certain:[1,2],cfg:1,chang:[0,1,2],channel:4,chapter:[0,2],charset:2,chart:[0,3],check:[0,1,2],checkout:0,choic:0,choos:0,chose:2,chown:0,clean:[0,4],cli:0,client:[0,1],cloud_sdk_vers:4,cloudsdk:4,cluster:[0,2,4],cmake:0,code:0,com:[0,2,4],combin:0,come:[0,2],command:[0,1,3,4],comment:0,commit:0,common:[0,1,3,4],commun:[0,3,4],compar:0,comparison:0,compat:[0,2],complet:4,complex:0,complianc:4,compon:[3,4],compos:[0,2,3],concept:[2,4],concurr:2,condit:4,config:0,configur:0,conflict:0,connection_check_max_count:2,connection_check_sleep_tim:2,connector:4,consist:0,constraint:[0,1],constraints_github_repositori:0,contain:[0,1,3],content:2,context:[0,1],continu:2,continue_on_pip_check_failur:1,contribut:4,contributor:4,control:[1,2],conveni:[0,2,3],copi:[0,4],copyright:4,corpor:1,could:0,creat:[0,1,3,4],creation:2,criteria:0,curl:[0,4],current:3,custom:[1,2,3],dag:[2,3],dag_nam:0,dask:0,data:4,databas:[1,2,3],dataflowstartsqljoboper:4,dataproc:4,date:0,datepars:0,datetim:0,days_ago:0,deal:0,deb:4,debian:0,debug:2,declar:0,dedic:0,deepli:0,default_arg:0,defin:1,deliber:2,dep:[0,1],depend:[0,2,3],depends_on_past:0,deploi:0,deploy:[0,3],deriv:2,describ:[0,2],descript:1,dest:0,detail:[2,3],detect:[1,2],determin:0,dev:[0,1],dev_apt_command:1,dev_apt_dep:1,devel:[1,3],develop:[0,1,2,3],differ:[0,2],dir:[0,1],direct:0,directli:[0,1],directori:[1,2,3],disabl:[0,1,2],disadvantag:0,dist:4,distinguish:2,distribut:[0,3,4],dive:0,do_otherth:2,do_someth:2,doc:[0,4],docker:[0,1,2,4],dockerfil:[1,3,4],dockerhub:3,dockerignor:[0,1],document:[0,4],doe:0,doesn:0,done:[0,2],down:2,download:[0,1,4],download_url:4,drop:2,drwxr:2,dummi:0,dummyoper:0,dure:[0,1,2],dynam:[0,2],earli:0,earlier:0,eas:3,easier:0,easiest:0,echo:[2,4],effect:1,egg:0,either:[0,1,2,3,4],elasticsearch:0,email:2,embed:2,empti:[1,2],encount:0,encourag:4,end:0,engin:0,enough:0,enter:[0,2],enterpris:0,entri:2,entrypoint:0,env:[1,2,4],environ:[1,2,3,4],equal:2,equival:0,error:2,especi:0,essenti:0,establish:2,etc:[0,2,4],evalu:2,even:[0,2,3],event:2,ever:2,everi:[0,2,3],everyon:[0,3],everyth:0,exampl:[1,2,3],except:4,exclus:0,execut:[0,1,3],exist:0,exit:2,expert:0,explain:0,explan:0,expos:0,express:4,extend:[1,2,3],extens:0,extern:[0,2],extra:[0,1,2,3],extract:0,factor:0,fail:[0,1,2],fals:[0,1,4],familiar:0,far:0,faster:1,few:[0,2],file:[0,1,4],find:3,finish:[0,2],first:[0,2],firstnam:2,fit:0,fix:0,flag:[0,2],flexibl:[0,2],flow:0,flower:2,folder:[0,1,2,3],follow:[0,1,2,3],fork:[0,1],form:0,format:2,forward:2,found:0,foundat:4,fragil:0,framework:0,frequent:4,friendli:0,from:[1,2,3,4],front:2,fsl:4,fssl:4,fulfil:0,fulli:2,funni:0,further:0,futur:0,gape:0,gcc:0,gcloud:4,gcloud_hom:4,gcp:0,gcs:4,gcs_jar_path:4,gcs_jar_url:4,gcs_variant:4,gcs_version:4,gener:0,get:[0,2,4],gid:[0,1,2],git:[0,3],github:1,githubusercont:0,githyb:0,gitignor:0,give:0,gkestartpodoper:4,glob:1,goal:0,good:[0,1,3],googleapi:4,govern:4,gpg:4,group:[0,1,2],guarante:0,guid:[0,2],guidelin:2,had:0,hadoop2:4,hadoop_classpath:4,hadoop_conf_dir:4,hadoop_hom:4,hadoop_url:4,hadoop_vers:4,hand:2,happen:[0,2],has:[0,1,2,3],have:[0,1,2],hdf:0,headless:0,heavi:0,heavili:0,helm:[0,3],help:0,here:0,high:1,highli:[0,1],hive:4,hive_conf_dir:4,hive_hom:4,hive_url:4,hive_vers:4,hobbyist:0,holidai:2,home:[1,2],host:[0,2],hotspot:4,how:3,howev:[0,2,3],http:[0,4],huge:2,idea:0,ids:2,ignor:0,imag:[2,4],immedi:2,immut:2,impli:4,improv:0,includ:[0,1,2,4],increas:0,increment:1,independ:0,index:0,individu:0,infam:2,inform:[0,2,4],inher:2,initi:[1,2],inject:0,instal:3,install_from_docker_context_fil:[0,1],install_from_pypi:1,install_mysql_cli:[0,1],install_providers_from_sourc:1,instanc:2,instead:0,intend:2,interact:1,interest:[3,4],intern:[0,2],introduc:2,involv:[0,2],is_al:2,issu:2,iter:[0,1],its:2,jar:4,java:4,java_hom:4,jdbc:0,jfrog:4,jre:[0,4],jun:2,just:[0,3],jvm:4,kaniko:0,keep:[0,2],kei:[0,4],kind:[0,4],know:[0,2],knowledg:[0,4],known:0,kubectl:4,kubernet:0,languag:4,last:0,lastnam:2,later:[0,2],latest:[0,3],launch:3,law:4,layer:0,lead:0,lean:0,learn:[0,3],least:[0,2],leftpad:2,less:0,let:0,level:1,lib:[0,4],libopenmpi:0,librari:[0,2],licens:4,lightweight:0,like:[0,2,4],limit:[1,2,4],linux:[0,2,4],list:[0,2,4],liter:2,load:0,local:[0,1,2],log:[1,2,3,4],longer:0,look:0,loop:2,lxml:[0,2],machin:[0,2],mai:[3,4],main:[0,1,2,4],mainli:3,maintain:0,mainten:2,make:[0,2],man1:4,man7:4,man:4,manag:[0,3],mani:[0,2,3],manual:[0,2],master:2,match:[0,1,2],mean:[0,2,3],member:4,method:[0,2],microsecond:0,microsoft:0,might:[0,1,2],minikub:0,minim:[0,3],minut:0,mkdir:[0,4],mktemp:4,model:0,modif:0,modul:0,moment:2,more:[1,2,3,4],most:[0,1,3],mostli:[0,2],mount:2,mpi4pi:0,mpi:0,msodbcsql17:0,mssql:0,much:[0,1],multihomed_network:4,multipl:0,must:[0,2],mysql:[0,1,2],mysqlclient:0,name:0,necessari:[0,2],need:[1,2,3],never:2,newer:[0,1,2],node:0,non:[0,2],none:2,normal:2,note:[0,1,2],notic:4,now:0,now_to_the_hour:0,number:[0,2],oauth2client:0,obtain:4,occasion:0,odbc:0,offici:0,often:[0,3,4],older:2,onc:0,one:[0,1,2,4],onli:[0,1,2],open:2,openmpi:0,openshift:2,oper:[0,2,4],opt:[0,1,3,4],optim:3,option:0,oracl:0,order:[0,1,2],org:4,origin:0,other:[0,1,2,3,4],otherwis:0,our:[0,2],out:[0,3],output:[0,2,4],over:2,overhead:2,overrid:1,own:[1,2,3],owner:0,ownership:4,packag:[1,2,3],panda:0,paramet:[0,1,2],part:0,parti:2,particularli:0,pass:[0,2],passwd:2,password:[0,2],path:4,pattern:0,perform:2,permiss:4,pip21:0,pip:0,pip_progress_bar:1,pip_us:0,pipefail:4,place:[0,1],platform:0,podman:0,point:[0,1,2],popular:0,port:2,portabl:0,possibl:3,postgr:[0,2],potenti:2,potiuk:0,power:0,practic:[0,2],pre:0,preced:2,predict:0,prepar:[0,1,3],prerequisit:0,present:[0,2],pretti:0,prevent:0,previou:0,previous:[0,1],print:2,privat:0,problem:[0,2],procp:0,prod:0,produc:[0,1],product:[0,1,2,3],progress:1,project:[0,2],proof:0,properli:0,protect:2,prove:4,provid:[0,1,3],proxi:0,publish:[0,3],pull:4,pure:1,purg:[0,4],purpos:[0,2,3],push:0,put:2,pypi:[1,2],pypirc:0,python3:[0,2],python:[0,1,2,3],python_base_imag:[0,1],pythonx:3,queri:2,question:0,quick:[0,3],quickli:0,quickstart:2,quiet:4,quit:0,rabbitmq:2,random:2,randomli:2,rang:0,rapid:4,rather:[0,1],raw:0,reach:0,read:[0,2],readi:3,realiz:2,realli:0,reason:[0,2],rebas:0,rebuild:[0,1],recip:0,recommend:[0,4],recompil:0,redi:[0,2],reduct:0,refer:[2,3],reflect:0,regard:4,regardless:1,registri:0,relat:2,releas:[0,1,3,4],rememb:[0,2],remot:0,remov:[0,1,2],renam:1,replac:0,repo:[1,4],report:4,repositori:[0,1],request:4,requir:[1,3,4],resolv:0,respect:0,rest:2,restart:2,restrict:1,restricted_environ:0,result:[0,1,2],right:[0,2],rocketchat_api:0,role:2,root:[0,1,2,4],rout:0,rst:0,run:[0,1,4],run_this_1:0,run_this_2:0,run_this_3:0,runtim:[0,1,2,4],runtime_apt_command:1,runtime_apt_dep:1,safe:0,same:[0,2],save:0,scenario:0,schedul:2,schedule_interv:0,schema:2,scheme:2,script:[0,2],second:0,secret:2,section:4,secur:[1,2],see:[0,1,2,3,4],segment:0,select:[0,2],separ:[0,1],seriou:2,servic:2,set:[0,1,2,3],set_upstream:0,setup:1,sever:[0,2],share:4,shell:[2,4],shift:2,should:[0,1,2],show:0,shown:[0,4],side:0,significantli:0,similar:[0,2],similarli:2,simpl:0,simplest:0,simpli:[0,2],sinc:2,singl:2,size:[0,3],skip:2,slack:0,sleep:2,slim:[0,1],slow:2,small:0,smaller:0,softwar:4,solut:0,solv:0,some:[0,1,2,3,4],someon:0,someth:0,sometim:[0,3,4],sophist:0,sound:0,sourc:[1,4],spark:4,specif:[0,1,3,4],specifi:[0,1,2],speed:1,spin:3,split:0,sqlite:[1,2,3],ssh:0,stabl:0,stack:0,stage:0,start:[0,1,2,3],start_dat:0,statsd:0,step:[0,1,4],still:[0,2],storag:[0,4],store:[0,1],strip:4,structur:0,stuff:0,submit:[0,4],subsequ:0,suit:0,summit:0,support:[0,2,3],suppos:[0,2],sure:0,synchron:0,system:[0,2],tag:[0,1,4],take:[2,3,4],taken:[0,1],talk:0,tar:[0,1,4],target:[0,1],task:[0,4],task_id:0,team:0,techniqu:0,tell:0,tempt:0,term:0,test:[0,3],test_dag:0,test_dag_v1:0,than:[0,1,2,3],thei:[0,1,2,3,4],them:[0,2],therefor:[0,2,3],thi:[0,1,2,3,4],thing:[0,3],those:[0,1,2,3],through:0,thu:[0,1],time:[0,1,2,3],timedelta:0,tmp:4,tmp_dir:4,tool:[0,4],total:2,transpar:0,treat:[1,2],tri:2,trick:2,trigger:2,tty:0,turn:0,two:0,txt:0,type:[0,2],typeform:0,typic:0,uid:[1,2],umask:[0,2],under:4,understand:0,unixodbc:0,unless:4,until:2,updat:[0,4],upgrad:1,upgrade_to_newer_depend:1,url:[0,1,2],usag:[0,4],use:[0,1,2,3,4],used:[0,1,2,3,4],useful:[0,1,2,4],user:[0,1,3,4],usermod:0,usernam:[0,2],uses:0,using:[0,2,4],usr:4,usual:[0,1],util:0,utilis:2,valu:[1,2],variabl:[0,1,2,3],variou:2,veri:[0,2,3],verifi:[0,1,2,4],verify_docker_imag:0,version:[0,1,2,3,4],vet:[0,1],via:[0,1,2,3],viabl:0,view:0,vim:0,virtualenv:0,volum:2,vulner:2,wai:[0,1,2,4],want:[1,2,3],warn:2,warranti:4,webserv:2,weekend:2,well:[0,3],were:0,what:[0,1],whatev:0,wheel:0,when:[1,2,3],whenev:[0,2],where:[0,1,2],whether:1,which:[0,1,2,3],whl:[0,1],who:0,wide:0,wish:1,without:[0,1,2,4],work:[0,1,2,3,4],worker:2,world:4,worri:0,would:[0,2],writabl:[1,2],write:[2,4],writeabl:0,www:4,x86_64:4,xvf:4,xzf:4,yaml:2,you:[1,2,3,4],your:[1,2,3],your_constraint_fil:0,yqq:[0,4]},titles:["Building the image","Image build arguments reference","Entrypoint","Docker Image for Apache Airflow","Recipes"],titleterms:{"new":0,Adding:0,The:0,Using:0,add:0,adding:0,addit:2,admin:2,airflow:[1,2,3],allow:2,apach:[3,4],apt:0,arbitrari:2,architectur:0,arg:0,argument:1,basic:1,broker:2,build:[0,1],cach:1,celeri:2,cloud:4,command:2,compil:0,connect:2,contain:2,creat:2,custom:0,dag:0,depend:1,detail:0,differ:1,directori:0,docker:3,dockerfil:0,emb:0,embed:0,entrypoint:2,environ:0,exampl:0,execut:2,extend:0,from:0,github:0,googl:4,hadoop:4,how:0,imag:[0,1,3],instal:[0,1,2,4],method:1,modifi:0,more:0,need:0,optim:[0,1],option:[1,2],own:0,packag:0,pip:1,pre:1,pypi:0,quick:2,recip:4,refer:[0,1],requir:[0,2],restrict:0,run:2,sdk:4,secur:0,sourc:0,stack:4,test:2,upgrad:2,usag:3,user:2,using:1,wait:2,want:0,when:0,why:0,writabl:0,you:0,your:0}})
\ No newline at end of file