Welcome to Incremental Social! Learn more about this project here!
Check out lemmyverse to find more communities to join from here!

xlash123 ,
@xlash123@sh.itjust.works avatar

In simple terms, it's like a VM for an application. You set it up with the right dependencies and your application will "just work" on it, without having to deal with other applications existing alongside it.

What makes it better than a VM is that it is much faster. It interfaces with kernel features that help isolate the processes and files from the rest of the system. It is not virtualization, rather it is namespacing.

Docker also provides a bunch of tools that help with creating this environment automatically and allowing for some escaping into the host, such as binding ports and sharing data with the host's file system.

Once this environment is created, it can be shared with uses as a single downloadable bundle, called an image. This makes it really easy to download and run an application without having to prepare your system with the right dependencies and files.

Nothing is free though, and the cost here is more disk space and some performance overhead, although it is close to native speed.

Gooey0210 ,
  1. When you're prohibited from using nixos
  2. When there's no package for it in nixos, and you're lazy to package it yourself
rentar42 ,

https://lemmy.world/post/12995686 was a recent question and most of the answers will basically be duplicates of that.

One slight addition I want to add: "Docker" is just one implementation of "OCI containers". It's the one that broke through initially in the hype, but you can just as easily use any other (podman being a popular one) and basically all of the benefits that people ascribe to "docker" can be applied to.

So you might (as I do) have some dislike for docker (the product) and still enjoy running containers.

umbrella , (edited )
@umbrella@lemmy.ml avatar

its a container system that saves you from dealing with interactions between server software, config files scattered everywhere and is even more secure and more portable.

it helps you use 1 server for many services without issues, being able to redeploy a given service without issues whenever needed.

its a bit counter intuitive to learn, but makes it plain easier and almost maintenance free to run a server if you set up things right.

StrawberryPigtails ,

For me the advantage of Docker is that a random update to my system is unlikely to crash my self hosted services. It simplifies setting up the services as well but the biggest advantage is that it is generally more stable.

multicolorKnight ,

Two things, one you care about and one you might not. The one you care about: you can set up a service in isolation. You can then test it, make sure it works, and switch over to it once you are sure, with almost no downtime. This is important for things you actually need to use. Once you do something like breaking your primary email server, you will understand. Also, less important, you can set up a service on, say, a VM at home, and move it to a VPS, without having to transfer the entire image, and it will work the same.
The one you don't care about. That last bit about moving servers around is important for cloud providers who turn these things on and off all the time.

0p3r470r ,

My company deploys a lot of cell modems. Some of them support containers. It’s really nice to deploy everything we need in one piece of equipment, as opposed to 2 or more, for a very simple application.

Several other pieces of network equipment support it now as well. A SIEM can run a remote node directly on a switch.

hayalci ,

Check out this previous comment

https://lemmy.ml/comment/9168742

poVoq ,
@poVoq@slrpnk.net avatar
JVT038 ,
@JVT038@feddit.nl avatar

Docker is a container manager, but that doesn't say anything if you don't know what containers are.

Containers are basically isolated apps. For example, take something like Nextcloud. Nextcloud can run in a Docker container, which means that it runs in an isolated environment completely separated from the user's system.
If Nextcloud breaks, the user's server won't be affected at all, because it's running isolated.

Why is this useful? Well, it's useful because dependencies and such automatically update. Nextcloud for example, is dependent on PHP and if you install Nextcloud directly on your server, you'll need to ensure that PHP 8 has been installed and set up properly. If PHP (or the required PHP extensions) aren't properly installed, Nextcloud won't work. Or, maybe if there's a Nextcloud update that requires a new version of PHP (PHP 9 or 10 in the future), you'll have to manually update PHP to the newer version.

All that dependency management is completely gone with containers. The container itself automatically installs and sets up a proper environment for the app that's running. So in the case of Nextcloud, the PHP binaries, extensions, and all the other stuff is all automatically included without the developer having to do anything at all. Just run one command and your entire Nextcloud instance is automatically updated.

tal ,
@tal@lemmy.today avatar

Also, if server software running in a container gets compromised, hopefully the container can contain the compromise from spreading to the rest of the system.

JVT038 ,
@JVT038@feddit.nl avatar

Depends.

If there are no external volumes and the container is in its own network without any other containers, then any malware in the container shouldn't be able to reach / affect the host server, because it's isolated.

evranch ,

Even with external volumes, I don't think there should be any mechanism where a container can escape a bind mount to affect the rest of the host fs? I use bind mounts all the time, far more than docker volumes.

clay_pidgin ,

How does the container know what's safe to update? Nextcloud (in this example) may need to stay on a specific version of some package and updating everything would break it.

atzanteol ,

The Dockerfile used to build the container controls what is in the container. It's "infrastructure as code"-like. You create a script that builds the environment the application needs.

If you need a newer version of PHP you update the Dockerfile to include the new version. Then you publish the new container.

brewery ,

I only use docker images supplied by the devs themselves or community maintained (e.g. Linux server.io) so they essentially tell docker what needs to be installed in the container, not me. It takes the hassle out of trying to figure out what I need to do to get the service running. If they update their app, they'll probably know best what else needs to be updated and will do that in the image. I guess you are relying on them to keep everything updated but they are way more knowledgeable than me and if there is a vulnerability, it is only in that container and not your other services.

Decronym Bot , (edited )

Acronyms, initialisms, abbreviations, contractions, and other phrases which expand to something larger, that I've seen in this thread:

Fewer Letters More Letters
HTTP Hypertext Transfer Protocol, the Web
IP Internet Protocol
TCP Transmission Control Protocol, most often over IP
VPN Virtual Private Network
VPS Virtual Private Server (opposed to shared hosting)
k8s Kubernetes container management package
nginx Popular HTTP server

5 acronyms in this thread; the most compressed thread commented on today has 7 acronyms.

[Thread for this sub, first seen 17th Mar 2024, 20:35]
[FAQ] [Full list] [Contact] [Source code]

JoeCoT ,

So it's always going to be used for technical things, but not necessarily development things. I use it for both.

For my home server setup I have docker setup like this:

  1. A VPN docker container
  2. A transmission (bittorrent client) container, using the VPN's network
  3. An nginx (web server) container, which provides access to the transmission container
  4. A 3proxy socks proxy container, using the VPN's network
  5. A tor client container
  6. A 3proxy socks proxy container, using the tor container's network

Usually it's pretty hard to say "these specific programs and only these should run over my VPN". Docker makes that easy. I can just attach containers to the same network as my VPN container, and their traffic will all go over the VPN. And then with my socks proxies I can selectively put my browser traffic over either the VPN or Tor, using extensions like FoxyProxy. I watch wrestling through my vpn because it's cheaper overseas and has better streaming options, so I have those specific sites set to route through my VPN socks proxy. And I have all onion links set to go through my Tor proxy.

Amongussussyballs100 OP ,
@Amongussussyballs100@sh.itjust.works avatar

This looks like an interesting project. Can the vpn container only route traffic that are in other containers, or can regular applications get their traffic routed by the vpn container too?

JoeCoT ,

I don't know of a good way to route other application's traffic through the VPN container with them being in docker containers, unless you use some intermediary setup. That's why I have socks proxies routed through the VPN, so I can selectively put traffic through it. If the app supports a socks proxy you could do it that way. At the least you could use Proxychains to do so if the program does TCP networking.

clmbmb , (edited )

The answer is yes in both cases.

  1. Docker has an internal networking setup. You can create a "network" and all containers in that network communicate with each other, but not with other containers in other networks. So you can set up a VPN container in a network and all containers in that netowrk could use the VPN to route their traffic through.
  2. You can configure your VPN container to expose some ports that it uses to communicate, and then the "regular applications" can make use of those ports to connect through the VPN.
CTDummy ,

Docker is great because you can install something and all the shit it needs is installed and runs in that container. It’s good for a multitude of reasons mine are:

  1. No more installing a dependency, tool or library alongside a program that fucks up something else. No more shit breaking because you installed the latest python but some other program breaks if you move beyond 3.10 (and you forgot to use venv I guess).
  2. Somewhat a follow on from 1 but this makes for great functionality with self hosting. I can run a couple docker compose/build command and build/rebuild the containers anywhere I need them. I can test a container on a windows computer to see if it does what I want and works as intended and then spin the some container up on my media server, even if it’s a different OS. I have a bunch of them on my home server and it and it’s great being able to just plug in the port number of the other containers they need to talk to, if any, and that’s all. One container breaking doesn’t break everything else.
TCB13 ,
@TCB13@lemmy.world avatar

To bloat things, to lower the bar to newcomers, to appease the business goals of large cloud companies and eventually to provide some isolation, security and create stateless environments: https://lemmy.world/comment/8341439

muddybulldog ,

“The thing with Docker is that people don't want to learn how to use Linux and are buying into an overhyped solution”

I stopped there. Thirty years of LINUX experience here. You’re a fool.

TCB13 ,
@TCB13@lemmy.world avatar

Just look at landscape around here and other "selfhosting" boards and you'll see what I'm saying.

muddybulldog ,

I won’t, because I stopped there.

TCB13 ,
@TCB13@lemmy.world avatar

Your choice, you're the one believing that 100% of the people using Docker are as proficient and you and me and use it the right reasons. Guess what, they don't.

muddybulldog ,

Are you clairvoyant? I’m curious as to how you are aware of what I believe, beyond what I stated; that you’re a fool.

bjorney ,

"how dare they use the right tool for the job without taking the time to learn how to do it sub optimally first"

atzanteol ,

Your choice, you're the one believing that 100% of the people... Blah blah blah

Didn't be shitty. Telling somebody what they believe is shitty. Telling them they believe "100% of people do (anything)" is super shitty. And this whole shitty argument has nothing to do with docker.

Go be shitty elsewhere.

atzanteol ,

I read a bit further. You didn't miss anything important.

sabreW4K3 ,
@sabreW4K3@lazysoci.al avatar

The thing with self hosting is that you want in most cases, to set and forget and that means you want as little going wrong as possible. To ensure that, you need to find a way that other things can't fuck with what you're hosting. This is called a container. The trade off is disk space, but that's okay because it's a server, unlike on a computer, but let me not start my rant about the stupidity of Snap and Flatpak. Anyway... Thanks to containers, you don't have any external factors and basically everything runs in its own world. Which means you can always delete, restore and edit without anything else being affected.

  • All
  • Subscribed
  • Moderated
  • Favorites
  • selfhosted@lemmy.world
  • random
  • incremental_games
  • meta
  • All magazines