# Codex Docker Image

 Codex provides pre-built docker images and they are stored in the [codexstorage/nim-codex](https://hub.docker.com/repository/docker/codexstorage/nim-codex) repository.


## Run

 We can run Codex Docker image using CLI
 ```shell
 # Default run
 docker run --rm codexstorage/nim-codex

 # Mount local datadir
 docker run -v ./datadir:/datadir --rm codexstorage/nim-codex codex --data-dir=/datadir
 ```

 And Docker Compose
 ```shell
 # Run in detached mode
 docker-compose up -d
 ```


## Arguments

 Docker image is based on the [codex.Dockerfile](codex.Dockerfile) and there is
  ```
  ENTRYPOINT ["/docker-entrypoint.sh"]
  CMD ["codex"]
  ```

 It means that at the image run it will just run `codex` application without any arguments and we can pass them as a regular arguments, by overriding command
 ```shell
 docker run codexstorage/nim-codex codex --api-bindaddr=0.0.0.0 --api-port=8080
 ```


## Environment variables

 We can configure Codex using [Environment variables](../README#environment-variables) and [docker-compose.yaml](docker-compose.yaml) file can be useful as an example.

 We also added a temporary environment variable `NAT_IP_AUTO` to the entrypoint which is set as `false` for releases and ` true` for regular builds. That approach is useful for Dist-Tests.
 ```shell
 # Disable NAT_IP_AUTO for regular builds
 docker run -e NAT_IP_AUTO=false codexstorage/nim-codex
 ```


## Slim
 1. Build the image using `docker build -t codexstorage/codexsetup:latest -f codex.Dockerfile ..`
 2. The docker image can then be minified using [slim](https://github.com/slimtoolkit/slim). Install slim on your path and then run:
    ```shell
    slim # brings up interactive prompt
    >>> build --target status-im/codexsetup --http-probe-off true
    ```
 3. This should output an image with name `status-im/codexsetup.slim`
 4. We can then bring up the image using `docker-compose up -d`.