# Grav CMS: Docker Image with Skeleton Packages

> A quick guide leveraging Grav with Docker and sample content.

By Zsolt Bizderi · Published 2024-03-23
Canonical: https://ambientnode.uk/grav-cms

#### What is Grav CMS?

[Grav](https://getgrav.org/) is a modern open-source flat-file CMS, meaning it doesn't require a database. It is extremely fast, and it offers a variety of features that are easy to customize. It's not something I've adopted, but I gave Grav a try in my home lab to see what it's like.

### Grav vs. Ghost: The Differences

[Ghost](https://ghost.org/) is praised for its simplicity and focus on blogging, with a strong emphasis on SEO and modern web practices. Grav is known for its flexibility and ease of customization, used by those who prefer a flat-file approach and a more developer-oriented experience.

### Setting Up Grav CMS in Docker

Despite not using Grav for this blog, I noticed a gap in resources when it comes to setting it up in Docker with skeleton content, so I've put together a template that can be easily reused. "Skeleton" refers to a pre-packaged set of themes, plugins, and content. Essentially, it's a ready-to-use foundation for a new Grav site, enabling users to get a head start with a pre-configured design and structure. Skeletons are great for those who want a quick setup without starting from scratch, as they provide a structured yet customizable framework.

**Create Docker Volume:**

* Start by creating a docker volume named *grav*.

```
docker volume create grav
```

* Next, run the Grav container with the following command:

```
docker run -d \
  --name grav \
  -e PUID=1000 \
  -e PGID=1000 \
  -e TZ=Etc/UTC \
  -v grav:/config \
  -p 12561:80 \
  --restart always \
  lscr.io/linuxserver/grav:latest
```

Adjust the environment variables and port number as needed.

**Template Setup:**

* Access the docker volume's directory and set up the template:

```
cd /var/lib/docker/volumes/grav/_data/www/
rm -rf ./*
wget https://getgrav.org/download/skeletons/shop-site/1.0.0-admin
unzip 1.0.0-admin
rm ./1.0.0-admin
```

In this example, we're using the 'shop-site' skeleton, but you can replace the link with any other Grav template of your choice.

* Finally, access Grav on `{Docker Host IP}:12561`, create your admin account, and start using the template.
