Running Ghost on CoreOS with Docker

Running Ghost on CoreOS with Docker
Photo by CHUTTERSNAP / Unsplash

I’ve been wanting get my personal site back up, as well as write more for a wee while now, and finally got round to taking the plunge after seeing Ghost’s incredible new 1.0 features.

Not being one to miss a chance to try new things, I saw this as a good opportunity to use CoreOS and get Ghost running in a container. At its essence CoreOS provides a lightweight operating system designed to support containerised applications. It ships with Docker right out of the box and was super easy to launch on Digital Ocean.

First off, once we’ve got our server launched, we need to install Docker Compose. We’re not doing anything fancy at the moment and only require one container, but I’m using Compose as it allows me to grow my architecture easily from my `docker-compose.yml`. I’d ideally like to run this from MySQL in future, so I can make use of Compose to add that to my stack.

Although it ships with Docker, CoreOS doesn’t ship with Docker Compose, so we can install that as follows:

sudo su -mkdir -p /opt/bincurl -L https://github.com/docker/compose/releases/download/1.25.4/docker-compose-`uname -s`-`uname -m` > /opt/bin/docker-composechmod +x /opt/bin/docker-compose

You can verify that went as expected with `docker-compose -v`.

Great, we now have Compose at our disposal. We’re going to want to persist Ghost’s data outwith the container, so we don’t lose our content on restart, so lets create a directory to map to the container as a volume with mkdir ghost Now for our `docker-compose.yml`, where we define services we want to run:

version: '3.7'
services:
  web:
    restart: always
    image: ghost
    ports:
      - "80:2368"
    volumes:
      - /home/core/ghost/:/var/lib/ghost/content
    environment:
      url: http://markprovan.com

Some things to point out from above are restart tells Compose to restart the container in the event it crashesports allows us to map the Ghost server in the container to out servers http port, to serve the sitevolumes lets us mount our local folder to the container, to persist content.url tells Ghost where the site lives, for building links on the site.We can kick things off by running `docker-compose up -d`, the `-d` flag telling Docker that this should be run as a daemon, out of process. Head on over to your server IP/domain name and you should see your blog running!