For the last two years, I’ve been treating compose files as individual runners for individual programs.

Then I brainstormed the concept of having one singular docker-compose file that writes out every single running container on my system… (that can use compose), each install starts at the same root directory and volumes branch out from there.

Then I find out, this is how most people use compose. One compose file, with volumes and directories branching out from wherever ./ is called.

THEN I FIND OUT… that most people that discover this move their installations to podman because compose works on different versions per app and calling those versions breaks the concept of having one singular docker-compose.yml file and podman doesn’t need a version for compose files.

Is there some meta for the best way to handle these apps collectively?

  • null@slrpnk.net
    link
    fedilink
    English
    arrow-up
    47
    arrow-down
    1
    ·
    2 years ago

    I think compose is best used somewhere in between.

    I like to have separate compose files for all my service “stacks”. Sometimes that’s a frontend, backend, and database. Other times it’s just a single container.

    It’s all about how you want to organize things.

    • fraydabson@sopuli.xyz
      link
      fedilink
      English
      arrow-up
      3
      ·
      2 years ago

      Yeah this post had me a little worried I’m doing something wrong haha. But I do it just like that. Compose file per stack.

  • MonkCanatella@sh.itjust.works
    link
    fedilink
    English
    arrow-up
    15
    ·
    2 years ago

    I’ve always heard the opposite advice - don’t put all your containers in one compose file. If you have to update an image for one app, wouldn’t you have to restart the entirety of your apps?

    • lue3099@lemmy.world
      link
      fedilink
      English
      arrow-up
      4
      ·
      edit-2
      2 years ago

      You can reference a single or multiple containers in a compose stack.

      docker compose -f /path/to/compose.yml restart NameOfServiceInCompose

    • SheeEttin@lemmy.worldBanned
      link
      fedilink
      English
      arrow-up
      4
      ·
      2 years ago

      If by app you mean container, no. You pull the latest image and rerun docker compose. It will make only the necessary changes, in this case restarting the container to update.

  • Mythnubb@lemm.ee
    link
    fedilink
    English
    arrow-up
    11
    ·
    2 years ago

    As other have said, I have a root docker directory then have directories inside for all my stacks, like Plex. Then I run this script which loops through them all to update everything in one command.

    for n in plex-system bitwarden freshrss changedetection.io heimdall invidious paperless pihole transmission dashdot
    do
        cd /docker/$n
        docker-compose pull
        docker-compose up -d
    done
    
    echo Removing old docker images...
    docker image prune -f
    
      • DH10@feddit.de
        link
        fedilink
        English
        arrow-up
        7
        ·
        2 years ago

        I don’t like the auto update function. I also use a script similar to the one op uses (with a .ignore file added). I like to be in control when (or if) updates happen. I use watchtower as a notification service.

        • Mythnubb@lemm.ee
          link
          fedilink
          English
          arrow-up
          1
          ·
          2 years ago

          Exactly, when it updates, I want to initiate it to make sure everything goes as it should.

          • pete_the_cat@lemmy.world
            link
            fedilink
            English
            arrow-up
            1
            ·
            2 years ago

            Nothing off mine is that important that I couldn’t create/rollback the container if it does happen to screw up.

  • chiisana@lemmy.chiisana.net
    link
    fedilink
    English
    arrow-up
    0
    ·
    2 years ago

    Multiple compose file, each in their own directory for a stack of services. Running Lemmy? It goes to ~/compose_home/lemmy, with binds for image resized and database as folders inside that directory. Running website? It goes to ~/compose_home/example.com, with its static files, api, and database binds all as folders inside that. Etc etc. Use gateway reverse proxy (I prefer Traefik but each to their own) and have each stack join the network to expose only what you’d need.

    Back up is easy, snapshot the volume bind (stop any service individually as needed); moving server for specific stack is easy, just move the directory over to a new system (update gateway info if required); upgrading is easy, just upgrade individual stack and off to the races.

    Pulling all stacks into a single compose for the system as a whole is nuts. You lose all the flexibility and gain… nothing?