1. Images & Charts
  2. ghost

Echo is acquiring Minimus. See the announcementfor more details.

ghost

ghost

Apps
Updated 7 hours ago

Ghost Overview

Secure your stack with a hardened Ghost image freshly-built by Minimus. Minimus images always include the most up-to-date package version for all packages and dependencies contained in the image.


Ghost is a publishing platform for running a blog, newsletter, or membership site without relying on a third-party host. It handles content authoring, email newsletter delivery, and paid member subscriptions in one application, so a publisher can manage a site and its audience from a single admin interface instead of stitching together separate tools for each.


Try It Out

Prerequisites

Ghost requires a MySQL database to store its content, so this example uses Docker Compose to run Ghost alongside MySQL.

Run Ghost

Save the following to a new file ghost-compose.yaml in your project directory:

services:
  ghost:
    image: reg.mini.dev/ghost
    container_name: ghost
    ports:
      - "8080:2368"
    environment:
      - url=http://localhost:8080
      - database__client=mysql
      - database__connection__host=mysql
      - database__connection__user=ghost
      - database__connection__password=Minimus!
      - database__connection__database=ghost
    volumes:
      - ghost_content:/var/lib/ghost/content
    depends_on:
      mysql:
        condition: service_healthy

  mysql:
    image: reg.mini.dev/mysql
    container_name: ghost-mysql
    environment:
      MYSQL_ROOT_PASSWORD: Minimus!
      MYSQL_DATABASE: ghost
      MYSQL_USER: ghost
      MYSQL_PASSWORD: Minimus!
    volumes:
      - mysql_data:/var/lib/mysql
    healthcheck:
      test: ["CMD-SHELL", "mysqladmin ping -h 127.0.0.1 -uroot -pMinimus!"]
      interval: 5s
      timeout: 5s
      retries: 10

volumes:
  mysql_data:      # Persist data for MySQL
  ghost_content:    # Persist content, themes, and uploaded media for Ghost

Run the app:

docker compose -f ghost-compose.yaml up

Visit http://localhost:8080/ghost to reach the setup wizard and create your admin account. Once finished, the site itself is available at http://localhost:8080.

If you're working in a VM, run curl ifconfig.me to look up your external IP and substitute it like this: http://{IP}:8080.

Clean Up

Once ready to clean up, run the following command to remove the containers and their associated volumes:

docker compose -f ghost-compose.yaml down -v

Technical Considerations

The Ghost image provided by Minimus is a slim, security-hardened alternative to the public image from Docker Hub. The images are largely interchangeable, with a few differences as noted below.

Ghost built by Minimus:

  1. Runs as root to support required functions in alignment with the public image.
  2. The /var/lib/ghost/content directory must persist across restarts. It holds themes, images, and uploaded media.
  3. MariaDB is not supported and should not be used instead of MySQL. Ghost's documentation warns that use of MariaDB is a common source of bugs.
  4. Drill down on the version specification tab to see the default user, listening ports, entrypoint, volumes, environment variables, etc.

The Payoff

A hardened, minimal image that will remain more secure for the long run and accrue vulnerabilities at a slower rate.


Terms & Info

Trademark

This catalog is published by Minimus. All product names, logos, and marks, other than those belonging to Minimus, shown are owned by their respective rights holders and appear here only to identify the open source software each image contains. Minimus claims no ownership of those marks and implies no affiliation with, endorsement by, certification by, or sponsorship by any rights holder.

Disclaimer

Images are provided "as-is" without warranty of any kind. "Hardened" refers to the security configuration applied at the time of build and does not constitute a guarantee of ongoing security or absence of vulnerabilities. The free tier is provided without support, SLA, or guaranteed patching timelines. Security updates may be applied to paid subscriptions before or instead of free tier images. By pulling or using any image you agree to our Terms of Use.