arangodb
Estimated reading time: 8 minutesArangoDB - a distributed database with a flexible data model for documents, graphs, and key-values.
GitHub repo: https://github.com/arangodb/arangodb-docker
Library reference
This content is imported from the official Docker Library docs, and is provided by the original uploader. You can view the Docker Hub page for this image at https://hub.docker.com/images/arangodb
Supported tags and respective Dockerfile
links
2.8
,2.8.11
(jessie/2.8.11/Dockerfile)3.2
,3.2.17
(stretch/3.2.17/Dockerfile)3.3
,3.3.21
(stretch/3.3.21/Dockerfile)3.4
,3.4.4
,latest
(alpine/3.4.4/Dockerfile)
Quick reference
-
Where to get help:
the Docker Community Forums, the Docker Community Slack, or Stack Overflow -
Where to file issues:
https://github.com/arangodb/arangodb-docker/issues -
Maintained by:
ArangoDB -
Published image artifact details:
repo-info repo’srepos/arangodb/
directory (history)
(image metadata, transfer size, etc) -
Image updates:
official-images PRs with labellibrary/arangodb
official-images repo’slibrary/arangodb
file (history) -
Source of this description:
docs repo’sarangodb/
directory (history) -
Supported Docker versions:
the latest release (down to 1.6 on a best-effort basis)
What is ArangoDB?
ArangoDB is a multi-model, open-source database with flexible data models for documents, graphs, and key-values. Build high performance applications using a convenient SQL-like query language or JavaScript extensions. Use ACID transactions if you require them. Scale horizontally and vertically with a few mouse clicks.
The supported data models can be mixed in queries and allow ArangoDB to be the aggregation point for the data request you have in mind.
Key Features in ArangoDB
Multi-Model Documents, graphs and key-value pairs — model your data as you see fit for your application.
Joins Conveniently join what belongs together for flexible ad-hoc querying, less data redundancy.
Transactions Easy application development keeping your data consistent and safe. No hassle in your client.
Joins and Transactions are key features for flexible, secure data designs, widely used in RDBMSs that you won’t want to miss in NoSQL products. You decide how and when to use Joins and strong consistency guarantees, keeping all the power for scaling and performance as choice.
Furthermore, ArangoDB offers a microservice framework called Foxx to build your own Rest API with a few lines of code.
ArangoDB Documentation
How to use this image
Start an ArangoDB instance
In order to start an ArangoDB instance run
unix> docker run -e ARANGO_RANDOM_ROOT_PASSWORD=1 -d --name arangodb-instance arangodb
Will create and launch the arangodb docker instance as background process. The Identifier of the process is printed. By default ArangoDB listen on port 8529 for request and the image includes EXPOSE 8529
. If you link an application container it is automatically available in the linked container. See the following examples.
In order to get the IP arango listens on run:
unix> docker inspect --format '{{ .NetworkSettings.IPAddress }}' arangodb-instance
Using the instance
In order to use the running instance from an application, link the container
unix> docker run -e ARANGO_RANDOM_ROOT_PASSWORD=1 --name my-app --link arangodb-instance:db-link arangodb
This will use the instance with the name arangodb-instance
and link it into the application container. The application container will contain environment variables
DB_LINK_PORT_8529_TCP=tcp://172.17.0.17:8529
DB_LINK_PORT_8529_TCP_ADDR=172.17.0.17
DB_LINK_PORT_8529_TCP_PORT=8529
DB_LINK_PORT_8529_TCP_PROTO=tcp
DB_LINK_NAME=/naughty_ardinghelli/db-link
These can be used to access the database.
Exposing the port to the outside world
If you want to expose the port to the outside world, run
unix> docker run -e ARANGO_RANDOM_ROOT_PASSWORD=1 -p 8529:8529 -d arangodb
ArangoDB listen on port 8529 for request and the image includes EXPOSE
8529
. The -p 8529:8529
exposes this port on the host.
Choosing an authentication method
The ArangoDB image provides several authentication methods which can be specified via environment variables (-e) when using docker run
-
ARANGO_RANDOM_ROOT_PASSWORD=1
Generate a random root password when starting. The password will be printed to stdout (may be inspected later using
docker logs
) -
ARANGO_NO_AUTH=1
Disable authentication. Useful for testing.
WARNING Doing so in production will expose all your data. Make sure that ArangoDB is not diretcly accessible from the internet!
-
ARANGO_ROOT_PASSWORD=somepassword
Specify your own root password.
Note: this way of specifying logins only applies to single server installations. With clusters you have to provision the users via the root user with empty password once the system is up.
Command line options
In order to get a list of supported options, run
unix> docker run -e ARANGO_RANDOM_ROOT_PASSWORD=1 arangodb arangod --help
Persistent Data
ArangoDB supports two different storage engines as of ArangoDB 3.2. You can choose them while instantiating the container with the environment variable ARANGO_STORAGE_ENGINE
. With mmfiles
you choose the classic storage engine, rocksdb
will choose the newly introduced storage engine based on rocksdb. The default choice is mmfiles
.
ArangoDB use the volume /var/lib/arangodb3
as database directory to store the collection data and the volume /var/lib/arangodb3-apps
as apps directory to store any extensions. These directories are marked as docker volumes.
Please note that the old version 2.x used /var/lib/arangodb
and /var/lib/arangodb-apps
. We will refer to the 3.x variant in this document. In case you are starting a 2.x image just replace it with the 2.x variant.
See docker inspect --format "{{ .Config.Volumes}}" arangodb
for all volumes.
A good explanation about persistence and docker container can be found here: Docker In-depth: Volumes, Why Docker Data Containers are Good
Using host directories
You can map the container’s volumes to a directory on the host, so that the data is kept between runs of the container. This path /tmp/arangodb
is in general not the correct place to store you persistent files - it is just an example!
unix> mkdir /tmp/arangodb
unix> docker run -e ARANGO_RANDOM_ROOT_PASSWORD=1 -p 8529:8529 -d \
-v /tmp/arangodb:/var/lib/arangodb3 \
arangodb
This will use the /tmp/arangodb
directory of the host as database directory for ArangoDB inside the container.
Using a data container
Alternatively you can create a container holding the data.
unix> docker create --name arangodb-persist arangodb true
And use this data container in your ArangoDB container.
unix> docker run -e ARANGO_RANDOM_ROOT_PASSWORD=1 --volumes-from arangodb-persist -p 8529:8529 arangodb
If want to save a few bytes you can alternatively use busybox or alpine for creating the volume only containers. Please note that you need to provide the used volumes in this case. For example
unix> docker run -d --name arangodb-persist -v /var/lib/arangodb3 busybox true
Using as a base image
If you are using the image as a base image please make sure to wrap any CMD in the exec form. Otherwise the default entrypoint will not do its bootstrapping work.
When deriving the image, you can control the instantiation via putting files into /docker-entrypoint-initdb.d/
.
*.sh
- files ending with .sh will be run as a bash shellscript.*.js
- files will be executed with arangosh. You can specify additional arangosh arguments via theARANGOSH_ARGS
environment variable.dumps/
- in this directory you can place subdirectories containing database dumps generated using arangodump. They will be restored using arangorestore.
License
Arangodb itself is licensed under the Apache License, but it contains software of third parties under their respective licenses.
As with all Docker images, these likely also contain other software which may be under other licenses (such as Bash, etc from the base distribution, along with any direct or indirect dependencies of the primary software being contained).
Some additional license information which was able to be auto-detected might be found in the repo-info
repository’s arangodb/
directory.
As for any pre-built image usage, it is the image user’s responsibility to ensure that any use of this image complies with any relevant licenses for all software contained within.