Testcontainers module for Docker Compose
Installation
Add the library to the test section in your application's Gemfile:
group :test do
gem 'testcontainers-compose'
end
And then execute:
$ bundle install
Or install it yourself as:
$ gem install testcontainers-compose
Usage
To use the library, you first need to require it:
require "testcontainers/compose"
Creating a Compose Container
Create a new instance of the Testcontainers::ComposeContainer
class:
compose = Testcontainer::ComposeContainer.new(filepath: Dir.getwd)
The instance creates a set of containers defined on the .yml file, the 'compose.start' wakes up all containers as service
Start the services on the compose file.
compose.start
Stop the services:
compose.stop
Connecting to services
Once the service is running, you can obtain the mapped port to connect to it:
compose.service_port(service: "hub", port: 4444)
You can inspect the logs of for the services also:
puts compose.logs
You can use wait_for_logs
, wait_for_http
and wait_for_tcp_port
to wait for the services to start:
compose.wait_for_logs(/Service started/)
compose.wait_for_http(url: "http://localhost:4444/hub")
compose.wait_for_tcp_port(host: "localhost", port: 3306)
Configuration of services
This example initialize docker compose with two services described in the YML file located in the current directory:
services = ["hub","firefox"]
compose = Testcontainers::ComposeContainer.new(filepath: Dir.getwd, services: services)
You can specify the name of different docker-compose files also:
compose_filenames = ["docker-compose.dbs.yml", "docker-compose.web.yml"]
compose = Testcontainer::ComposeContainer.new(filepath: Dir.getwd, compose_filenames: compose_filenames)
compose.start
An env file can be specified when starting the services:
compose_filename = ["docker-compose.test.yml"]
compose = Testcontainers::ComposeContainer.new(filepath: Dir.getwd, env_file: ".env.test")
Executing commands in the container for a service
compose.exec(service_name: "hub", command: "echo test")
Contributing
Bug reports and pull requests are welcome on GitHub at https://github.com/testcontainers/testcontainers-ruby. This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the code of conduct.
License
The gem is available as open source under the terms of the MIT License.
Code of Conduct
Everyone interacting in the Testcontainers project's codebases, issue trackers, chat rooms and mailing lists is expected to follow the code of conduct.