Builds Docker image, runs it, and kills
This small Ruby library helps to build temporary Docker images, run Docker containers, and clean up afterwards — it may be convenient for automated tests (for example, with Minitest):
class MyTest < Minitest::Test
def test_prints_hello_world
stdout = donce(
dockerfile: '
FROM ubuntu
CMD echo "Hello, world!"
'
)
assert_equal("Hello, world!\n", stdout)
end
end
It's possible to run a Docker image in background mode too:
stdout = donce(image: 'ubuntu', command: 'sleep 9999') do |id|
# The "id" is the container id
# The "donce_host()" is the hostname of it
end
If you set DONCE_SUDO environment variable to true, docker will
be executed via sudo.
Parameters
Here's a list of the available parameters for donce:
dockerfile: Content of the Dockerfile (string or array of strings)home: Directory with Dockerfile and all other necessary filesimage: Name of a Docker image to use (e.g. "ubuntu:22.04")log: Logging destination (defaults to $stdout)args: Extra arguments for the docker commandenv: Environment variables mapping for the containervolumes: Local to container volumes mappingports: Local to container port mappingbuild_args: Arguments for docker build (--build-arg)root: Let user inside the container be "root" (default: false)command: The command to execute in the containertimeout: Maximum seconds to spend on each docker call (default: 10)
The function donce_host() returns the hostname of the host machine that
can be used from within the container.
How to contribute
Read these guidelines. Make sure your build is green before you contribute your pull request. You will need to have Ruby 3.0+ and Bundler installed. Then:
bundle update
bundle exec rake
If it's clean and you don't see any error messages, submit your pull request.