DEV Community

SnowCode
SnowCode

Posted on

🗃️ Using Docker to archive a service (BookStack)

I was on a process to dockerize my infrastructure and I wanted to archive a service I couldn't simply migrate to a newer version nor really use anymore.

So I used Docker to archive it without depending on any dependency.

# First I go into the website's directory
cd /var/www/BookStack

# I generate a SQL script as a backup of the database named "bookstack_db"
mysqldump -u root bookstack_db > bookstack-backup-db.sql

# Then I used tar to create an archive of files (.env, uploads)
tar -czvf bookstack-backup-files.tar.gz .env public/uploads storage/uploads

# Then I take the version of BookStack
cat version
Enter fullscreen mode Exit fullscreen mode

Then I download those files back to my laptop.

mkdir bookstack-backup
cd bookstack-backup
rsync -rv debian@snowcode.ovh:/var/www/BookStack/bookstack-backup-* .
Enter fullscreen mode Exit fullscreen mode

Then, I created a docker-compose file with the following content to describe my infrastructure.

version: "2"
services:
  bookstack:
    image: ghcr.io/linuxserver/bookstack:version-v0.31.4 # Here goes my bookstack version
    container_name: bookstack
    environment:
      - PUID=1000
      - PGID=1000
      - APP_URL=http://localhost:8080
      - DB_HOST=bookstack_db
      - DB_PORT=3306
      - DB_USER=bookstack
      - DB_PASS=secret
      - DB_DATABASE=bookstackapp
    volumes:
      - ./bookstack_files:/config
    ports:
      - 8080:80
    depends_on:
      - bookstack_db
  bookstack_db:
    image: lscr.io/linuxserver/mariadb:10.6.10
    container_name: bookstack_db
    environment:
      - PUID=1000
      - PGID=1000
      - MYSQL_ROOT_PASSWORD=secret
      - TZ=Europe/Brussels
      - MYSQL_DATABASE=bookstackapp
      - MYSQL_USER=bookstack
      - MYSQL_PASSWORD=secret
    volumes:
      - ./bookstack_db:/config
Enter fullscreen mode Exit fullscreen mode

Finally I can start the server with that config...

sudo docker-compose up
Enter fullscreen mode Exit fullscreen mode

...and place the files into the right volumes/directories.

sudo su # I need to be root for accessing the volumes
mv bookstack-backup-files.tar.gz bookstack_files
mv bookstack-backup-db.sql bookstack_db
cd bookstack_files
tar xvzf bookstack-backup-files.tar.gz
Enter fullscreen mode Exit fullscreen mode

Finally I can enter the running container of my database to import the script

sudo docker exec -it bookstack_db bash -c "mysql -u bookstack -p bookstackapp < /config/bookstack-backup-db.sql"
# The default password is secret as defined in the docker-compose
Enter fullscreen mode Exit fullscreen mode

The website can be accessed at http://localhost:8080

Archiving the Docker images

Now to not depend of the Docker registeries we can also archive the images of mariadb and bookstack

First we can list the images:

sudo docker images
Enter fullscreen mode Exit fullscreen mode

Then take the IDs of the mariadb and bookstack images to export them into a TAR archive.

sudo docker image save aad0c49aebf3 -o bookstack.tar
sudo docker image save 39a4293c3071 -o mariadb.tar
Enter fullscreen mode Exit fullscreen mode

Now it's done ! When we need it we can import the images back from the archives using those commands:

sudo docker image import bookstack.tar ghcr.io/linuxserver/bookstack:version-v0.31.4 
sudo docker image import mariadb.tar lscr.io/linuxserver/mariadb:10.6.10
Enter fullscreen mode Exit fullscreen mode

And now you no longer depends on those registeries either for using this backup.

Sentry image

Hands-on debugging session: instrument, monitor, and fix

Join Lazar for a hands-on session where you’ll build it, break it, debug it, and fix it. You’ll set up Sentry, track errors, use Session Replay and Tracing, and leverage some good ol’ AI to find and fix issues fast.

RSVP here →

Top comments (0)

Billboard image

The Next Generation Developer Platform

Coherence is the first Platform-as-a-Service you can control. Unlike "black-box" platforms that are opinionated about the infra you can deploy, Coherence is powered by CNC, the open-source IaC framework, which offers limitless customization.

Learn more

👋 Kindness is contagious

Please leave a ❤️ or a friendly comment on this post if you found it helpful!

Okay