Currently we have Dockerfiles that use a variety of approaches to set up an image, and this creates a number of discrepancies in how our services work and are deployed. We should consider standardizing some aspects of these files, documenting them in this repo and then using that to simplify our helm chart and argocd configs.
Aspects to look at:
- Names of targets (base, dev, prod)
- Name of the application user (
app, service, etc.)
- Possibly the UID as well, as our helm chart makes assumptions about user 1000 being the one to use (note that the ubuntu 24.04 base image creates a user
ubuntu/1000 by default, but earlier versions do not)
- Where the application virtualenv is located
- Whether the
PATH is set up for all targets to include the virtualenv
- Whether there is even a
CMD specified, since we end up overriding it in our helm chart and in devstack anyhow
- Internal and external port
- What system packages are installed for dev vs. prod
- How image size is managed (cache layer optimizations), especially with regard to system and Python packages
- Locale management
- Whether we want a 2U base image (e.g. could set up things like locales, app user, virtualenv)
Currently we have Dockerfiles that use a variety of approaches to set up an image, and this creates a number of discrepancies in how our services work and are deployed. We should consider standardizing some aspects of these files, documenting them in this repo and then using that to simplify our helm chart and argocd configs.
Aspects to look at:
app,service, etc.)ubuntu/1000by default, but earlier versions do not)PATHis set up for all targets to include the virtualenvCMDspecified, since we end up overriding it in our helm chart and in devstack anyhow