Dynamic Dockerfile.erb
Sometimes you may need a little more dynamic control of your Dockerfile. For these cases, ufo supports dynamically creating a Dockerfile from a Dockerfile.erb. If Dockerfile.erb exists, ufo uses it to generate a Dockerfile as a part of the build process. These means that you should update the source Dockerfile.erb instead, as the Dockerfile will be overwritten. If Dockerfile.erb does not exist, then ufo will use the Dockerfile instead.
Example
The Dockerfile.erb has access to variables defined in dockerfile_variables.yml
. The variables should be defined underneath a UFO_ENV
key. Examples:
.ufo/settings/dockerfile_variables.yml:
---
development:
base_image: 112233445566.dkr.ecr.us-west-1.amazonaws.com/demo/sinatr:base-2019-06-10T03-22-34-f91cdd350
production:
base_image: 778899001122.dkr.ecr.us-west-1.amazonaws.com/demo/sinatr:base-2019-06-10T03-23-34-abccddxzy
Note, the base_image
key is automatically updated by ufo docker base when Dockerfile.erb exists.
Here’s what the Dockerfile.erb
looks like:
FROM <%= @base_image %>
# ...
CMD ["bin/web"]
When UFO_ENV=production
, it’ll produce the following.
Dockerfile:
FROM 778899001122.dkr.ecr.us-west-1.amazonaws.com/demo/sinatr:base-2019-06-10T03-23-34-abccddxzy
# ...
CMD ["bin/web"]
The above example demonstrates a good use-case. You may want a different FROM statement in your Dockerfile on a per-environment basis. In this case, we’re using different ECR repositories from different AWS accounts for development vs. production. The FROM statement changes based on which AWS account you’re using.
General Steps
The general steps are:
- Create a Dockerfile.erb with
<%= @base_image %>
- Run:
ufo docker base
to generatedockerfile_variables.yml
- Run:
ufo docker build
to build a Dockerfile. Note, theufo ship
command also builds the Dockerfile.
Remember when using the Dockerfile.erb, the Dockerfile is generated and overwritten. So you should update the Dockerfile.erb.
Build Args
Why not use build args?
Ufo uses a YAML file so users will not have to remember to provide the build arg. It is also easy to update the dockerfile_variables.yml
with the ufo docker base
command.
Pro tip: Use the <- and -> arrow keys to move back and forward.
Edit this page
See a typo or an error? You can improve this page. This website is available on GitHub and contributions are encouraged and welcomed. We love pull requests from you!
- Suggest an edit to this page (here's the contributing guide).
- Open an issue about this page to report a problem.