Hi! Im new to self hosting. Currently i am running a Jellyfin server on an old laptop. I am very curious to host other things in the future like immich or other services. I see a lot of mention of a program called docker.

search this on The internet I am still Not very clear what it does.

Could someone explain this to me like im stupid? What does it do and why would I need it?

Also what are other services that might be interesting to self host in The future?

Many thanks!

EDIT: Wow! thanks for all the detailed and super quick replies! I’ve been reading all the comments here and am concluding that (even though I am currently running only one service) it might be interesting to start using Docker to run all (future) services seperately on the server!

  • Wytch@lemmy.zip
    link
    fedilink
    English
    arrow-up
    3
    ·
    9 hours ago

    Thanks for asking this question. These replies are so much more helpful in understanding the basic premise than anything I’ve come across.

  • Professorozone@lemmy.world
    link
    fedilink
    English
    arrow-up
    3
    ·
    9 hours ago

    Wow! Thank you all for the civilized responses. This all sounds so great. I am older and I feel like I’ve already seen enough ads for one lifetime and I hate all this fascist tracking crap.

    But how does that work? Is it just a network on which you store your stuff in a way that you can download it anywhere or can it do more? I mean, to me that’s just a home network. Hosting sounds like it’s designed for other people to access. Can I put my website on there? If so, how do I go about registering my domain each year. I’m not computer illiterate but this sounds kind of beyond my skill level. I’ll go search Jellyfin, weird name, and see what I can find. Thanks again!

    • y0kai@lemmy.dbzer0.com
      link
      fedilink
      English
      arrow-up
      5
      ·
      edit-2
      6 hours ago

      You’re asking a lot of questions at one time and will be better served understanding you’re knocking at the door of a very deep rabbit hole.

      That said, I’ll try to give you the basic idea here and anyone who can correct me, please do so! I doubt I’ll get everything correct and will probably forget some stuff lol.

      So, self hosting really just means running the services you use on your own machine. There’s some debate about whether hosting on a cloud server - where someone else owns and has physical access to the machine - counts as self hosting. For the sake of education, and because I’m not a fan of gatekeeping, I say it does count.

      Anyway, when you’re running a server (a machine, real or virtualized, that is running a program connected to a network that can - usually - be accessed by other machines connected to that network), who and what you share with other machines on your network or other networks, is ultimately up to you.

      When using a “hosted” service, which is where another entity manages the server (not just the hardware, but the software and administration too, and is therefore the opposite of self hosting. Think Netflix, as opposed to Jellyfin), your data and everything you do on or with that service on that network belongs to the service provider and network owners. Your “saved” info is stored on their disks in their data center. There are of course exceptions and companies who will offer better infrastructure and privacy options but that’s the gist of non-self-hosted services.

      To your specific questions:

      But how does that work?

      Hopefully the above helps, but this question is pretty open ended lol. Your next few questions are more pointed, so I’ll try to answer them better.

      Is it just a network on which you store your stuff in a way that you can download it anywhere or can it do more?

      Well, kind of. If you’re hosting on a physical machine that you own, your services will be accessible to any other machine on your home network (unless you segment your network, which is another conversation for another time) and should not, by default, be accessible from the internet. You will need to be at home, on your own network to access anything you host, by default.

      As for storage of your data, self hosted services almost always default to local storage. This means, you can save anything you’re doing on the hard-drive of the machine the server is running on. Alternatively if you have a network drive, you can store it on another machine on your network. Some services will allow you to connect to cloud storage (on someone else’s machine somewhere else). The beauty is that you decide where your data lives.

      I mean, to me that’s just a home network. Hosting sounds like it’s designed for other people to access. Can I put my website on there?

      Like almost anything with computers and networking, the defaults are changeable. You can certainly host a service on the internet for others to access. This usually involves purchasing the rights to a domain name, setting that domain up to link to your private IP address, and forwarding a port on your router so people can connect to your machine. This can be extremely dangerous if you don’t know what you’re doing an isn’t recommended without learning a lot more about network and cyber security.

      That said, there are safer ways to connect from afar. Personally, I use a software called Wireguard. This software allows devices I approve (like my phone, or my girlfirend’s laptop) to connect to my network when away from home though what is called an “encrypted tunnel” or a "Virtual Private Network (VPN) ". These can be a pain to set up for the first time if you’re new to the tech and there are easier solutions I’ve heard of but haven’t tried, namely Tailscale, and Netbird, both of which use Wireguard but try to make the administration easier.

      You can also look into reverse proxies, and services like cloudflare for accessing things away from home. These involve internet hostng, and security should be considered, like above. Anything that allows remote access will come with unique pros and cons that you’ll need to weigh and sort for yourself.

      If so, how do I go about registering my domain each year.

      Personally, I use Porkbun.com for cheap domains, but there are tons of different providers. You’ll just have to shop around. To actually use the domain, I’m gonna be linking some resources lower in the post. If I remember correctly, landchad.net was a good resource for learning about configuring a domain but idk. There will be a few links below.

      I’m not computer illiterate but this sounds kind of beyond my skill level.

      It was beyond my skill level when I started too. It’s been nearly a year now and I have a service that automatically downloads media I want, such as movies, shows, music, and books. It stores them locally on a stack of hard drives, I can access them outside of my house with wireguard as well. Further, I’ve got some smaller services, like a recipe book I share with my girlfriend and soon with friends and family. I’ve also started hosting my own AI, a network wide ad-blocker, a replacement for Google photos, a filesharing server, and some other things that are escaping me right now.

      The point is that it’s only a steep hill while you’re at the bottom looking up. Personally, the hike has been more rejuvenating than tiresome, though I admit it takes patience, a bit of effort, and a willingness to learn, try new things, and fail sometimes.

      Never sweat the time it takes to accomplish a task. The time will pass either way and at the end of it you can either have accomplished something, or you’ll look back and say, “damn I could’ve been done by now.”

      I’ll go search Jellyfin, weird name, and see what I can find. Thanks again!

      Also check these out, if you’re diving in:

      YouTube:

      Guides:

      Tools:

      Hopefully this helps someone. Good luck!

  • CodeBlooded@programming.dev
    link
    fedilink
    English
    arrow-up
    21
    ·
    18 hours ago

    Docker enables you to create instances of an operating system running within a “container” which doesn’t access the host computer unless it is explicitly requested. This is done using a Dockerfile, which is a file that describes in detail all of the settings and parameters for said instance of the operating system. This might be packages to install ahead of time, or commands to create users, compile code, execute code, and more.

    This is instance of an operating system, usually a “server,” is great because you can throw the server away at any time and rebuild it with practically zero effort. It will be just like new. There are many reasons to want to do that; who doesn’t love a fresh install with the bare necessities?

    On the surface (and the rabbit hole is deep!), Docker enables you to create an easily repeated formula for building a server so that you don’t get emotionally attached to a server.

  • Matt@lemmy.ml
    link
    fedilink
    English
    arrow-up
    5
    ·
    16 hours ago

    It’s the platform that runs all of your services in containers. This means they are separated from your system.

    Also what are other services that might be interesting to self host in The future?

    Nextcloud, the Arr stack, your future app, etc etc.

  • 0^2@lemmy.dbzer0.com
    link
    fedilink
    English
    arrow-up
    4
    ·
    16 hours ago

    Now compare Docker vs LXC vs Chroot vs Jails and the performance and security differences. I feel a lot of people here are biased without knowing the differences (pros and cons).

  • jagged_circle@feddit.nl
    link
    fedilink
    English
    arrow-up
    6
    ·
    18 hours ago

    Its an extremely fast and insecure way to setup services. Avoid it unless you want to download and execute malicious code.

      • jagged_circle@feddit.nl
        link
        fedilink
        English
        arrow-up
        2
        ·
        5 hours ago

        Package managers like apt use cryptography to check signatures in everything they download to make sure they aren’t malicious.

        Docket doesn’t do this. They have a system called DCT but its horribly broken (not to mention off by default).

        So when you run docker pull, you can’t trust anything it downloads.

    • festus@lemmy.ca
      link
      fedilink
      English
      arrow-up
      3
      ·
      18 hours ago

      Entirely depends on who’s publishing the image. Many projects publish their own images, in which case you’re running their code regardless.

  • grue@lemmy.world
    link
    fedilink
    English
    arrow-up
    84
    ·
    1 day ago

    A program isn’t just a program: in order to work properly, the context in which it runs — system libraries, configuration files, other programs it might need to help it such as databases or web servers, etc. — needs to be correct. Getting that stuff figured out well enough that end users can easily get it working on random different Linux distributions with arbitrary other software installed is hard, so developers eventually resorted to getting it working on their one (virtual) machine and then just (virtually) shipping that whole machine.

      • grue@lemmy.world
        link
        fedilink
        English
        arrow-up
        7
        ·
        24 hours ago

        I’m aware of that, but OP requested “explain like I’m stupid” so I omitted that detail.

        • fishpen0@lemmy.world
          link
          fedilink
          English
          arrow-up
          6
          ·
          1 day ago

          Yes, technically chroot and jails are wrappers around kernel namespaces / cgroups and so is docker.

          But containers were born in a post chroot era as an attempt at making the same functionality much more user friendly and focused more on bundling cgroups and namespaces into a single superset, where chroot on its own is only namespaces. This is super visible in early docker where you could not individually dial those settings. It’s still a useful way to explain containers in general in the sense that comparing two similar things helps you define both of them.

          Also cgroups have evolved alongside containers at this point and work rather differently now compared to 18 years ago when cgroups were invented and this differentiation mattered more than now. We’re at the point where differentiation between VMs and Containers is getting really hard since both more and more often rely on the same kernel features that were developed in recent years on top of cgroups

        • Pup Biru@aussie.zone
          link
          fedilink
          English
          arrow-up
          2
          ·
          1 day ago

          a chroot is different, but it’s an easy way to get an idea of what docker is:

          it also contains all the libraries and binaries that reference each other, such that if you call commands they use the structure of the chroot

          this is far more relevant to a basic understanding of what docker does than explaining kernel namespaces. once you have the knowledge of “shipping around applications including dependencies”, then you can delve into isolation and other kinds of virtualisation

    • Scrollone@feddit.it
      link
      fedilink
      English
      arrow-up
      15
      ·
      edit-2
      1 day ago

      Isn’t all of this a complete waste of computer resources?

      I’ve never used Docker but I want to set up a Immich server, and Docker is the only official way to install it. And I’m a bit afraid.

      Edit: thanks for downvoting an honest question. Wtf.

      • Nibodhika@lemmy.world
        link
        fedilink
        English
        arrow-up
        4
        ·
        15 hours ago

        It’s not. Imagine Immich required library X to be at Y version, but another service on the server requires it to be at Z version. That will be a PitA to maintain, not to mention that getting a service to run at all can be difficult due to a multitude of reasons in which your system is different from the one where it was developed so it might just not work because it makes certain assumptions about where certain stuff will be or what APIs are available.

        Docker eliminates all of those issues because it’s a reproducible environment, so if it runs on one system it runs on another. There’s a lot of value in that, and I’m not sure which resource you think is being wasted, but docker is almost seamless without not much overhead, where you won’t feel it even on a raspberry pi zero.

      • Encrypt-Keeper@lemmy.world
        link
        fedilink
        English
        arrow-up
        27
        ·
        edit-2
        1 day ago

        If it were actual VMs, it would be a huge waste of resources. That’s really the purpose of containers. It’s functionally similar to running a separate VM specific to every application, except you’re not actually virtualizing an entire system like you are with a VM. Containers are actually very lightweight. So much so, that if you have 10 apps that all require database backends, it’s common practice to just run 10 separate database containers.

      • sugar_in_your_tea@sh.itjust.works
        link
        fedilink
        English
        arrow-up
        10
        ·
        1 day ago

        The main “wasted” resources here is storage space and maybe a bit of RAM, actual runtime overhead is very limited. It turns out, storage and RAM are some of the cheapest resources on a machine, and you probably won’t notice the extra storage or RAM usage.

        VMs are heavy, Docker containers are very light. You get most of the benefits of a VM with containers, without paying as high of a resource cost.

      • dustyData@lemmy.world
        link
        fedilink
        English
        arrow-up
        15
        ·
        1 day ago

        On the contrary. It relies on the premise of segregating binaries, config and data. But since it is only running one app, then it is a bare minimum version of it. Most containers systems include elements that also deduplicate common required binaries. So, the containers are usually very small and efficient. While a traditional system’s libraries could balloon to dozens of gigabytes, pieces of which are only used at a time by different software. Containers can be made headless and barebones very easily. Cutting the fat, and leaving only the most essential libraries. Fitting in very tiny and underpowered hardware applications without losing functionality or performance.

        Don’t be afraid of it, it’s like Lego but for software.

      • couch1potato@lemmy.dbzer0.com
        link
        fedilink
        English
        arrow-up
        7
        ·
        1 day ago

        I’ve had immich running in a VM as a snap distribution for almost a year now and the experience has been leaps and bounds easier than maintaining my own immich docker container. There have been so many breaking changes over the few years I’ve used it that it was just a headache. This snap version has been 100% hands off “it just works”.

        https://snapcraft.io/immich-distribution

        • AtariDump@lemmy.world
          link
          fedilink
          English
          arrow-up
          2
          ·
          1 day ago

          Interesting idea (snap over docker).

          I wonder, does using snap still give you the benefit of not having to maintain specific versions of 3rd party software?

          • couch1potato@lemmy.dbzer0.com
            link
            fedilink
            English
            arrow-up
            6
            ·
            1 day ago

            I don’t know too much about snap (I literally haven’t had to touch my immich setup) but as far as I remember when I set it up that was snap’s whole thing - it maintains and updates itself with minimal administrative oversight.

          • Colloidal@programming.dev
            link
            fedilink
            English
            arrow-up
            4
            ·
            1 day ago

            Snap is like Flatpak. So it will store and maintain as many versions of dependencies as your applications need. So it gives you that benefit by automating the work for you. The multiple versions still exist if your apps depend in different versions.

    • akilou@sh.itjust.works
      link
      fedilink
      English
      arrow-up
      4
      ·
      1 day ago

      But why can I “just install a program” on my windows machine or on my phone and it is that easy?

      • GnuLinuxDude@lemmy.ml
        link
        fedilink
        English
        arrow-up
        10
        ·
        23 hours ago

        You might notice that your Windows installation is like 30 gigabytes and there is a huge folder somewhere in the system path called WinSXS. Microsoft bends over backwards to provide you with basically all the versions of all the shared libs ever, resulting in a system that can run programs compiled from decades ago just fine.

        In Linux-land usually we just recompile all of the software from source. Sometimes it breaks because Glibc changed something. Or sometimes it breaks because (extremely rare) the kernel broke something. Linus considers breaking the userspace API one of the biggest no-nos in kernel development.

        Even so, depending on what you’re doing you can have a really old binary run on your Linux computer if the conditions are right. Windows just makes that surface area of “conditions being right” much larger.

        As for your phone, all the apps that get built and run for it must target some kind of specific API version (the amount of stuff you’re allowed to do is much more constrained). Android and iOS both basically provide compatibility for that stuff in a similar way that Windows does, but the story is much less chaotic than on Linux and Windows (and even macOS) where your phone app is not allowed to do that much, by comparison.

        • pressanykeynow@lemmy.world
          link
          fedilink
          English
          arrow-up
          3
          ·
          23 hours ago

          In Linux-land usually we just recompile all of the software from source

          That’s just incorrect. Apart from 3 guys who have no better things to do no one in “Linux-land” does that.

      • SirQuack@feddit.nl
        link
        fedilink
        English
        arrow-up
        3
        ·
        edit-2
        23 hours ago

        In case of phones, there’s less of a myriad of operating systems and libraries.

        A typical Android app is (eventually) Java with some bundled dependencies and ties in to known system endpoints (for stuff like notifications and rendering graphics).

        For windows these installers are usually responsible for getting the dependencies. Which is why some installers are enormous (and most installers of that size are web installers, so it looks smaller).

        Docker is more aimed at developers and server deployment, you don’t usually use docker for desktop applications. This is the area where you want to skip inconsistencies between environments, especially if these are hard to debug.

      • kieron115@startrek.website
        link
        fedilink
        English
        arrow-up
        2
        ·
        23 hours ago

        Caveat: I am not a programmer, just an enthusiast. Windows programs typically package all of the dependency libraries up with each individual program in the form of DLLs (dynamic link library). If two programs both require the same dependency they just both have a local copy in their directory.

    • I Cast Fist@programming.dev
      link
      fedilink
      English
      arrow-up
      3
      ·
      1 day ago

      So instead of having problems getting the fucking program to run, you have problems getting docker to properly build/run when you need it to.

      At work, I have one program that fails to build an image because of a 3rd party package who forgot to update their pgp signature; one that builds and runs, but for some reason gives a 404 error when I try to access it on localhost; one that whoever the fuck made it literally never ran it, because the Dockerfile was missing some 7 packages in the apt install line.

      • Nibodhika@lemmy.world
        link
        fedilink
        English
        arrow-up
        2
        ·
        16 hours ago

        There are two ends here, as a user and as a developer. As a user Docker images just work, so you solve almost every problem you’re having which would be your users having them and giving up on using your software.

        Then as a developer docker can get complicated, because you need to build a “system” from scratch to run your program. If you’re using an unstable 3d party package or missing packages it means that those problems would be happening in the deploy servers instead of your local machines, and each server would have its own set of problems due to which packages they didn’t have or had the wrong version, and in fixing that for your service you might be breaking other service already running there.

      • grue@lemmy.world
        link
        fedilink
        English
        arrow-up
        3
        ·
        edit-2
        24 hours ago

        Yeah, it’s another layer, and so there definitely is an https://xkcd.com/927/ aspect to it… but (at least in theory) only having problems getting Docker (1 program) to run is better than having problems getting N problems to run, right?

        (I’m pretty ambivalent about Docker myself, BTW.)

      • turmacar@lemmy.world
        link
        fedilink
        English
        arrow-up
        6
        ·
        1 day ago

        Building from source is always going to come with complications. That’s why most people don’t do it. A docker compose file that ‘just’ downloads the stable release from a repo and starts running is dramatically more simple than cross-referencing all your services to make sure there are no dependency conflicts.

        There’s an added layer of complexity under the hood to simplify the common use case.

  • Cenzorrll@lemmy.world
    link
    fedilink
    English
    arrow-up
    18
    ·
    1 day ago

    EDIT: Wow! thanks for all the detailed and super quick replies! I’ve been reading all the comments here and am concluding that (even though I am currently running only one service) it might be interesting to start using Docker to run all (future) services seperately on the server!

    This is pretty much what I’ve started doing. Containers have the wonderful benefit that if you don’t like it, you just delete it. If you install on bare metal (at least in Linux) you can end up with a lot of extra packages getting installed and configured that could affect your system in the future. With containers, all those specific extras are bundled together and removed at the same time without having any effect on your base system, so you’re always at your clean OS install.

    I will also add an irritation with docker containers as well, if you create something in a container that isn’t kept in a shared volume, it gets destroyed when starting the container again. The container you use keeps the maintainers setup, for instance I do occasional encoding of videos in a handbrake container, I can’t save any profiles I make within that container because it will get wiped next time I restart the container since it’s part of the container, not on any shared volume.

  • Black616Angel@discuss.tchncs.de
    link
    fedilink
    English
    arrow-up
    84
    ·
    2 days ago

    Please don’t call yourself stupid. The common internet slang for that is ELI5 or “explain [it] like I’m 5 [years old]”.

    I’ll also try to explain it:

    Docker is a way to run a program on your machine, but in a way that the developer of the program can control.
    It’s called containerization and the developer can make a package (or container) with an operating system and all the software they need and ship that directly to you.

    You then need the software docker (or podman, etc.) to run this container.

    Another advantage of containerization is that all changes stay inside the container except for directories you explicitly want to add to the container (called volumes).
    This way the software can’t destroy your system and you can’t accidentally destroy the software inside the container.

      • folekaule@lemmy.world
        link
        fedilink
        English
        arrow-up
        32
        ·
        1 day ago

        I know it’s ELI5, but this is a common misconception and will lead you astray. They do not have the same level of isolation, and they have very different purposes.

        For example, containers are disposable cattle. You don’t backup containers. You backup volumes and configuration, but not containers.

        Containers share the kernel with the host, so your container needs to be compatible with the host (though most dependencies are packaged with images).

        For self hosting maybe the difference doesn’t matter much, but there is a difference.

        • fishpen0@lemmy.world
          link
          fedilink
          English
          arrow-up
          12
          ·
          1 day ago

          A million times this. A major difference between the way most vms are run and most containers are run is:

          VMs write to their own internal disk, containers should be immutable and not be able to write to their internal filesystem

          You can have 100 identical containers running and if you are using your filesystem correctly only one copy of that container image is on your hard drive. You have have two nearly identical containers running and then only a small amount of the second container image (another layer) is wasting disk space

          Similarly containers and VMs use memory and cpu allocations differently and they run with extremely different security and networking scopes, but that requires even more explanation and is less relevant to self hosting unless you are trying to learn this to eventually get a job in it.

          • chunkystyles@sopuli.xyz
            link
            fedilink
            English
            arrow-up
            1
            ·
            20 hours ago

            containers should be immutable and not be able to write to their internal filesystem

            This doesn’t jive with my understanding. Containers cannot write to the image. The image is immutable. However, a running container can write to its filesystem, but those changes are ephemeral, and will disappear if the container stops.

            • fishpen0@lemmy.world
              link
              fedilink
              English
              arrow-up
              1
              ·
              19 hours ago

              This is why I said “most containers most of the time should”. It’s a bad practice to write to the inside of the container and a better practice to treat them as immutable. You can go as far as actively preventing them from writing to themselves when you build them or in certain container runtimes, but this is not usually how they work by default.

              Also a container that is stopped and restarted will not lose its internal changes in most runtimes. The container needs to be deleted and recreated from the image to do that

  • state_electrician@discuss.tchncs.de
    link
    fedilink
    English
    arrow-up
    12
    ·
    1 day ago

    Docker is a set of tools, that make it easier to work with some features of the Linux kernel. These kernel features allow several degrees of separating different processes from each other. For example, by default each Docker container you run will see its own file system, unable to interact (read: mess) with the original file system on the host or other Docker container. Each Docker container is in the end a single executable with all its dependencies bundled in an archive file, plus some Docker-related metadata.

  • echutaaa@sh.itjust.works
    link
    fedilink
    English
    arrow-up
    26
    ·
    2 days ago

    It’s a container service. Containers are similar to virtual machines but less separate from the host system. Docker excels in creating reproducible self contained environments for your applications. It’s not the simplest solution out there but once you understand the basics it is a very powerful tool for system reliability.