Install LayerG with Docker Compose
Docker is the quickest way to download and start developing with LayerG. By using Docker you are able to:
- Install to a pristine environment
 - Easily install and run the CockroachDB or PostgreSQL database for LayerG
 - Take snapshots, remove, and re-install LayerG without affecting your primary operating system
 - Enjoy a quick and simplified installation experience regardless of your OS
 
Following this guide, you will use Docker Compose to quickly and easily define all the necessary services and run your local development instance of LayerG.
Prerequisites
Before proceeding ensure that you have installed Docker Desktop.
Linux Users
Docker Desktop is only available for Mac and Windows. You must install Docker Engine and Docker Compose individually for your distribution.
Running LayerG
- Start by creating a directory where your LayerG server will sit, for example 
Desktop/LayerG. - In this folder create a 
docker-compose.ymlfile and open it using your preferred text editor. - Layerg Labs provides two YML files for use: using either PostgreSQL or CockroachDB as the database.
 
docker-compose-postgres.yml
version: '3'
services:
  redis:
    image: redis
    container_name: redis
    expose:
      - "6379"
    ports:
      - "6379:6379"
    volumes:
      - ../redis-data:/data
    networks:
      - default
  postgres:
    command: postgres -c shared_preload_libraries=pg_stat_statements -c pg_stat_statements.track=all
    environment:
      - POSTGRES_DB=layerg
      - POSTGRES_PASSWORD=localdb
    expose:
      - "8081"
      - "5432"
    image: postgres:12.2-alpine
    ports:
      - "5432:5432"
      - "8082:8081"
    volumes:
      - data:/var/lib/postgresql/data
  layerg:
    build: .
    depends_on:
      - postgres
      - redis
    entrypoint:
      - "/bin/sh"
      - "-ecx"
      - >
        /layerg/layerg migrate up --database.address postgres:localdb@postgres:5432/layerg &&
        exec /layerg/layerg --config /layerg/data/local.yml --database.address postgres:localdb@postgres:5432/layerg
    expose:
      - "7349"
      - "7350"
      - "7351"
    healthcheck:
      test: [ "CMD", "/layerg/layerg", "healthcheck" ]
      interval: 10s
      timeout: 5s
      retries: 5
    links:
      - "postgres:db"
    ports:
      - "7349:7349"
      - "7350:7350"
      - "7351:7351"
    restart: unless-stopped
    networks:
      - default
volumes:
  data:
docker-compose-cockroach.yml
    version: '3'
    services:
      cockroachdb:
        image: cockroachdb/cockroach:latest-v23.1
        command: start-single-node --insecure --store=attrs=ssd,path=/var/lib/cockroach/
        restart: "no"
        volumes:
          - data:/var/lib/cockroach
        expose:
          - "8080"
          - "26257"
        ports:
          - "26257:26257"
          - "8080:8080"
        healthcheck:
          test: ["CMD", "curl", "-f", "http://localhost:8080/health?ready=1"]
          interval: 3s
          timeout: 3s
          retries: 5
      layerg:
        build: .
        depends_on:
          - cockroachdb
          - redis
        entrypoint:
          - "/bin/sh"
          - "-ecx"
          - >
            /layerg/layerg migrate up --database.address root@cockroachdb:26257 &&
            exec /layerg/layerg --config /layerg/data/local.yml --database.address root@cockroachdb:26257
        expose:
          - "7349"
          - "7350"
          - "7351"
        healthcheck:
          test: [ "CMD", "/layerg/layerg", "healthcheck" ]
          interval: 10s
          timeout: 5s
          retries: 5
        links:
          - "cockroachdb:db"
        ports:
          - "7349:7349"
          - "7350:7350"
          - "7351:7351"
        restart: unless-stopped
        networks:
          - default
        volumes:
          data:
      prometheus:
        image: prom/prometheus
        entrypoint: /bin/sh -c
        command: |
          'sh -s <<EOF
            cat > ./prometheus.yml <<EON
          global:
            scrape_interval:     15s
            evaluation_interval: 15s
          scrape_configs:
            - job_name: prometheus
              static_configs:
              - targets: ['localhost:9090']
            - job_name: LayerG
              metrics_path: /
              static_configs:
              - targets: ['LayerG:9100']
          EON
          prometheus --config.file=./prometheus.yml
          EOF'
        ports:
          - '9090:9090'
    volumes:
      data:
Copy and paste the contents of your preferred option into your docker-compose.yml file.
Windows Users
You must edit the LayerG:volumes: entry in your docker-compose.yml file so that it looks like the following: /c/Users/<username>/projects/docker:/LayerG/data.
- Open a Terminal window and navigate to your LayerG directory. For example:
 
    cd desktop/LayerG
- To pull all required images and start your application, run the following:
 
    docker compose up
- Congratulations! Your LayerG server is now up and running, available at 
127.0.0.1:7350. 
LayerG containers running
Use the Open in Visual Studio Code button (or that for your IDE) to edit your docker-compose.yml file directly.
LayerG Console
You can also access the LayerG Console by navigating your browser to 127.0.0.1:7351:
When prompted to login, the default credentials are admin:password. These can be changed via configuration file or command-line flags.
Configuration File
There are many configuration options available that you can customize for your LayerG server. You can create a YML file for all configurations you want to set, and pass that file to your Docker containers.
First you will need to make a local storage volume available to Docker:
- Open your 
docker-compose.ymlfile in your preferred text editor. - Edit the 
LayerG:volumes:entry to specify your desired volume. For example, to create a/datafolder in ourdesktop/LayerGdirectory used above, which would be available atLayerG/datain the Docker container, it would look like the following: 
    volumes:
    - ./data:/LayerG/data
- Save the changed file and restart your Docker containers for the change to take effect. From your Terminal:
 
docker compose restart
- Next, create your custom configuration file, for example 
my-config.yml, and place it in the/datafolder that you made available to Docker, above. 
my-config.yml
    name: LayerG-node-1
    data_dir: "./data/"
    logger:
        stdout: false
        level: "warn"
        file: "/LayerG/data/logfile.log"
    console:
        port: 7351
        username: "my_user"
        password: "my_password"
- Open your 
docker-compose.ymlfile again, this time to edit theLayerG:entrypointentry to add the--configflag pointing to your configuration file. It should look like this: 
    LayerG:
    entrypoint: - "/bin/sh" - "-ecx" - >
    /LayerG/LayerG migrate up --database.address root@cockroachdb:26257 &&
    /LayerG/LayerG --config /LayerG/data/my-config.yml
- Save the changed file and restart your Docker containers for the change to take effect. From your Terminal:
 
    docker compose restart
Next steps
With your LayerG server now up and running with the desired configuration, you can get started with your preferred client SDK.