# Docker ## Building the Docker Image To build the Docker image locally: ``` bash # Build the image docker build -t owilix . # Build with a specific tag docker build -t owilix:latest . ``` ## Using Docker Once the image is built, you can use OWILIX commands through Docker instead of installing it locally. ### Basic Usage Replace `owilix` commands with `docker run --rm -it owilix`: ``` bash # Instead of: owilix --help # Test if docker run --rm -it owilix --help # Instead of: owilix remote ls docker run --rm -it owilix remote ls # Instead of: owilix remote doctor docker run --rm -it owilix remote doctor ``` **Note:** ### With Persistant Configuration and Data Persistence `owilix` stores its configuration files and the indices under `~/.owi`. since docker executions do not persist the configuration file, you need to expose the volume for data persistency. Otherwise, every execution would require you to login and accept the license (except for `owilix --help`) In general, run ` docker run -v ~/.owi:/home/owi/.owi --rm -it owilix ` to have the same behaviour as if you would run it without docker. Some examples on using a directory local configuration directory: ` ``` bash # Create directories for config and data mkdir -p ./config ./data # Run with mounted volumes docker run --rm -it \ -v $(pwd)/config:/home/owi/.owi \ owilix remote ls all # Pull data with persistence docker run --rm -it \ -v $(pwd)/config:/home/owi/.owi \ owilix remote pull lrz:latest/access=public ``` ### Using a separate data dictionary. You can also use a separate folder where the datasets are stored (default under `~/.owi/`) The docker images exposes a `/data` path therefore. However, you also need to change the configuration of the local repository that the `/data` is used. so change `owilix.cfg` in your configuration directory as follows: ```yaml local: options: path: /data/{access} async: True repository: file ``` Afterwards, you need to mount also the data directory when running docker: ``` bash # Create directories for config and data mkdir -p ./config ./data # Run with mounted volumes docker run --rm -it \ -v $(pwd)/config:/home/owi/.owi \ -v $(pwd)/data:/data \ owilix remote ls all # Pull data with persistence docker run --rm -it \ -v $(pwd)/config:/home/owi/.owi \ -v $(pwd)/data:/data \ owilix remote pull lrz:latest/access=public ``` ## HTTP API Preview The Docker image installs the optional HTTP dependencies by default. The HTTP API is a preview local service in `v5.5.0`; do not publish it on a public or shared network without an external access-control layer. Run it bound to the local host: ```bash docker run --rm -it \ -p 127.0.0.1:8080:8080 \ -v ~/.owi:/home/owi/.owi \ -v $(pwd)/data:/data \ owilix http serve --host 0.0.0.0 --port 8080 ``` The compose file `docker-compose/docker-compose-http.yml` also publishes the container only on `127.0.0.1:8080` by default.