I’m pretty new to the self hosting thing but I’m enjoying it a lot and want to go a bit further down the proverbial rabbit hole.

I’m looking at a bunch of services and they all require a DB, usually a MySQL DB. It seems counterintutitive to have 20 MySQL databases each in its own Docker container. So is there a way to have one DB across most of my services? (I realize that Nextcloud and other bigger items should have a dedicted DB.)

How would I set up a shared DB in a docker-compose file?

  • Quill0@lemmy.digitalfall.net
    link
    fedilink
    English
    arrow-up
    1
    ·
    1 year ago

    Yes and usually sane developers allow you to specify external mysql instances.

    Delving into the politics many view docker as a standalone system that shouldn’t need external items so they leave their db internal. Which goes against having configurations external.

    But then you have external databases that you need to know enough to setup ahead of time to allow the docker to use and now I gave myself a headache

  • ancoraunamoka@lemmy.dbzer0.com
    link
    fedilink
    English
    arrow-up
    1
    ·
    1 year ago

    Not only it can be done but I think it is the way to go. You then have to manage permissions and backup only on one database, and the performance improves given that you let postgresql manage it’s own IO. It goes without saying that you should use postgresql instead of mysql

  • traches@sh.itjust.works
    link
    fedilink
    English
    arrow-up
    0
    arrow-down
    1
    ·
    1 year ago

    You’ll want to learn some database administration before you attempt this. Simpler to just give them all their own instance.

  • Thomas@lemmy.zell-mbc.com
    link
    fedilink
    English
    arrow-up
    0
    arrow-down
    1
    ·
    edit-2
    1 year ago

    You would expose the port to your host which makes the db acessible by anything running on the host, docker or native. Something like

    `port

    • 5432:5432 `

    But I would recommend running a dedicated db for each service. At least that’s what I do.

    • Simpler setup and therefore less error-prone
    • More secure because the db’s don’t need to be exposed
    • Easier to manage because I can independently upgrade, backup, move

    Isn’t the point about containers that you keep things which depend on each other together, eliminating dependencies? A single db would be a unecessary dependency in my view. What if one service requires a new version of MySQL, and another one does not yet support the new version?

    I also run all my databases via a bind mount

    `volume

    • ./data:/etc/postgres/data…`

    and each service in it’s own directory. E.g. /opt/docker/nextcloud

    That way I have everything which makes up a service contained in one folder. Easy to backup/restore, easy to move, and not the least, clean.