Tugboat maintains several Docker images. These images are extensions of official Docker images and include tools and configurations that help them work well with Tugboat. Tugboat’s images track the upstream images.
All of our images are available on Docker Hub. The source code used to generate these images is available on GitHub.
It is best practice to use the most specific tag available for a given image to prevent any unforeseen upstream changes
from affecting your Previews. For example, instead of tugboatqa/mysql:5
, it is generally better to use
tugboatqa/mysql:5.6
.
That said, sometimes the version of a Service doesn’t really matter much. For example, it may not matter which version
of memcached you use, and you can be sure you always have the most recent version available by specifying
tugboatqa/memcached
or tugboatqa/memcached:latest
. See also:
Image version tags
Image | Usage | |
---|---|---|
Alpine | image: tugboatqa/alpine:[TAG] |
Supported Tags |
Apache | image: tugboatqa/httpd:[TAG] |
Supported Tags |
CentOS | image: tugboatqa/centos:[TAG] |
Supported Tags |
CouchDB | image: tugboatqa/couchdb:[TAG] |
Supported Tags |
Debian | image: tugboatqa/debian:[TAG] |
Supported Tags |
Elastic Search | image: tugboatqa/elasticsearch:[TAG] |
Supported Tags |
MariaDB | image: tugboatqa/mariadb:[TAG] |
Supported Tags |
Memcached | image: tugboatqa/memcached:[TAG] |
Supported Tags |
MongoDB | image: tugboatqa/mongo:[TAG] |
Supported Tags |
MySQL | image: tugboatqa/mysql:[TAG] |
Supported Tags |
Nginx | image: tugboatqa/nginx:[TAG] |
Supported Tags |
Node | image: tugboatqa/node:[TAG] |
Supported Tags |
Percona | image: tugboatqa/percona:[TAG] |
Supported Tags |
PHP | image: tugboatqa/php:[TAG] |
Supported Tags |
PostgreSQL | image: tugboatqa/postgres:[TAG] |
Supported Tags |
Python | image: tugboatqa/python:[TAG] |
Supported Tags |
RabbitMQ | image: tugboatqa/rabbitmq:[TAG] |
Supported Tags |
Redis | image: tugboatqa/redis:[TAG] |
Supported Tags |
Ruby | image: tugboatqa/ruby:[TAG] |
Supported Tags |
Solr | image: tugboatqa/solr:[TAG] |
Supported Tags |
Traefik | image: tugboatqa/traefik:[TAG] |
Supported Tags |
Ubuntu | image: tugboatqa/ubuntu:[TAG] |
Supported Tags |
Varnish | image: tugboatqa/varnish:[TAG] |
Supported Tags |
The Alpine image is extremely minimal by nature. Unlike the other images, it does not have any extra tools installed except those required to use git with SSH.
The 2.x tags of this image extend the official Elast Search image on Docker Hub. These images are based on Debian.
The newer tags of this image extend the official Elastic Search images maintained by Elastic.co. These images are based on CentOS.
The MySQL, MariaDB, and Percona images are configured the same way. Each have a default database named tugboat
as well
as a user named tugboat
with a password of tugboat
. The tugboat
user has full access to the tugboat
database. In
addition, the root
database user does not have a password, but can only be used to connect to the database from the
MariaDB or MySQL service.
This means that in order to do any root-level database operations, they must be done by the commands defined for the MySQL or MariaDB service.
services:
mysql:
image: tugboatqa/mysql
commands:
init:
- mysql -e "CREATE DATABASE foo;"
If MySQL or MariaDB daemon configuration needs to be changed, create or modify the configuration file and restart the service (which is managed using runit):
services:
mysql:
image: tugboatqa/mysql
commands:
init:
- echo "max_allowed_packet=536870912" >> /etc/mysql/conf.d/tugboat.cnf
- sv restart mysql
Note the service restarts when the preview is committed, restarting may only be necessary when wanting the configuration to be applied before other actions, such as importing the database.
The PHP images provided upstream do not use apt-get to install PHP extensions. Instead,
there are helper scripts that let you install additional extensions as required. The images provided by Tugboat attempt
to balance installing the most commonly used extensions with reserving as much disk space as possible. If an extension
that you need is not installed, use docker-php-ext-configure
, docker-php-ext-install
, and docker-php-ext-enable
in
your Service commands.
commands:
init:
# Install and enable the redis extension
- pecl install redis
- docker-php-ext-enable redis
More information about these helper scripts can be found in the upstream documentation.
In order to keep the service containers as lean as possible, only the most basic apache modules are enabled in the PHP/Apache images. To enable a missing module, add it with a service command
commands:
init:
# Enable mod_rewrite and mod_headers
- a2enmod rewrite headers
The PostgreSQL images have a default database named tugboat
as well as a user named tugboat
with a password of
tugboat
. The tugboat
user has full access to the tugboat
database. In addition, the default superuser password is
set to tugboat
.
Using the official Solr image inside of Tugboat requires creating the cores as the solr
user.
services:
...
solr:
image: tugboatqa/solr:8.6
checkout: true
commands:
init:
- su -s /bin/sh -c "solr create_core -c [CORE] -force" solr
The following is an example setup for use with Drupal’s Search API Solr module.
services:
...
solr:
image: tugboatqa/solr:8.6
checkout: true
commands:
init:
- su -s /bin/sh -c "/opt/solr/bin/solr create_core -c [CORE] -force" solr
build:
- cd "${SOLR_HOME}/[CORE]" && rm -rf conf
- cd "${SOLR_HOME}/[CORE]" && ln -snf "${TUGBOAT_ROOT}/path/to/solr/config" conf
You will need to replace [CORE]
with the name of your solr core configured in Search API Solr. You will also need to
export the config.zip
configset from the Search API Solr module, extract the archive, and store it in version control
in your project for Tugboat to use (you also should do this for your other environments) in order to remove the
“Incompatible configset” error message in the Drupal admin UI.
The ${SOLR_HOME}
environment variable may not be available with some Solr images, in which case you would need to
hard-code the path:
cd "/opt/solr/server/solr/[CORE]" && rm -rf conf
Make sure to add the solr
service (or whatever you call your Solr service) to the depends
directive under the
default application.
php:
...
depends:
- mysql
- solr
One way to accomplish this is to add the following to a settings.php
file that’s loaded specifically for Tugboat:
$config['search_api.server.SERVER_MACHINE_NAME'] = [
'backend_config' => [
'connector' => 'standard',
'connector_config' => [
'scheme' => 'http',
'host' => 'solr',
'path' => '',
'core' => [CORE], # Matches core name created in Solr setup in Tugboat config.yml
'port' => '8983',
],
],
];
Note: solr
here is the service name in .tugboat/config.yml
. If you name your service something different, make sure
to use that service name as the host.
The Search API UI for editing the doesn’t show overwritten changes. To validate the overrides, run the following
command: drush cget search_api.server.SERVER_MACHINE_NAME --include-overridden
.