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?

  • @[email protected]
    link
    fedilink
    English
    91 year ago

    I moved from compose to using Ansible to deploy containers. The Ansible container config looks almost identical to a compose file but I can also create folders, config files, set permissions, etc.

    • @SheeEttin
      link
      English
      41 year ago

      Can you give an example playbook?

      • @[email protected]
        link
        fedilink
        English
        61 year ago

        Sure. Below is an example playbook that is fairly similar to how I’m deploying most of my containers.

        This example creates a folder for samba data, creates a config file from a template and then runs the samba container. It even has a handler so that if I make changes to the config file template it will cycle the container for me after deploying the updated config file.

        I usually structure everything as an ansible role which just splits up this sort of playbook into a folder structure instead. ChatGPT did a great job of helping me figure out where to put files and generally just sped up the process of me creating tasks to do common things like setup a cronjob, install a package, or copy files around.

        - name: Run samba
          hosts: servername
        
          vars:
            samba_data_directory: "/home/me/docker/samba"
        
          tasks:
          - name: Create samba data directory
            ansible.builtin.file:
              path: "{{ samba_data_directory }}"
              state: directory
              mode: '0755'
        
          - name: Create samba config from a jinja template file
            ansible.builtin.template:
              src: templates/smb.conf.j2
              dest: "{{ samba_data_directory }}/smb.conf"
              mode: '0644'
            notify: Restart samba container
        
          - name: Run samba container
            community.docker.docker_container:
              name: samba
              image: dperson/samba
              ports:
                - 445:445
              volumes:
                - "{{ samba_data_directory}}:/etc/samba/"
                - "/home/me/samba_share:/samba_share"
              env:
                TZ: "America/Chicago"
                UID: '1000'
                GUID: '1000'
                USER: "me;mysambapassword"
                WORKERGROUP: "my-samba-workergroup"
              restart_policy: unless-stopped
        
          handlers:
          - name: Restart samba container
            community.docker.docker_container:
              name: samba
              restart: true