Approaching Docker, Containers, and Compose for curious Self-hosters
S01:E01

Approaching Docker, Containers, and Compose for curious Self-hosters

SF, CA

Episode description

This is a bonus Linux Prepper podcast, available as a detailed companion to “A Great Year for Linux”. This is a discussion with HB, stemming from this post on Lemmy learning from admins who avoid container technology. We discuss our experiences with containers, who they are for, and the contexts in which we find them useful. If you are self-hosting, and are container curious, this one is for you!

(00:00)

Welcome to Linux Prepper Podcast

(00:19)

Bonus episode connected to Season 1 Episode 1: A Great Year for Linux. Time to get technical!

(01:29)

This discussion will not cover Permissions, File Systems, or Backups.

(02:32)

Lemmy Discussion - What is keeping people away from Containers

(02:47)

Ameridroid Sponsor: LINUXPREPPER code

(03:16)

What are Containers for?

(04:05)

HB describes making a text adventure game (in Docker)

(04:42)

MagPi Magazine

(05:09)

TTYD: Share your Terminal on the Web

(06:12)

Why containerize TTYD?

(07:05)

Managing multiple iterations through containers

(07:47)

Use of containers, as opposed to Python virtual environments

(08:53)

When does it make sense for someone to consider containers?

(10:30)

Docker run commands. similar to bash scripting

(12:30)

Compose Files, migrating from docker run commands

(13:03)

Portainer - WebUI Management for Docker services (HB)

(13:16)

docker ps - Management from the terminal (James)

(13:34)

James using Docker to test for NextcloudPi and write documentation

(14:41)

Using containers in order to define your own image

(15:50)

Running a fleet of AI services through Compose: “Ultimate Bacon Cheeseburger”

(17:17)

James migrating to Compose files to manage variables across many services

(18:54)

Composerize - Turn run commands into compose files

(18:58)

Storing compose files to avoid confusion

(20:21)

Noisebridge Unicorn services run via compose files on a VPS

(26:34)

Docker Networks - connecting services internally, even to a reverse proxy

(27:46)

Aria Download Protocol

(28:04)

HB describes using multiple, simulateous networks in isolation

(30:00)

James describes complexity of modular tools like Nextcloud

(31:37)

Testing Locally

(32:30)

People leaking their private credentials in their Docker images on the web

(33:09)

Docker Secrets

(33:42)

HB suggests storing environment variables as files

(34:52)

Understanding git.ignore files for people hosting files on public repos

(35:32)

Using public sharing to learn, share and problem solve

(36:31)

Lemmy comments of those opting out of containers

(38:03)

There is nothing wrong with running services directly, aka “bare metal”

(43:20)

HB’s Github

This podcast contains extra episodes, only available to premium subscribers.

Unlock Subscribe
Download transcript (.srt)
0:00

Welcome back to Linux Prepper Podcast.

0:04

Please enjoy this bonus episode on a great year in Linux.

0:07

Hb and I will deep dive into containers, things like Docker, specifically who are they

0:13

for and who are they not for.

0:16

So if you're a home enthusiast, thinking about containers and now you can enjoy that talk.

0:21

And if you have any thoughts, please do send them in the show, podcast@livingcartoon.org,

0:26

or you can join discuss.james.network.

0:30

I wanna give a little precursor for this

0:33

because you should understand if you're interested

0:35

in containers, then you are someone who is interested

0:39

in self-hosting your own services,

0:42

be it at home or otherwise.

0:43

Maybe you already do.

0:45

That's great.

0:46

And you're curious how containers may help your existing setup.

0:51

So if that's the case, this episode was made for you.

0:54

And we're focusing on Docker, which is just an industry standard thing.

0:58

But it applies what we're talking about with containers,

1:02

and turning those containers and run commands into

1:05

a Compose File structure.

1:07

This can be applied to Pod, Man, or any other iteration of container virtualization type

1:11

of technologies.

1:13

So who this is for is for the self-hosters and the DIYers.

1:17

Anyone running a service, I mean, want to understand how containers could apply to them.

1:23

What this talk will not teach you, which you must understand in terms of running services

1:29

in general, but also containers, is file system structure, how to have proper backups, and

1:37

most importantly, how to manage file permissions.

1:41

Because whether you're in a container or not, at some point you will need to have a very

1:46

just basic solid understanding of permissions and how they apply to yourself as well as

1:52

any other user using your services or however you choose to run your system.

2:00

So that said, if you're running your own services and you're curious about how containers might help you

2:09

What basic containers are what compose files are or

2:16

Examples of how to these can apply and scale across numbers of different services because that's where it gets really exciting

2:23

And please do send in your feedback podcast at living cartoon.org and share this if you find it useful

2:28

Really really hope it gives you a nice back and forth discussion take on how containers could be applicable to you.

2:34

And we'll also have links to the let me discussions

2:37

where we asked users not interested in containers

2:40

about why that is.

2:42

So yeah, thanks so much for listening and enjoy.

2:45

Ameriadroid.com is the sponsor of Linux Pepper Podcast. They are the U.S.

2:50

based distributor of single-board computers and home automation products for companies like

2:54

HardColonel who produce O Droid and other single-board computers.

2:58

It saves you the hassle of having to order overseas and you also have a friendly customer service.

3:03

Call them on the phone. They have global shipping options and we are proud to have them sponsor the show.

3:07

You can use Linux Prepper at checkout or I'll include some links to some of my favorite products.

3:12

I'm big thank you to america droid.com.

3:15

So what are containers and what do they do?

3:20

Containers are just giving you a reproducible build of the whole software package.

3:26

It's making it so you can define what is ephemeral and what actually lives on the file

3:31

system.

3:32

What lives on the file system is called mounts.

3:34

It's been called volumes.

3:36

You're setting locations on the file system where data actually lives.

3:40

Everything else is ephemeral and can come and go.

3:43

The software that you don't really care about,

3:45

that's running the actual service that you'll, you know,

3:48

replace or update or whatever.

3:50

And it's a really useful way to set something up

3:52

and also blow it away at a moment's notice and replace it,

3:56

while having the exact directory of data as you want

3:58

to continue to live where you expect them to be accessed.

4:02

I asked HB for an example. tell me about your text adventure game. Yeah, so this text adventure game which is called mermaids a

4:12

secret journey

4:16

Was inspired actually by my daughter so

4:19

We've been working on it for a little while, but basically she had these sketches that she made for me. And as you know, James, you know, I've been doing ANSI art for a long time. I fired

4:29

up Dura Dura, which is a great editor, but it does a lot more than that. So I've been drawing

4:34

up the scenes for that with Dura Dura and I actually had a, you know, magpie magazine, if

4:41

you guys aren't familiar with that, that's a Raspberry Pi magazine. 2017, man. Pretty old. And you know, I was looking through it and there's this text adventure

4:51

guide, you know. It's a pretty minimal one. What I have now is as much more advanced. It just kind of

4:56

reminded me of the fact that I wanted to do that. And I went ahead and got started on it. I'm

5:01

actually done with the first level. There's still some things that I got to figure out but it worked really well. I'm going to migrate

5:08

to a different shelf system because actually I'm able to do

5:12

TTID. I don't know if folks are familiar with that. I can't really

5:16

adjust too much. So with TTID at least I was able to get a basic web

5:22

server, kind of like a wrapper to help the shell run like a normal

5:26

game.

5:27

So now it's centered in the screen.

5:29

It's a lot larger.

5:30

The art is, you know, populating correctly.

5:33

I've got that in a darker container and, you know, I find it pretty ideal for something

5:38

like this.

5:39

You know, I'm developing it locally.

5:41

I don't want to have to buy it VPS to work with it.

5:44

I have space on other servers in my

5:47

apartment, but of course those, you can take a lot more energy. Then I would like, especially for

5:53

something like this, so I can basically build my own images, round them with Docker compose,

6:00

see how they're doing, make changes, restart the container, and see things

6:06

pretty immediately, which is nice, especially something like this like a

6:10

text adventure game, you kind of have to tinker with it a lot to get it to work.

6:14

Like what does it fix? Going to the containerized T2ID solves for you working on

6:21

the game. And for me, you know, just kind of systemizing it a little bit or systemizing it or other,

6:28

so that I can be guaranteed the image is always going to be the same, right?

6:32

And if I have to rebuild the image, it doesn't take a long time to do.

6:36

I'm almost done with the first level and pretty much start building another image at that point.

6:42

I can shoot it to Docker Hub, in case people want to try it.

6:46

I haven't pushed it to GitHub yet, but I do have it set up for Git right now.

6:51

So I'm still getting all the versioning and everything.

6:53

It just makes it easier for me to test things.

6:56

And I can kind of think that's one of the big reasons why I started to like Docker a lot.

7:00

And as part of developing it, do you find yourself running like a number of different iterations of it via containers at a given time?

7:07

Yeah, I mean, I'm changing it all the time, but the thing that makes it easy.

7:11

I mean, as you know, with Docker compose, you know, basically just have to restart the container

7:16

as I'm going along.

7:18

So I'm working on the Python code.

7:20

If I need to make a change, I can rebuild the image pretty fast because it's some minimal.

7:24

I mean, there's really not anything in there except for T2ID.

7:28

I did my best to kind of avoid too many dependencies if I could.

7:33

So I didn't import a lot of libraries.

7:35

It's a really simple game anyway.

7:37

So it's mostly text and since it's shell, I mean, it's pretty basic on its own.

7:43

Doesn't Python already offer some virtualization options with virtual environments and such?

7:48

Do you like, is that kind of redundant in terms of Docker as well? Or is it just something

7:53

you're more comfortable with? Or can you speak to that?

7:56

Well, it could be redundant in that sense, but I don't really have to virtualize it inside

8:00

the Docker container. But while I'm testing it, you know, keeping my system clean is important to me

8:06

'cause it can get really messy after a while.

8:09

So I am comfortable with using virtual environments

8:13

with Python now, as far as like staying organized,

8:16

not corrupting my system in any way.

8:18

I don't wanna have a bunch of stuff going on,

8:21

getting installed globally, this causing conflicts.

8:24

It's in a similar way, you know, I mean, virtualizing something like that

8:27

in a virtual environment.

8:28

I'm not going to say it's the same because someone will beat me up.

8:30

Definitely the philosophy is similar to kind of keep things contained

8:35

organized and to avoid conflicts, minimize dependencies.

8:40

Yeah, all those things that think are great.

8:42

Obviously you have this project, which is great.

8:44

When does it make sense for someone to try out containers?

8:47

I was running everything on bare metal for a long time,

8:50

and partly I was kind of intimidated by Docker in a lot of ways,

8:54

because I don't really understand it.

8:55

I watched a lot of videos on YouTube about it,

8:57

and started to understand it's not that confusing.

9:00

It's not that complex.

9:01

Everybody can give it a shot at least, but I think it's the right

9:05

time. There's no real penalty for trying, you know, containers. For me, I just thinking about

9:12

the bare metal days. Like, I know some people prefer that and I understand that there was a time

9:16

when I did as well, but I can think of at least one situation where I'm running a VPS paying for the VPS, it's not anywhere near where I'm at,

9:27

so the lag time is already bad.

9:29

And I'm running a program bare metal

9:32

that's having a lot of issues,

9:34

and I have to restart the VPS over and over

9:37

to get it to run correctly,

9:41

and that kind of troubleshooting to me.

9:43

I mean, even as someone who does this for you know I don't work for a tech company I can honestly say

9:50

that moving to containers allowed me to run services on very minimal

9:56

hardware so I've got an Intel Nick for example that's just sitting on my

10:01

fireplace and that was my first real server in the house.

10:08

And having that was able to, you know, spin up or tainer and manage my containers and run all kinds

10:15

of services, try them out. If I didn't like them, I could just nuke them pretty easily. So that was,

10:21

I think one of the first times that I really started to try it out was mostly

10:25

as a learning thing.

10:26

And I think that that's probably one of the better things.

10:28

If people are working professionally in the tech field, it's just something you're going

10:32

to have to know whether you like it or not.

10:34

I hate to say that with that's probably the truth.

10:36

Yeah, that's fair.

10:37

I guess my other, then my question to you in terms of that too is if you're running containers,

10:43

you know, in Docker or in

10:45

Cloudman, it doesn't matter. There's the option to basically run a container. So

10:51

you, you get a Docker file, we'll say, onto the file system, and then you

10:58

execute that with a Docker run command or with a compose file, either one, and then the service will start up. So let's

11:08

say you're running like a Calibre web, the ebook tool. So you run it. It doesn't matter if it's on

11:16

arm or you have to get supported. It spins up and then you get this service running on your local

11:22

host domain on your local network that you can play around with.

11:26

And do you think when someone does that,

11:29

that it's better to use a compose file versus a run command?

11:33

Or I'm just curious what you think in terms of using a tool

11:37

like pertainer for management.

11:39

How do you recommend that for someone,

11:41

especially getting started?

11:43

- You know, I would recommend that they understand how Docker run works.

11:47

To me, it feels a lot like Bash scripting is pretty similar.

11:52

But I would say that for me anyway, Docker compose is a lot cleaner way to do it.

11:59

I'm just going to say that primarily, you know, I like to keep myself organized, so I have a folder on whatever system I'm working with that has all the Docker compose files, any data or whatever is in the same container as the Docker compose file related to that service. And especially just being able to restart containers pretty easily.

12:25

It's just really a nice thing to be able to do.

12:28

So I feel like Docker compose, it's a little intimidating to people.

12:31

And you know at first because YAML is a bit picky sometimes

12:35

about syntax and things like that and then somewhat not,

12:38

you know, I could probably send you a Docker compose

12:40

follow right now, for example,

12:43

when it has everything set up and you could reproduce the setup that I have, that's that's pretty amazing to me. So yeah, I always

12:51

offer the cleaner option just because I like to keep track of where things are, you know,

12:57

what they're dealing and kind of an extension of what I said about, you know, using pertainer,

13:03

not that that's the only one that you can use to monitor stuff. Certainly it's nice to be able to see, "Oh, this container

13:09

is down. Why? I can restart it now and see what's going on." Or I can check the logs immediately

13:14

in this UI. Convenient features like that, it's pretty nice to be able to do that just for

13:20

the sake of being able to read something instead of looking at it in a terminal and it's like 200

13:26

lines of log files. That's just how I feel about it. Yeah, definitely. Yeah, so for me personally,

13:37

I really embraced Docker some years ago in testing for next cloud pi,

13:45

which I'm running, like was running,

13:47

I think on a version of only unlike a pi too

13:49

or something like that.

13:50

And I was running it and I was kind of turned off

13:55

by the regular image, which of it's what people would

13:58

normally use like this all in one image,

14:00

Debian system that you would install on the device, right?

14:03

Covering the whole length of the device, but I was doing testing.

14:08

So I wanted to be able, the ability to start and stop it a lot and try different

14:12

iterations, because I was trying to write documentation and such.

14:15

So because of that, I moved to Docker for the same reason,

14:19

even on a low level device, like, yeah, I worked fine to have not only my

14:24

production instance, but then

14:26

little testing instances that I could spin up to test updates and things like that and

14:31

provide documentation and file GitHub issues. And that worked really well for me, even

14:36

as the hardware changed, kept using these Docker images and just migrating them over.

14:41

When you mentioned having to deal with a full- a demo image. I think that's one of the appeals of using

14:49

darker and first place is that you get to choose what's on the image. You can

14:53

use Alpine, something that's incredibly minimal to run an application. The

14:58

performance of it will be very noticeable. At least to me, I've run a bunch of

15:03

these things over the last years and it's just unreal

15:06

how fast something will come up.

15:08

But also, that kind of flexibility, like you said, right?

15:11

You don't wanna deal with this huge, W-image.

15:14

So I have an example of this.

15:15

It's actually on my Docker Hub.

15:17

Right now, come for UI is an AI program

15:20

that I've been using a lot lately.

15:22

It's for images, so their AI generated images,

15:26

and it's really an amazing piece of software, to be honest.

15:30

I mean, I don't work for them or anything,

15:31

but I think that their stuff is really great.

15:33

But anyway, I checked the repository,

15:35

and I put it on my computer,

15:37

and I built a Docker image around that

15:39

so that I could use that in a stack that I was building

15:42

for AI, which is called the ultimate bacon cheeseburger stack.

15:49

And essentially it's a bunch of AI services that I like to use. So I didn't have an image,

15:55

which is the point here. I didn't have an image that I could use for Docker for comfy UI.

16:00

So I did go ahead and just build one and work just fine actually you know work to

16:05

love better for me because you know if I go and run Docker compose down and

16:08

Docker goes up for some other reason right it's working just fine every time

16:14

and that's pretty great and also I was able to have those folders you know we

16:19

talked about mounts and things like that we're all my images that I

16:23

generated they're stored right on my computer. Of course I could do that with their Python program as well, but to me it's just a lot

16:29

cleaner like I said I favor that. I'm sure Model context protocol, things like that who've been

16:35

pretty popular lately. I was able to build my own MCP image, LLM stuff I was doing, and integrate

16:43

that with OpenWebUI and my Obsidian Notes which

16:46

there actually wasn't a real clear tutorial for that anywhere but I was able to actually

16:52

get it working just kind of shocker but those are the kind of things I would like to

16:58

highlight at least is that you have the ability to kind of take these open source repose

17:03

and make your own images.

17:06

That can be really useful for a lot of reasons.

17:09

Yeah, definitely.

17:10

Your reminding me, too, I'm reminded of why I migrated to compose files.

17:15

And I realized that there's two different reasons, which you also connect into.

17:19

So one is running Docker run is also to me to not feel clean because I would be like,

17:27

what did I do?

17:28

And so I would export my history, my bash history into a file so I could look at it later.

17:34

And that felt weird.

17:35

I mean, I still do it, but I wanted to be really clear of like how I'd run Docker.

17:42

And I guess when you run Docker at like the simplest level, what you're doing is

17:47

you're doing Docker run and then you're defining some variables. So you're defining like

17:54

environment variables, possibly, let's say your time zone permissions and the

18:01

amount location where the data lives as a command and you type that out along with what image you're using.

18:08

So say it's kalee berry web slash kalee berry web,

18:12

connected to their GitHub or something.

18:13

And then the service spins up from there.

18:17

And so let's say something changes,

18:19

the image location changes, anything changes,

18:21

and you're trying to update it over in the future.

18:24

For me, I got confused, 'cause I was like, what command did I run?

18:27

And so then I'm going back through the history and I'm like, this is awkward.

18:30

And I thought, I don't want to do it this way.

18:33

So because of that, and we're over to compose, and compose is just a composed.yaml file.

18:39

And it's the same basic thing.

18:42

You're executing a command.

18:43

It's just broken out syntactically. It's the same basic thing. You're executing a command. It's just broken out syntactically.

18:46

It's the same command and there's a great tool that I've liked over the years called composerized.

18:51

It's a website and you just throw around command and it turns it into a compose file.

18:56

And then what you end up doing, I feel like this is what you end up doing in Docker anyway,

19:00

the beauty of Docker is you can edit things. So the Compose file, you can edit the Compose file,

19:06

and then you just have your directory on the file system.

19:09

Let's say, home/myuser/compose,

19:14

and each time you have a new Compose file, for me anyway,

19:17

I just make a subdirectory, call it, you know,

19:19

"Colybrae web," and that, and make my Compose.yaml.

19:23

And that's where I paste the same basic thing.

19:26

It's just instead of Docker run,

19:28

it has it laid out line by line of saying,

19:33

these are my environment variables.

19:34

This is my time zone.

19:35

This is the image I'm using.

19:37

This is the version you can be as specific as you want.

19:40

But also, this is where the data lives.

19:43

And that way, anytime I'm confused, I can go back to that exact file and if I iterate on that file I can always back it up

19:50

so I can do like a

19:52

backup of my compost file as is which I always do before I edit it and make any changes because like you said if you edit a

19:59

Compose file and it fails. It's very binary. It's like it didn't work

20:03

And then you might have to just go back to what you had written there before or whatever,

20:07

but it makes it really easy to keep track of what the heck you're doing and to

20:11

iterate in that way. So once I changed to compose files, I was just for testing

20:16

next CloudPy even. I've never gone back and it scales really easily too. And

20:22

where that connects is you and I worked on services for noise bridge together.

20:26

And that was all done in shared compost files connected to a reverse proxy on a VPS.

20:32

And that were great. And there was like what? Half dozen people dinking around on it at a time.

20:37

And it worked really well. Right? We just paid for a VPS up front for a few years.

20:42

And everyone edited it together using using compost files and worked great.

20:46

So it definitely is like, I would not want to run Docker run commands, you know, and like

20:51

any kind of shared environment or even for myself.

20:54

So yeah, the fine compost files super duper helpful personally.

20:58

Yeah, we're on the same page for that exactly because it's just being able to find what you put in the in the

21:06

YAML file is a huge benefit over you know Docker run where you're checking your history

21:12

is exactly what I was doing like hey what did I do and then running Docker PS is this thing even

21:17

up you know trying to figure things out it's a little bit more tedious than it needs to be

21:25

you know having a Docker compose file,

21:27

you see people post them all the time.

21:28

There's awesome Docker compose, for example,

21:31

on GitHub and you can just see other people's files

21:36

and try them out.

21:37

I mean, that's just really cool that you can do that.

21:40

- And it just makes it easier to understand

21:43

what's happening within the container.

21:45

It just takes a moment to wrap your brain around and it does because it's like living

21:50

in the matrix or something.

21:52

Like you're spinning up on a femoral container within your system.

21:57

And so it's a femoral container within your system.

22:01

It's there.

22:02

But for example, you might have to issue a command through

22:05

Docker in order to issue a command directly within that

22:09

container.

22:10

If you wanted to do something to it in the femoral state,

22:14

you could enter it with exec, hyphen, IT, and you could do a

22:20

bin bash session and actually go inside the container. If for some reason you wanted to do that and you wanted to enter the container, you could do a bin bash session and actually go inside the container.

22:25

If for some reason you wanted to do that

22:27

and you wanted to enter the container, you could.

22:29

And I think that idea is something

22:32

that people find very confusing.

22:34

You can totally do it.

22:36

But end of the day, what you want is,

22:39

is you want to control things previous to that

22:42

at the like the compose at the run level of executing

22:47

the container and having it already in the state that you want.

22:51

If that makes sense.

22:53

So it's it's giving you flexibility in how you mess with a service and the more you

22:58

iterate on something to my to my opinion, the more useful containers become.

23:03

Yeah, absolutely.

23:04

I don't always use them.

23:05

I just wrote a, I think I mentioned to you,

23:09

I wrote a video rendering program,

23:12

and that's just very Python in a folder.

23:16

Lessially it's on GitHub too.

23:18

I have a feeling you need to containerize that one.

23:20

So I think there's sometimes where it's,

23:22

maybe you just don't need to do it.

23:24

Certainly for web applications and other services it's like really nice to have something

23:30

that's lean. Like I mentioned, a lot of my first services that I ran were running on

23:35

it until Nook does not have that many resources. But because of the fact that I'm very

23:41

using very minimal container images.

23:45

I may able to actually get a lot of work done on it.

23:48

Kind of surprising to be honest.

23:50

Like I didn't think that it would be able to handle it,

23:52

but it's been doing fine.

23:54

I've had zero downtime in the last couple of months

23:58

and I haven't had to do a lot of work to maintain that.

24:00

So it's pretty nice.

24:01

- Yeah, totally.

24:02

In a similar vein, like I've had my compose files running

24:06

for number of years and they just keep going, you know?

24:10

And I have them set to auto restart,

24:12

unless I personally shut them down.

24:14

They just bought back up.

24:15

So if the power goes off and the power comes back on,

24:18

they just spin back up again and continue on as normal.

24:21

When I'm using doc or because I have

24:25

composed files and I have clear notes to of what I've

24:30

what I've changed, what I've done, I can review those even the

24:34

composed files themselves and I know what the service is. Like I

24:38

know the it or like what version of the software I'm running, I

24:41

know where the data lives. So I can get access to it when I need

24:45

it. And I can pick up where I left off. And so for me, I haven't actually needed any

24:51

kind of further maintenance tool. So I tried Portainer, for example, and I don't, I don't

24:57

need it because I can just look at the compose file or I just execute Docker PSA. and that tells me what services are running or the

25:07

last time they were offline.

25:09

And that gives me enough information to know if something's wrong.

25:13

So all I need to do is use the basic, you know, bare bones command, the PS command to list

25:20

what's running and what's not, and I know what's wrong with the system.

25:24

And I don't need any further real monitoring beyond that because everything just continues in a functional state.

25:30

So this is nothing about Docker that, yeah, I love. Oh, and so when I recorded with Rob and Robin mentioned,

25:37

Kalibri Web is added a bunch of new AI features and he's frustrated about it, but I realized I haven't updated my Cali Bray web in some time,

25:46

so that hasn't happened to me yet.

25:48

I haven't encountered any of that.

25:51

But the tool is also running fine.

25:53

So that's why I just kind of didn't think about updating it,

25:55

because I'm just running it internally.

25:57

But I like that about Docker.

26:00

>> There's a lot of stability in that,

26:03

and like you mentioned, if there are features that people don't like, there's always that version of the image that can be reproduced,

26:12

especially like when I mentioned the comfy UI image that I made, there's nothing on there that I don't like.

26:20

But it's stable, it works, it's been working. It's not the newest version either,

26:25

you know, but it works. So, you know, I can go and pull from the repository again, build a new

26:32

image and have their latest image if I want or I cannot do it, you know, because the thing with the

26:38

Docker is that you have all the code in a working state, it's reproducible. So you do have that benefit for sure. And I think

26:49

that's a big one. Yeah, that's a big one. And another big one just to put it in perspective too,

26:55

if like experimenting with services is a really easy way, common way to use something like Docker is you spin up a container.

27:05

As part of that, you can assign a basically virtualized network within Docker.

27:12

Let's say we call it my big network.

27:16

You can attach my big network to multiple containers,

27:20

which can include things like reverse proxy or whatever.

27:24

That way, you can connect all your services

27:27

that you've defined together into the same network

27:30

automatically like they can see each other,

27:32

which is so useful.

27:34

These are ways these tools are so useful.

27:35

It's like I want the data in this directory,

27:38

let's say in my Jellyfin server,

27:41

I want that to be seen by my ARIA downloader app,

27:45

which is downloading files, you know,

27:47

I want to watch into that directory.

27:50

And I want both of these programs accessible to a reverse proxy,

27:55

and it's like boom, it's done.

27:57

So the way you can connect any number of services together

28:00

within containers is awesome.

28:02

Because if you can do a three, you can do it with 30.

28:05

And that part of it is really cool too.

28:08

And that's something where I am not sure, I'm not as comfortable doing that without containers

28:13

personally because I can do so many iterations across any number of containers, which is

28:19

super handy.

28:22

All even within the same compost bottle if I want.

28:25

Yeah, absolutely. The AI stack that I mentioned is all on a network called AI

28:31

Net. And so I know that, you know, those those containers are all able to talk to

28:38

each other, which they do actually have to do. So the MCP container, for

28:42

example, has to be able to reach the open web UI and

28:46

comfy also has to be able to reach open web UI and

28:50

There's some other stuff on there that needs to reach other you know other services

28:55

So that's another way to keep things neat as to have those networks isolated

29:02

You know and certainly you know I have other virtual networks as well

29:08

for other services.

29:09

So it's just all together, you know,

29:12

nice to be able to tie things together

29:14

and kind of, you know, reminds me also

29:17

with working with some larger stacks and composites

29:20

just kind of crazy that you can bring, you know,

29:22

all these services up and down,

29:24

matter of, you know, seconds sometimes.

29:28

- Absolutely.

29:29

Another thing that I've noted personally

29:32

in running containers coming from Next Cloud Pi,

29:35

especially, is like a tool like Next Cloud,

29:38

which has so many different components, right?

29:41

It's got the web server, the database,

29:43

all these different parts.

29:44

That's basically the most complicated thing

29:46

you could possibly run.

29:48

And most things are much, much simpler

29:51

in terms of what is required as far as different components.

29:55

And so I've actually, what I've found is it's easier

29:59

to run 40 random services than it is to run something

30:03

like next cloud that has so many needs.

30:06

In terms of how it's set up,

30:09

it has so many configuration things,

30:11

which is why Next Cloud Pyxis,

30:12

that offers the whole Debian stack as part of it.

30:16

It's just so complex, but in general,

30:19

I found containers are very, very simple,

30:22

and I like that about it.

30:24

It's a lot to wrap your head around,

30:26

I think, like in terms of abstracting a hardware layer into software, but it's also not,

30:33

it's not a horribly scary thing. And I think if you're starting with something like

30:37

NetCloud, you're making it as hard as it could basically be. And if you try other tools that are simpler, it's pretty painless.

30:46

Yeah, I mean, I can think of at least one service that would be nice one for people to

30:51

test is etherpad. It's probably the most painless thing to set up. It's pretty much ready

30:58

to go as soon as you put the container up, it really says my my experience anyway.

31:05

So that one's pretty simple.

31:07

- Yeah, totally.

31:08

Like you just can basically spin up the service

31:11

on local host and then just access it

31:15

on your local network, you know, with IP address

31:19

and maybe a port number and that's it.

31:21

And then because you're using a container,

31:24

you can also redefine things

31:26

like what the port number is, which is also very useful directly in the container. You could be like,

31:31

oh, this for some reason, this port's not available. I'm going to write my own. And I think this

31:36

is where containers become so useful is like, you can define something that makes sense to you

31:41

personally. And it doesn't have to make sense to like the broader world. It's nice. Testing locally too is really, and you know,

31:50

fun thing to be able to do because there's so little pressure and I think even

31:54

with Docker makes it even better because, you know, like you said, it's a lot of it is ephemeral,

31:59

you know, you can change the image however you want. If you write some new code, you can update the image and try it again.

32:09

You can test it on your local network.

32:11

You could even have people that are on your local network, test it out too.

32:15

They want to try it.

32:17

It's pretty ideal.

32:20

You don't have to send something out into a larger web just to try it or whatever.

32:26

Just makes a lot more sense.

32:28

Listing in S issues.

32:31

- Interesting note, I'll try to find the article to add in here,

32:35

but I saw that there was recently,

32:37

I don't know if it was basically,

32:39

there was a look over of all the different images

32:41

that have been posted related to containers.

32:44

And so many of them include like personal information that shouldn't be listed.

32:49

People defining basically passwords and things like as variables in their image and then

32:55

posting that to GitHub or whatever.

32:57

It's interesting.

32:58

Apparently there was like many of them, like tens of thousands or more images that were

33:02

leaking credentials.

33:03

Yeah, that's definitely a problem.

33:06

Docker has secrets.

33:08

If you aren't aware of that, you can go to the documentation and look at that or just something as simple as using an

33:15

.env file, or just being aware of the fact that you shouldn't be putting passwords in your,

33:22

especially in your GitHub repositories.

33:26

There's lots of ways to protect your information

33:29

and you should definitely be doing that

33:31

because guess what hackers are looking for that stuff

33:33

on the repos.

33:35

There's specific, I'm just gonna do a security

33:38

preachy bit here.

33:40

(laughs)

33:41

There's plenty of Google Docs that are specifically

33:44

for looking for credentials on GitHub.

33:47

Yeah, absolutely. And what HB is referring to is anything that you type into Docker when you're

33:55

say when you're running a command, there's no reason that you actually have to keep

34:00

right, like reiterating the same information. For example, like, it doesn't have to just be a password or something.

34:06

It could be like your time zone.

34:08

You can create a environment variable as a file.

34:12

And you could call it, say, time zone or, you know, like, user permissions.

34:17

And then you can define your user group permissions for your containers there.

34:21

And then instead of handwriting it every time, you just say, I want this container to look

34:27

at user permissions.env.

34:30

And that's where it'll pull this information from automatically.

34:34

And you can use that across a number of different containers.

34:38

But these are ways to also maintain credentials and stuff.

34:40

So you're not actually writing them in.

34:43

In the container, you're just saying, look to this file,

34:46

which then if you shared it online,

34:47

the person doesn't have access to that file

34:49

so they don't get that information.

34:51

- And make sure you check in your Get Ignore file,

34:53

your dot Get Ignore file.

34:55

If you don't know what that is, look it up.

34:57

It'll basically keep your files from getting pushed

35:02

to GitHub.

35:03

So definitely if you had a bunch of passwords in there,

35:05

you don't want to get pushed over there. So it's one of the ways you avoid that. And yeah,

35:10

like the environment of variables too, if you're pushing a repo for people to use,

35:15

just including your documentation, like, hey, here's the variables that you need to set up

35:19

yourself with your own information instead of, you know, leaking anything that you don't need to.

35:27

And a reason why you would share this kind of information, if you're like, "Well, I wouldn't

35:30

do that."

35:31

Well, one reason that you would want to share container information is it makes it so easy

35:35

to problem solve.

35:37

Because if you say everyone's using the same, you know, Docker image, so we call it an image

35:44

that's then spinning up the container.

35:46

If you've defined anything,

35:48

you can always share that, you know, like in a paste bin,

35:51

or it doesn't have to be on GitHub,

35:53

in order to get people to help understand, you know,

35:57

if you'd written something wrong in the command,

35:59

it's like, "Oh, it's not working anymore."

36:01

And you can share that.

36:02

And then the person can give you feedback, like,

36:04

"Oh, the maintainer changed. Everything you can share that. And then the person can give you feedback like, oh, the maintainer changed.

36:06

Everything you wrote is correct.

36:07

It's just the actual image link you've written in here

36:10

is now incorrect, something like that.

36:14

So there's reasons to share this more universally

36:18

with people as you use it.

36:19

And you can comfortable with it.

36:20

You just want to be careful that you're not leaking

36:23

information.

36:24

Do you want to respond to some of these people's comments

36:27

in regards to using sticking with bare metal?

36:30

- Do you want me to?

36:32

- Sure, I mean, did any jump out at you?

36:34

So I asked people on Lemme what they thought,

36:36

who are sticking with bare metal as we call it,

36:39

as using the machine itself to run a service,

36:43

and they're not doing containers by choice.

36:45

And I was curious why that is.

36:47

Not in a judgey way, just like literally like, why are people just, you know, as of 2025

36:52

now, 2026 sticking with not using containers, like what about it makes them like no thanks.

36:59

The number one answer, which makes sense is that people are just happy with what they're

37:03

running.

37:04

And I think that's true universally.

37:05

Like if you're using something, it's working.

37:08

It makes sense.

37:09

You don't need to like mess with your recipe, you know?

37:12

If it's in production, yeah, why, like, why mess with it?

37:15

I get that.

37:17

And I think a lot of answers related to that, you know?

37:19

It's like more just the old school.

37:21

I'm already doing it, so I don't care.

37:23

Which makes sense.

37:24

Like this person says, to me, Docker is doing it, so I don't care. Which makes sense. Like this person says, to me,

37:25

Docker is an abstraction layer that I don't need.

37:29

Oh, but this person says, I do like VMs and Proxmox,

37:33

and Alexi.

37:34

(laughing)

37:37

All right, so whatever.

37:38

I don't have the time to learn Docker and K8,

37:41

but I have using virtual Bishidz of Proxmox.

37:44

So, I've even, whatever.ishids of Braxmox. So, I mean, whatever.

37:45

There's a virtualization happening there.

37:47

(laughing)

37:51

- Yeah, there's, I think there's very opinions on them.

37:54

You definitely have some people who are,

37:58

you know, I guess we could say a little more old school

38:00

who've been doing things for a long time

38:02

and they're probably professionals in this field and so they are comfortable working with bare metal which you know there's

38:11

nothing wrong with that either and I think the larger point probably is that you have choices

38:17

like Dr. Santo only choice you can you can use whatever you want you know you know even just

38:24

thinking about virtual machines,

38:26

I think we talked about that a little bit.

38:29

I don't like virtual blocks.

38:30

You know, I'll go on records and I do not enjoy using it.

38:34

I do like VMware, which some people hate.

38:37

But guess what? I like it, and that's my choice.

38:41

So I had choices between those two, but additionally, QAMU, QAMU, is that how you say it?

38:48

I think it's easy to say it.

38:50

Whatever.

38:51

Anyway, I like that.

38:52

I have scripts on my machine right now that I can just run up a, you know, bring up a

38:57

pair of OS, you know, Instance.

38:59

I can also recently just out of weird curiosity from watching a couple weird YouTube videos

39:06

put a cameo script that I brought up,

39:10

TempleOS, just to see what was going on with that.

39:14

And I think that it just depends on what you wanna use.

39:18

I like continuous real lot of different reasons.

39:22

Sometimes like I said, I make things

39:24

that I don't feel the need to containerize.

39:27

But overall, I don't see why people wouldn't want to use them or at least try them.

39:34

There's certainly a lot of benefits, but everybody likes the things that they like, and

39:39

I'm not here to tell them any different.

39:41

Yeah, like here's a person's comment.

39:44

I've done it both ways. to tell any different. Yeah, like here's a person's comment says,

39:45

I've done it both ways.

39:46

At this point, I would not go back to bare metal

39:48

because I find myself encountering dependency hell.

39:51

Dependency hell.

39:53

Yes, that's why they describe it.

39:54

Dependency hell like over time.

39:56

I can agree with them on that.

39:58

Yeah, but like here's a different one says,

40:00

"I don't want to add any additional overhead

40:02

"or complexity to my system

40:03

"because I'm already comfortable with it.

40:05

I see legitimate use cases for Docker and work purposes where we use virtual machines constantly.

40:11

I just don't want to benefit from that in my home, which also makes sense.

40:16

Yeah.

40:17

I mean, you've got so much liberty when you're when you're working in a home lab and that's

40:20

like the big draw, I think for a lot of people is you can do whatever you want.

40:24

Like I'm sure folks who work in you know the tech industry

40:28

professionally there's a lot of constraints sometimes they get pushed to do

40:31

things that they don't want to do they're using products that they don't want to

40:34

use but at home you can pretty much do whatever you want for me I have a one

40:39

I won't say that I have a low spec yes set up over here because I do have some

40:43

powerful machines now the ones that I primarily use are spec set up over here because I do have some powerful machines now.

40:45

The ones that I primarily use are much lower spec

40:48

and I get a lot more done because I'm using Docker

40:52

on these machines.

40:53

Otherwise I would not be able to accomplish as much as I do.

40:56

- Yeah, makes sense.

40:57

I mean, like here's another person says,

40:59

"All of my services run on bare metal.

41:01

It's easy.

41:02

The backups are working.

41:03

I have a simplified workflow.

41:05

I don't have to worry about things like virtualized routing.

41:08

It's a very tiny system, but I am able to run a number

41:11

of services, peer-to-year, go-to social search engine,

41:15

custom sites, backups, matrix, and a whole lot more

41:17

without a single container.

41:19

And it's using less RAM and doing a DD once in a while

41:24

keeps everything as it should be.

41:26

It's been going for four years, ish.

41:28

It works great.

41:29

I used to over complicate everything with Docker

41:31

and compose files, but I would have to keep up

41:33

with those underlying changes all the time,

41:36

which in my opinion sucked,

41:38

and it's not something that I care to do with my weekend.

41:40

And this is keep in mind,

41:41

I do use Docker Kubernetes, et cetera at work.

41:44

It's great when you have those resources and other people to help keep things up to date,

41:49

but I just want to relax.

41:51

It's not the end of the world.

41:52

Yeah, I totally get that.

41:54

Yeah, totally get that.

41:55

And that sounds like what I said earlier, you know, like at work, you got, you know,

42:00

at your disposal, you know, you could have hundreds of people working on a project.

42:05

There's no telling what that situation might look like, but it's distributed work, dressed as well.

42:11

So, yeah, I figure out how many you want to just relax and play with things and have fun,

42:16

and things are already working, kind of a, you know, if any broke don't fix its situation.

42:21

Yeah, and one, to your point, too, the too, the beauty of trying any sort of containers is like,

42:28

you don't have to hurt yourself doing it either.

42:30

Like there's nothing wrong with literally spinning something

42:33

up to test it and then making it go away,

42:36

which is by design how it works.

42:38

That's the good news.

42:39

If you're already running services and you're curious,

42:41

you can just spin something up for the purpose of testing

42:44

and spin it down. I'll link to this long discussion thread of people's thoughts and, you

42:50

know, everyone's entitled their opinion. It's totally fine. And I was just, I was really curious

42:55

about it and personally, I have been using containers for a long time. But it's just something

43:00

like anything it just takes time to get used to or to wrap your brain around. But it is like an industry standard that's heavily used.

43:07

So definitely worth knowing, I would say.

43:10

It's not, you know, it's worth being aware of for sure.

43:13

Especially if you want to run multiple things simultaneously.

43:17

Well, I think that's good on that.

43:21

Yeah. Anything you have coming up, you want to be able to be aware of?

43:21

(laughs) - Yeah.

43:22

Anything you have coming up, you won't be able to be aware of?

43:25

- Just, you know, check out like GitHub

43:28

if you get the chance.

43:30

It's just github.com, hungry bo-gart,

43:34

which like actually is hungry dash bo-gart.

43:38

And you can see some of my projects

43:40

most recently, the mermaids, a secret journey.

43:44

Hope you like this text adventure.