 really seven minutes ago is when I got everything like back to normal ish, right, right? Yeah. So if you want to go ahead and get your screen, share my jiggy going, get everything sending off to the right place. Alrighty, so I will continue on or do you want me to pause or go ahead? Go ahead. So just to recap, we're talking about Podman v3 Docker compose capabilities within it. And yeah, basically what happens is really, and this is the part that took me a bit to wrap my head around is you're actually using Docker compose, but because Docker or likely because Docker compose was originally developed by a third party who, of course, I can't remember the person's name off the top of my head, but they were developed independently of Docker. And so what it does is actually calls the public API, which happens to be a RESTful API to do all its stuff, right? So what Podman v3 does is it actually replicates that RESTful API kind of in general, but then also makes it available in the same way that Docker does. So the REST, so now Docker compose, when it calls that RESTful API gets Podman. And so internally, they might do some different things, but they the bulk of it is that's kind of what's going on. So here's just the show notes or proposed show notes for this week for anybody who is curious. And I know we've asked been asked before this is all on GitHub right now. Everything that we're going to talk about today or in theory, everything we're going to talk about theory. Yeah. And I will put the link. I got it in. Oh, I got it. Okay, there you go. And so, so if you want to follow along, it's right there. Okay, so when one of the things I actually wanted to do when I started running blog posts a million years ago is be cool if we had like some sort of like centralized repository, because a lot of blog posts are about like, how do I install blah? And then how do I, you know, use blah? And I always want to be kind of cool if like attached to the article was an Ansible playbook that you could just run, right? Like it's good to kind of do it by hand, you know, once or twice, but it's also nice to have something that is rep, you know, repeatable that you can use elsewhere or whatever. So I took that article and I turned it into a playbook. The playbook is pretty straightforward. And apparently, VS code really doesn't like that I have cube cuddle actually trapped in a container. And one of these days I need to give it a sim links or like, you know, a link so that it can actually run to cuddle and be happy about it. Yeah, but I don't use that feature set very much. So I haven't got around to it. All right. So the first thing we do is we install podman. Now, we only have to install podman. I almost always install Scopio and build a separately. You may actually get them get. I think you might get build up by dependency. I think you get build up by dependency, but not. Yeah, but not Scopio. Yeah. So what is Scopio for the audiences? So Scopio is I don't play with it that much. I mostly just use it for search. Yes. So it's like container search. I think it does other stuff, too, but there's a lot of other stuff. Well, so hey, look, we can wait. Let me find the homepage real quick for everybody. But basically, you can. You can work with remote image registries like Langdon said. You can sign content. You can retrieve the images with it. You can kind of like Scopio is kind of that thing you put in your pipeline for moving images around or pulling them down or getting them in the place you need them to be as well as a tool for you to search from your command line. Like out of all my container registries that I have open here. Right, right. Which one is going to have the latest version of kubectl in your case, right? Like, right, you know, you can search like that. So there's a Scopio. I'll just drop it in chat folks. The Scopio GitHub page. And I thought we had like a nice fancy page for it, but I guess don't. So yeah, I thought we did, too. Do we know? No, apparently not. Well, at least it's not linked in the GitHub repo or in the readme. So let's let me see if my Google foo is better than yours. Yeah, but the biggest thing, right? Like I'm looking at the same page that I just shared in chat. There's a handful of commands that it does, right? Like you can log in, log out, you can grab a manifest digest. You can stand alone sign, stand alone, verify, sync your local repo with a remote repo. You know, that's going to synchronize images between container registries and local directories. That's the full description on that one. And then obviously copy, delete, inspect, list tags. Yeah, I think the two biggest things that, you know, like that are hard to find anywhere else. One of them is the list tags, which is super useful for, quote, unquote, like properly designed containers where the container has a bunch of different versions available, but they're all based on tags. And like it's really weird, like even from the get go, Docker never really treated the remote tags almost like a first class citizen. Like they're super useful and they're a super good way of like kind of getting different, you know, kind of profiles for any given container, but they're really hard to discover. So that's one of the big reasons I use Gopio is I want to go and find out, like, you know, if the Fedora that's there, like what versions of Fedora are available, right? Which might be listed as tags or commonly would be listed as tags. And then the other big one is that inspect, which kind of tells you the the intricate details of a remote container. So you don't have to kind of pull it down to dig around in it. And I know I know Gopio has used a bunch to do the kind of the security components of like the health index and stuff like that so that you can kind of do all that stuff. Well, at least you don't have to have a copy of every single container in the entire world on your local or every single image, I guess, on your local host. All right, so that was a little digression in the scope. OK, so two questions now. OK, well, a comment and a question. Oh, my God, this tag listing is amazing. And then, right? Can't you just podman search or does it get finer details in that? And what I'm thinking is podman search is a little scoped where Scopio is not. Is that makes sense? I actually think podman search would use scopio underneath. So I think they're pretty close to the same, but I don't know of a way in podman to get some of the other details. And sometimes you I don't know why, but I like my fingers will go towards scopio to do that stuff. Right. I think it's because you and I have been exposed to scopio very early on and maybe, you know, in its existence, you know, for example. Right. Yeah. So, yeah, so check it out, you know, definitely bring back comments. Let us know if you think we should like dedicate a more detailed episode to it. You know, I mean, you know, but yeah, we've kind of we've covered it largely already, you know. But yeah, the the list tags thing as playing risky says, you know, is super useful, at least, you know, in my when you're doing that discovery process of somebody else's image. It's it's a comp, you know, it's a hard thing to get else wise. And like I said, it's one of those things I do not understand why it's not like, you know, we refer to them as like a first class citizen. You know, it's like, you know, images are listed, containers are listed, you know, but just the tags are like hard and kind of clunky and stuff like that. And I just I'll never I, like I said, I just don't understand really why. So all right. So moving on. OK, so I have my awesome tasks here. So the next thing we do and the only reason I separate these was for the sake of discussion here, I obviously could put these two packages in with Podman, but what I want to do, whatever you're sharing, it's very tiny. Oh, is it? Sorry. I thought my this was my normal big size. It was big, but you moved it around. And now it's not. Oh, right. OK, actually, it's probably because the I could share it. Let me go back to sharing single windows. I think it might be better. Yeah, that might work better out for you. So that I should point out that you can download Scopio on just about every OS out there where and like use it effectively. Right. So like you can install it with brew on Mac OS or, you know, compile it from source if you want on Linux. You know, so it's it doesn't work on windows. Let's see. No, but it doesn't work on your Raspberry Pi. So you got that. If it doesn't, it should. And let me know about the size now. I, you know, hopefully it's better. So, I mean, I think it's a go application, which is a go application. Yeah, so it should should be a little in theory to get it to work. Yeah. And I know the team wants it to work like wants all of those tools to work on basically any OS. So, you know, if it's not there yet, it should land soon. Right. You know, if you're running BOS or, you know, OS warp, maybe not so much, but. Or two. Well, I want to talk to, you know, what's John Oliver call it? You know, our, you know, the show Show Daddy. Oh, show. What's that show granddaddy or whatever it is? Yeah. So, you know, I'd be able to, of course, be OS to warp. So, Narendra still would like it bigger. Let's see if we can figure out how do we do? I think it's here. I need to go play with this one of these days, but I haven't had great luck with it yet. But I found some tool that supposedly will make this better. OK, that's up to 18. Hopefully that's a little more readable. And like I said, don't worry about the stuff on the left hand side. Yeah. Right. Like, don't worry about your. So. If you're having any trouble reading it, like I said, it is in the repo, so you can go and open it and make it any size you want. So. OK, going back to OK, so this next intspole task is really just separated because this is specifically what you need if you have Podman to make Docker compose work. So you need the Podman Docker package, which basically actually, I'm really curious now. I think it's basically. Oh, shoot. I forgot. I can't. Oh, you know what? I can do a terminal in here. Yeah. Although, I bet this font is going to be tiny, tiny. But I just want to do terrible. All right, cool. I don't know if you can increase it, but. Oh, wait, I need an IP address. Oh, you got to learn something. See, the problem with getting really into containers is that you never ever install anything locally. So control plus plus to increase tech size and VS code line done. Oh, there you go. But that doesn't. It doesn't change the size, but it does increase the interfaces font. Yeah. Yeah. OK. All right. So IBM or PM IBM. Nice for it in slip. So I think this basically just installs some singlet simulinks. I can't talk. Well, these are that's a lot of docs. Let's get rid of man. Yeah, so it basically just installs this simling because if you look here, I think it's a sim link. Should be. No, it's an actual it's an actual pointer. I was wondering about that. OK. Because yeah, I think it's it might get angry if it's a sim link like so it might actually be its own binary copy could be a binary that kind of throws a sim link. Yeah, I think it must be right because I mean, if you just look at the size of the socket kind of thing. Yeah, that's one sixty seven. And this one's no, that's a lot. Am I reading that right? Yeah. Like, oh, four megs. Right. I really should use this all the time. So I'm 48 megs because I'm not that bright. I can't do the math in my head. No, you're a lot. It's actually it's the commas. It's the lack of commas. Well, if your get you every time, man. Yeah, if you're European, it's the lack of periods, right? Or if you're Indian, right? It's the you have commas, what, every two characters. But it's just that there's no separator. I have a very hard time reading the number. You kind of have to read from right to left on those. Yeah. Yeah, exactly. All right. So long story short. OK, so I was kind of curious. So basically what Podman Docker does is. I'm not exactly sure it works. This may be a question for Brent. One of his days is it essentially installs a sim link to Podman. But now anytime I'm on this computer, I can type Docker and get Podman. So, yeah, see, it even says I'm like, oh, you know, maybe it's an actual pass through. That's how it works. Excuse me, instead of a like a straight up sim link. Oh, plain risky says that Ubuntu is now shipping Podman, Builda and Scopio in 21.04. Interesting. OK, good to know. Which do you have to know which repo is it? Is it one of the close repos or is it like the everything? I think it's like he installed it on its pie and it's there. So, yeah, super curious. Like you just did a regular Raspbian install and off you went. Nice. Awesome. Oh, he says it came in 20.10. OK, cool. Interesting. All right. We had someone from Ubuntu on the other day that was super interested in how we do things. But anyway, I saw I saw interesting thing on I think it was on Reddit somewhere, but it was like somebody had received a cease and desist from Xfinity about doing, you know, essentially, you know, illegal downloads. File, they told them that they had illegally downloaded that they owned the copyright for sorry. Someone else was a DMCA report, you know, so they don't tell you who it actually is from. But it comes through like your ISP. Right. And whoever that was claimed that they had copyright ownership on the file that they had downloaded. That file happened to be the Ubuntu 2010 ISO ISO. Yeah. So I'm pretty sure it wasn't canonical. It's probably the file size match, right? Matches to something else that has a copyright. Yeah, I bet that's. Yeah. That whole world. I do. Yeah, I do like lack to their end of lack is like I love the word and I love that there's a number like a name for 100,000 that's simple. So OK, so you install Docker compose and just by way of explanation, the best of my knowledge, everything about this Docker compose package is exactly the same as the one you would get, you know, without Podman in a sense. So it's just regular old Docker compose. The only thing is that and I'm not sure where the the dropout point is exactly. Like I don't know if the feature set is not in Docker compose. It's this package that is available on Fedora or but I think it's available there. But Podman doesn't support the swarm feature set that got subsumed into Docker compose a few years ago now. So if you're trying to do anything with the swarm feature set, that's not going to work on Podman. So just kind of know that going in. But I think the Docker compose has it so you can shoot yourself in the foot with it, but it won't work when you try to run it. All right, that was that was long and involved. All right. So the next thing we do is we tell system D to now enable the Podman socket. And by way of a little explanation, I can just show you. Let's see, where is it? And it just, oh, I think I need pseudo. And if you notice, so there's a socket here and if you know anything about Linux, everything on Linux is a file. So even though this is a, you know, an internet socket, right? It is just a file. So it just gets created on disk. And in the case of many sockets these days, it is managed by system D so you can status Podman. Actually, why don't we just do star here? I want to make this a little taller because I think it's going to be a little long. And so, yeah, so you see this podman socket is here. It's active. And, you know, obviously, I ran this playbook earlier to to enable it. But it's, but we'll run it at the end just to prove that it works because it should be unimportant. And then the last thing, which I had never done in Ansible before is you can actually do like an actual. So this will actually execute as a curl command to make sure that, oh, and actually, sorry, before I move to that, the thing that doing that Podman Docker and the Docker Compose installed, it, it is actually a Compose installed. It enables this Docker sock as well. So now we have both sockets. But if you notice, they're actually in two different places. I'm not sure why I don't know if one is right and one is wrong or whatever. But if you notice, that really is assembling Docker is assembling. Yeah, to get to the podman socket. So whatever. So but yes, in Ansible playbook, you can actually do a curl command. So I actually do a curl command to this URL. And let me see. Oh, actually, if we look at the blog post. Oh, I'm only sharing the one window. I forgot. Let's see. Can I get a browser window in in this code? Probably somehow. Maybe I need an extension. Maybe I don't know. Yeah, I think you need an extension. So let me I'll just copy it from the other window. But in that article that I've already linked to and is in the show notes, there is the command that they propose you run, which I'm just going to cut and paste so I don't get my like extended curl. Incorrect now. But let me just see and find it real quick where to go. Oh, here it is. So as you can see, it is slightly long. But basically, I'm doing very obvious stuff here, right? So I'm setting the content type to be JSON. I'm using this Unix socket to do the curl request. And then I'm going to this URL. And if you notice over here, very small, there's an OK, which, you know, is is a 200 return code from HTTP. So I look for that status code, then I check to make sure I got it. And then I'm actually going to retry it in case it doesn't happen. I I had to, like, break this to get it to even get past like one retry. Like, I had to actually make an error to get it to try it again because it's just, you know, it's super quick. So yeah. All right. Long windedness. Let's see. So 35. And then just because I could never remember how to run a playbook, I almost always put a shell script around it or I use the same shell script. Don't do that. I know, I know. It's more it's so that I can run it from wherever. So like, if I'm in some random directory, that's fair. It redos the directory. And then I also, like I said, I forget which of these flags I need when I just want to run it locally. You know, I don't have like a proper all you have to do. They call it host to local host. Yeah, but there's what it got. Like, I don't want to do a proper inventory. I just, you know, force it just right. Right. It'll it'll do local host by default, I think, without an inventory. Yeah, there was I don't know. I started doing it a long time ago. But yeah, anyway. All right. So we are at some point. Who knows? Yeah. So let's run it. So I'm going to give it the become password. And if you notice, everything is pretty much all of this is running a pseudo or as root, you know, because it's like installs and all that jazz. It doesn't like that I'm using Python three or does like I'm using Python three, I can't figure out this message. Don't worry about it. All right. So obviously, you know, I ran this for I know that it works. So unsurprisingly, it comes back with an OK. So this should get you to having kind of all the setup for thus far. Now what we could do and actually, what do we do this way? So I am going to OK. So what I did was kind of again, following along with the blog post, I went and grabbed. So there's a set of compose examples of which there are like 20 called GitHub repo called Awesome Compose. And in here, what I did was I just stripped out a bunch that I didn't think we were going to talk about. And I didn't think it was worth like kind of storing for the sake of storing. But in here, you can see where I got it from. It's this URL, this Awesome Compose. So that's the real source. You know, I just have them here. Didn't feel like doing some modules and get so I just cloned them over here. It is CCO show or CC zero. So it was fine. But I wanted to make sure there was a call back to anybody, you know, who actually came across this and wanted to find the real source. Nice. So it has obviously a bunch of different examples. So we'll talk about the first one first. And we can do this. So here is where I started to run into a little bit of a problem. And I will explain why once you see the problem. OK, so the first thing is, as I mentioned before, when you're doing this stuff with Docker, you need to run it as a root. Mostly, if you notice, oops, I didn't do that. But if you notice, it's because that socket is actually owned by a root. And so if you're trying to use that socket, you have to be plus, you know, but Docker expects root. So that's something to just kind of keep in mind. But so the way you run a Docker compose is use pseudo Docker compose, and then you just say up. And the reason I get away with just saying up is because we have a good naming convention for the YAML file, which is just Docker dash compose, and so it's going to find it automatically. You can pass it as like minus F. But we're not going to in this case because that way it will be simpler to follow along, but we're going to run into a problem. OK, so the problem here is my typical problem, which is that everything is is bound mounted from like all over the internet, basically. So this is an SSHFS find mount of this episode's directory into this machine. So something about the security of it, it doesn't like this. There's there seems to be an allow root flag I can use for SSHFS. But I thought the solutions I'm going to show you were better in this case. So the first and foremost solution I can do is just take that and copy it directly into my home door. And so I'm going to jump over there. And here's my Docker compose. And so if I run this here, it should just work and there it goes. And if you haven't used Docker compose before, both good thing, but sometimes confusing thing is what it does is it when it starts up all its containers, it kind of feeds all the logs together. So you can see them in this column over here. And actually, just for the sake of discussion, I forgot, I didn't actually show you the Docker compose. Oops. You can go away. Let's make this smaller. So what this is going to do is it will start X number of services. In this case, it's going to start GTIA or GTIA, or I don't know, but which is whatever you want to call it. Yeah, it's a it's a Git repository. Like remote Git repository. So like if you're not using GitHub or you want to use something that's, you know, local to your network, like we're in a container. Yeah, it basically just is a Git server for lack of a better term. That doesn't make a lot of sense. It requires a database. So there's also something called DB for database. And the environment is, you know, basically these are the environment variables that are going to get passed in to get to you. And then, you know, the database is going to start up. It sets up the database password, all that stuff. This is super secure as usual. And then it does a volume mount so you don't lose all your data. Sorry, there's also this volume mount here. And then you can give it more color on those volume mounts as well. If you want to, but in this case, we don't. So long story short, I'm going to show you how to do it. So long story short, you know, you kind of saw it already. The thing to remember, though, with Docker Compose, and this is true for all of the orchestration techniques is you don't have any promises about what's going to come up first. So you your tool chain needs to be tolerant of the fact that. Excuse me, get to you, for example, may launch before the database is actually fully ready to receive it, excuse me. So you need your, you know, if you're writing the equivalent of GTI, you've got to keep in mind that you have to, you know, be aware that the database may not be there all the time. So you need to keep testing and you can warn about it. We might even see a warning unless it came up correctly. I'm just looking. Yeah, it doesn't really look like it. But basically, you need to keep testing. You know, otherwise it will fail. One of my one of the labs I worked on for a long time, you know, like we had a fixed WordPress because in the initial version of the WordPress that we were using, it wouldn't retest if the database was there. So even though everything was perfectly fine, because WordPress happened to come up before the database came up, you'd have this race condition where sometimes WordPress would fail because it wouldn't retest. So in a, you know, in a traditional server world, that's totally fine. And that's why it was never fixed, right? It's not really a bug per se. It's just that, you know, in a new environment, you sometimes have to think about the fact that it may not come up in the same way. All right. So going back to where we were, so I'm just going to do a pop D back to my old directory. And if you see a PWD minus P and it doesn't really show you, but it's mounted as an SSHFS. So for that reason is primarily what pushed me down this path, but also, you know, if you've ever used Docker, most people like to use it as a regular user, even though what's happening underneath is it's actually running as root. So this is one of those things that is kind of a subtle distinction that I think a lot of people aren't aware of. So just, you know, anything that you're doing in Docker, those containers are running as root. So keep that in mind, even if you don't use pseudo. And at least when I first started using Docker, this is the way Docker was set up initially. And so, you know, I, you know, I prefer not to use pseudo there because then I don't have this problem. Another way I could solve this problem is actually probably by passing the environment variables around correctly and it might find it. I don't know, like I said, I shouldn't play with it because I wanted to go and solve this problem too. So what I'm going to do is I'm going to make it so that as a regular user, I can, you know, if I'm in the appropriate Linux group, I can run Docker or Docker compose really in this case. So going back to another playbook. So what I do is first make sure that the Docker group exists, which installing just Docker compose does not seem to create it. I think installing the actual Docker runtime will create it. But I'm not sure because I haven't done it in a long time. Then I need to find out who I am so that I can put me in that group. And so I just add my user into the group. And then I need to go and change the permissions. Now, this is where a little, it gets a little bit weird because this one is the sim link. So it's owned by root, but if you notice the permissions on it are full permissions, right? So you can basically anybody can do anything to this sim link essentially. So what you need to modify is actually the, you know, the target of the sim link, which is the podman socket. And this isn't going to work without sudo. And so what I'm going to do is I'm going to actually get to set the group on the ownership of this socket to being Docker by just doing g plus x. You know, you can do this with numbers. I just did lots of comments coming in on chat right now about how you can do this. Oh, sorry. I had that window. No, you're fine. You're fine. Since compose v3, there's a depends on options as WSL Corsair. And then PS find mount path to Durr will show you the mount type and mount options. So you don't have to, you know, have your password hard coded in the FS. Oh, I'm actually using this stage keys. So I don't have to, I don't have that challenge with the S HFS. So yeah. And is it, I don't know if it was really necessary. It was just because I had my, I had my code editor on one machine and I wanted to run it on a different one. Right. So that's what servers for. Yeah, exactly. Exactly. That's what I should be doing with that this weekend and my free time. Do you have a link to that code server? Yeah. Oh, hang on a second. It's, you know, essentially the server version of VS code. No, I don't know if I've seen it that way. I've used the remote containers and the remote server stuff and that's pretty cool. This is actually like plug into this as kind of like CRW kind of thing, except the browser based, right? Like the code server runs on a box. You expose the port through the browser. You can get to a VS code like interface. Gotcha. OK. Like a lot of these have a lot of problems with some of the newer iPad accessories as I've found bugs accordingly. Since I got a new iPad. So like scrolling is kind of weird on some of them, right? And then, you know, there's just stuff that needs to get fixed. That's all. Well, CRW, VS code, this thing, they're all based on the same route. So what's really nice is they can, you know, any patches you get for one of them should affect the rest as soon as they adopt them, which all goes, I think they all they all go back to Eclipse Che. Or it's FIA. Is it FIA? It's the thing. Yeah, I'm not. I can't remember now. Yeah. I don't know. So but the nice thing is that they are doing the right thing in the open source world, right? As they have, you know, they're all kind of contributing to the same baseline and then kind of giving different, slightly different user experiences on them. Like, you know, VS code is very focused on, you know, what I'm going to run on my desktop and they do remoting using the remote terminal or the remote container plugin type stuff. It looks like this code server one uses more like the web base, but still feels like VS code. And then CRW uses the I'm going to run a fully remote development environment where even your terminals are actually running in a container on a remote server, for example. You know, so I really like that we're you're seeing it's not competition, co-optition, you know, I think they call it. Sometimes, you know, where each other, I feel like. Yeah, and and different use cases have different needs. So I really like that a lot. Did we have which guys on the show reps going? Did you just have these guys on the show? No, don't think so. Well, maybe we'll extend. There is a good SSHFS extension for VS code. Oh, that's weird. Nice SSL and WSL extension for VS code. I learned actually, as part of while I was fooling around with this, I learned auto FS for the first time, which I had never used for you. I load auto FS because it obfucates a lot of stuff that I feel like admin should know. But that's just interesting. Yeah, one of the things that I immediately turned on, which surprised me that it was turned off by default, was what are they called it? Browse mode, I think was the flag where instead of it just being like an empty directory until you go to something, right, it at least puts the stub there. So Rapscallion Reeves totally just said exactly how I feel. Auto FS shouldn't be as hard as it is. Why does it have two different configuration files? Well, one that says this is the directory I want to use. And then another one that says this is what I want to put in that directory. Like, how about just one config file that says both? Like, what? Yeah, so I had never really played with it before. But if it fit my use case a lot better, because when I spin up VMs all the time, and if I could just drop in the auto FS stuff, then it will kind of eventually figure out how to get back to my projects directory without me having to kind of set it up and making sure that the routing is right and all that stuff. Like, I don't have to reconnect it on boot. I don't have to have an FS tab and forget no fail, stuff like that. I'm not sure that's how I'd set up a regular machine, only a disposable one, I guess is kind of what I'm getting at. So off on that massive digression. So what I do is I set the permissions on the socket. Oh, sorry. The first thing I do is actually set the permissions directory that the socket is in, because there's no executable on it by default, or at least on my default install. And then I go and add the socket to the Docker group. And just to prove my mad or lack thereof Ansible skills. Mad or lack thereof, well, OK. Yes, yes. Well, I'm thinking to myself, this is a pretty simple set of Ansible playbooks, but I'm pretty proud of them. So I'm going to you should be proud of them. I think you have every right to be proud of your playbook. My I will say, you know, all like my laptops, my servers, all that stuff are all Ansible-ified. So whenever I get a new laptop, I can just run a playbook. Well, I mean, I have to get the scripts there and install. But then I can just run a playbook and my laptop has all the things I like installed. You know what? So me from like doing that is when I stood up a Raspberry Pi cluster with Ansible, it's like now I have two sets of configurations for my network. And the right, right. Yeah, right, really out of practice when I did that. Yeah. Well, so I do have like, I will say in my kind of Ansible playbook stuff that I use for the kind of the personal side of things. So like things that get a lot of customization, a lot of change, all that stuff. I will often kind of run a single role just basically. So I remember how to get it installed so that I have like, you know, I'll have a role for I like this little app called How Do I, but I have to go and get it out of PIP and I have to build it and then I have to install it. But I can't ever remember how to do that. So I encode that in a playbook. And then I just run that one role. You know, so it's not. So while I do have kind of the baseline on my laptop, the problem is that like my laptops are different. If it's a Red Hat laptop versus a personal laptop, you know, that kind of stuff. So those kinds of things are annoying. So what I'll kind of do is I kind of have like a baseline, but then I have a whole mess of roles that I use sometimes. And so then I just kind of have a YAML that says, you know, I could literally call it one off YAML that is just roll one, roll two, roll three, roll four, because I'm like, oh, I want this on this machine or that on that machine. And it makes it a lot easier. So sorry. Did you have a question? I think I had a question about just, you know, command line reverse search. So control R is the... Oh, yeah. ...you're using, yeah, okay. Yeah, so, and the nice thing is, which a lot of people I don't think realize... No, a lot of people don't. You can control R, but then if you control R again, it will go back further. But then you can control S. No, control shift R, and it'll go back forward again. Oh. So you can do... I don't use it that much. ...Reverse and forward searches? Yeah, so like, let me see if I've got something that... Control shift R did not do what I thought it would do. No less. Okay, so I went, okay, so if I do control R, and then I do LS, and then I do control... Okay, and that's, let's say that's the one I wanted, but then I do control R again by accident or because I missed it or whatever. If you do control shift R... Wait, maybe that's not it. There's a keystroke. I thought that's what it was, that will go back the other direction again. Anyways, it's handy. I've used it before. Reverse search, just look that up. Yes, yes. Whatever your terminal of, or not... We've had a debate on here about shift versus bash. Yeah, as well. CSH, whatever. Like, I'm using CSH, control R works. So it might be a different set of keystrokes to do what you're talking about in bash versus ZSH, but normally they're the same. Yeah. Yeah, yeah. I don't know of a shell that doesn't use control R. Same. So, yes. And JJ maybe says they do the playbook thing for things you can't remember. Yeah, exactly. Like I just haven't known a playbook and I call it a day. Yes, tangents are tangential even. All right, so my super proud, oh my goodness, I can't talk. Run this puppy. Just make it happen, yeah. If I can click the right buttons. So, your mileage may vary on this. It is definitely not in that blog post. Probably not recommended to do things this way. But for me, because of how I learned to use Docker and Docker Compose, I expect to not type pseudo in front of everything that I do. And that has actually translated really well to podband, right? Which means that now most of the containers I run are not running rootful, but it is something to keep in mind that you are running these things rootful even though you're not running pseudo. So, let's see. So now I ran that and I should be able to. What's funny is that pseudo will still not work because of the, I think it's actually environment problems. Basically, it's not finding the sim links or the SSHFS or something like that. But long story short, if I do Docker Compose without pseudo, not that. And then let me just get, there's like a cleanup flag that I'd rather run if I can find it quickly because yeah, it's not there, whatever it should work. Okay, so Docker Compose up. And now, you know, I'm happily on my merry way. What I think is particularly funny is just that if I run that command with pseudo, it doesn't work. But if I run it without pseudo, it will run as root. So let's do this. I know I can do more terminals in here than it seems to be working out pretty well from a visibility and stuff perspective. Ooh, that's not what I expected to have happen. Just to give you a time check here is 9.52. Okay, cool. Yeah, let me show you real quick the containers running. So as we established before, the containers are running as root. So if I do podman ps, you'll see that there's nothing there. And if we do pseudo podman ps, and I pass my password, then you can see that now I have my Postgres running here and I have my Kethia running here, all running inside podman. I think, and actually, there's some more exploratory stuff in the blog post, but one that I think is interesting if you know anything, especially about how the networking stuff works, you can see it actually created a network for it. So they should be able to find each other, but from an exposed perspective, you shouldn't be able to find the database, but you should be able to find the website. And I can show you the website, but maybe we'll talk about slides real quick or talk about points real quick. Yes. I'm just like, yeah, do what you gotta do. Oh, and actually, because I can do the browser, so that'll be good. Thank you all for waiting as I'm gonna switch the screen. Yes, we need screen music. So if you haven't heard, my intern started last week, one of his tasks is to find us some music that we can just kind of bring up and bring down as we see fit. I told him there's budget, there's whatever you wanna do, just make sure that we never get flagged for it. Right, right, exactly. If you're not familiar with YouTube, it will literally flag you for stuff, like in the ISO case, for stuff that you own. Right, right. Yeah, didn't it happen, it happened to somebody really famously, this like a week or two ago, but not a year ago was. I don't remember who it was. But yeah, they got flagged up and like banned and all the stuff and it was their own content. Yeah, like they had written the music. Right. Yeah, it was really super annoying. Like somebody a while ago did ran an algorithm that detected like every chord possible in music. How? Right, right. Well, it's like. They used some like Kubeflow AI type thing. It's that whole thing of there's, there's no new plots, right? In books, you know, but it's kind of the same with music, right? There's no actual new chords or whatever. Yeah, right. Like it's just, you know, it's how you're putting them together. So I was just here. Oh boy. I was just preparing that other of the other windows. I could show you the giddy a thing running, but. All right. So flagged. It's got a copyright violation for playing Bach on the piano and he took it as a compliment. Yeah, that is. That is. Yes, I would tell you you're playing it. Right, right. Yeah, exactly. That would be that would be very validating for me for sure. Yeah. Yeah. All right. All right. So these internet points and I just realized I forgot to grab the links. Let me see if I have them somewhere. I can't type all that. It's that's a lot of typing. So, yeah, but Narendev in a first place with 5,500 points and then we have Netherlands Hackham with 5,200 points. Then Noah Friction with 4,000 points and Joe Fuzz still holding at 2,300 points. Detective Conan Kudo, I noticed that they did not submit their points last time. They are still at 2,000 points. And so I was disappointed. You can go back. You can go back and watch previous episodes and get the points for those. They they live on pretty much ever. Yeah. And Bake and Fork with 1,800 points here today. Good to see you. Yes. Where did my get up repo go? So I was just going to put the link to I have so many windows open. It's kind of ridiculous. It's one of those days. So I just realized I forgot I have a table of contents on the front page of the repo that I have to go like manually update and I often forget that it exists. So it is currently stuck at like episode 24. And I think this is 35. I know that's that's one of the big reasons I want to move to to and get up pages with this thing because it would automate it. But I just I don't know why I keep like I keep running into like brick wall to start. This is my problem with software development in general. A lot of the time is like I know how to do the code part. Right. But getting to the point where I can actually write code is sometimes a huge bear in and of itself. Like, for example, I was fooling around with writing a telegram bot. For example, I don't know if he's telegram. Telegram is a chat client or chat server and client, which on the one hand is pretty cool because the all the clients and stuff are open source on the downside, the back end, the server is close, is proprietary, I think, and run by a company out of Russia. So there's tradeoffs, but it has a really good bot ecosystem. And it was like a bot ecosystem. Yeah. Yeah. But what and so I wanted to write a stupid bot to clean up URL so that if I, you know, grab a URL that I want to share, like with my family, I can strip all the tracking information off of it. And so writing the code for that, I think it took me like 15 minutes to write the literally like 10 lines of Python. It takes to do that. But to write to get the telegram bot, what I couldn't even get out of like all the docs and everything else is like, where do I host it? Like, like, is it a web server? Is it something that telegram sits on? Do I do it as like a GitHub pages repo? Like, like, it was just like action. There's like, yeah. That's the that's the annoying thing is like, yeah, like open like, but that was the whole thing. I didn't know, like, I couldn't find the docs like how to make it go. And like, and that's often the biggest challenge. So I will share the link to the bot once I finish the bot. But I got like, I got like 80 percent of the way there last night and then was like, OK, I'm too like, I'm too fried staring at a computer. I need to stop now. You need to discover the great tool that I've embraced from many, many years ago called Hugo and run with it now. Well, so yeah, but so that it wasn't the problem of like, you know, do I need a Node.js server? Do I need a Python server? Do I need an open shift? Do I need a whatever those things? It was like literally not knowing the kind of thing I needed. And, you know, eventually I figured out that I needed a you know, I needed a web server that could respond to web hooks. And actually the reason part of part of my impetus for doing is I wanted to write a serverless function. And so so I had a serverless function that if you pass a URL to it, it will do the it'll do the clean up the shortening or not shortening, but it'll actually expand it, then clean out the tracking information and then give it back to you. And so I wrote that successfully as a serverless function and that all worked great. But hooking that up to the telegram bot, I was like, where is the code for the bot live? Yeah. And so that was having run a bot in telegram before. The code for the bot can live kind of anywhere. You just, yeah. So so that's what eventually I figured out is that I can actually make my serverless function itself the bot. And that's essentially that's the code that I have right now. Now I just need to hook up the like I need to tell the bot or I need to tell what is it called bot father, which is how you. Yeah, something like that. I need to tell my father the URL for my bot. And then obviously debug. It's actually surprisingly simple once you figure out the model. It's right. Right. And that's why I think it's but that's almost like the worst when you're trying to come along to it from the outside. Right. It's like it's so obvious that nobody explains it. You know what I mean? Yeah. Yeah. So yeah, so that was that was the thing. But yeah, so when I when I hopefully I'll finish it soon and, you know, I can I can share it around. But so that was the sweet sweet internet points. We love giving them out. I also threw a link in the chat to the the activity. So where's where to get other points for work? Remember, you can watch old shows. And yes, I could use a URL lengthener as playing risky. Says I don't think that's actually a thing on the internet. No, maybe it is. I found it last week. There's a thing called URL lengthener. I'll have to dig through my notes. I won't be able to find it. Well, I want a URL link, but it just makes your URL just super long. Is this like the let me Google that for you kind of thing? No, no, no, no, no, no. Like it's it's like a like you plug in now, you're going to make me find it. All right. Talk and make me while I find it. And I will dig it up for you. All right. I'm looking just to see if there are any other questions. Um, yeah, fire away with your questions, folks. Oh, the messages in telegram bots have to be less than 200 characters. Not in telegram in. Oh, in the in you. Oh, is really the kind of like where we get high on strong. Oh, that's interesting. Yeah, like it only let it limit you to 200 characters. It's super, super annoying. So so does auto mount or Mount D replace auto FS? Maybe. Oh, OK. Maybe I have to go look at that because I I was trying to find this is one of those things with like Linux has now been around too long as far as I'm sorry, but we need to delete all of the old content and restart the internet because it can be confusing about, you know, because, you know, things supersede each other, which they should write. And this is my pet peeve when it comes to like running newsletter, sharing blogs and, you know, posts and tools with everybody. Right? Like if you don't date your posts, I'm not going to share them because they're going to be outdated very quickly. And the thing that really annoys me about it is that HGP has a mechanism for telling you the date that something was published. But all of the stupid generators like you go, for example, ignore it and they use the date that it generated, which is not the date that the content was written. I don't think that's the case. You can override the date field in Hugo and say, no, it was actually generated on this day. Go to any of my websites. What? No. So it'll have the generated date. That's not when the content was written though. And like traditionally what it was supposed to be was overwrite it with a date flag. Oh, okay. All right. So, so yeah. So this this annoys me about the internet because basically if you go to the last updated, I even stopped using the header, right? But it used to be like it used to be in Firefox. It was on the about this page kind of thing. It was like right there, but I think because it became so unusable, like, you know, so useless, so hard to use there. But it used to be that like in the early days of the internet, when people were doing blind HTML, you it would literally be the date the thing was published. So even if it didn't have a date in the content, you knew what the date was because it was when it was published and it was right there in the last updated, you know, whatever you call it, Hatter. Yeah, so I hate the internet. Now you're going to make me curl some things just to make just to prove you wrong, but I dropped the URL link thinner in chat and in zoom so you can go check it out. That's a sadly short URL though for something that specifies that it's a link that it's a link thinner, but you have to keep it short so you can get people to go to it, right? To the length of it, right, right. But so does it have a use case like what do we need use cases for code anymore? That's true. That's true. That is so the use cases. Are you tired of your URLs being just too darn short? No, right. Okay. No worry. No further as a a dot a bajillion a's dot com has your back. Gotcha. Gotcha. Yeah. So if you want to be overly long URLs, you can totally Yeah. No, I don't why you would want to, but you can totally do it. Well, I I I foresee an update to the this episode show notes to use to remove the error to include perhaps in addition to what is what's YouTube's just find my windows. You know what's funny? I just did the curl to one of my web pages and it gave me the date at the time of the curl because yeah. So if it's got any sort of dynamic component, so it's one of those things where like the specification probably wasn't clear enough because technically speaking, it was updated right then because it included your name because you logged in. And so now the page is different because your name is on it, right? But that's not what I care about in the last updated. What I care about is when was the material content changed? Not when was the page generated? You know, at least in most use cases. So date is at the very top. So for this URL, this is the URL on YouTube for this show that I just threw in the chat. Clearly that is far too short because it uses the YouTube dot B E. Oh, yes. You know, and so what I should do is change that to include the the length in one for this week's show notes. I think is is the takeaway. Yeah, because yes, playing risky. Exactly. Like date published, date updated would be lovely, but that is not at least not any standard HTTP. Like we need like a blog RFC, right? Like, right? All blogs must have and it could be just leave one page. All blogs must have an RSS feed. A date that is accurate on all articles. And like that could be it. The other the other thing that annoys me too and that's kind of related, right? And like Red Hat Enterprise Linux is better about this, but Fedora definitely have this problem where the docs for the operating system itself right are, you know, they're on the internet and they are in a page that, you know, on the left nav is, you know, the content of, you know, Fedora 14. But then kind of if you go up the nav, the later and older versions of Fedora are also there. And in the URL bar is the version number. So if you change the version number like I wanted to do something intelligent like so instead of just saying 404 if the auto FS page is now gone redirect me to something useful like that's in that category. And I think the rel does this one pretty well, but like or or allow me to be more specific in my searching and say, you know, or the warning, right? This was one of the things that I got changed actually in the customer portal because I kept complaining about it, maybe other people complain too, but I take responsibility, which is now on any piece of doc that is not the most current version of something. It says, hey, what you're looking at isn't the most current, you know, are you sure you're looking in the right place, which is handy because otherwise, you know, you make stupid mistakes pretty regularly. Anyway, but on that note, that was our little introduction to using Docker Close Podmate. And in our many tangents and our many tangents and, you know, you can check out those Ansible playbooks and feel free to use them. I, you know, feel free to make them better. Feel free to make them better. They are pretty straightforward. But the and then, you know, play around with any of the other components there. One of the things that I started fooling around with there, which is checked into the repo is doing the cool store using Docker compose. I ran into some problems. Basically, I got the whole thing running now, but there's some environment variable I'm not setting correctly so that like the front end can find the back end. So I know the back end is running and I know the back end works because each of those the nice thing about using like a demo app for stuff like this is that each of the components actually has its own little web page that says, I'm here, you know, and so I verified that those all work. But my conversion from the Kubernetes YAML to Docker compose, like I dropped, like I missed something that I couldn't quite figure out and I was going to talk about that on the show today, but we're already at 8 minutes after. So I figure we should pause here. Plain risky reach out to Langen or myself to help you with your order by Sunday problem. What is order by Sunday? Yeah, wasn't playing risky. Oh, oh, oh, yeah. Yeah, definitely. Yes, shoot me a note and, you know, hit me on Twitter if you don't know me mail address. My email address at Red Hat. Very easy to guess based on my first name at Red Hat. So my last name at Red Hat that works out. Right. So yeah, but let's call it a show. Yeah, let's call it a show is great. So coming up at 11 a.m. Eastern 1500 UTC ask an open shift admin. We will be talking about the joys of subscription comparisons, licensing entitlements, the whole nine yards, right? We're going to dive into all that fun stuff for you. So you can figure out the right scenario for your organization. So please feel free to join us. It is an office hour. That's the open shift admin office hour. Okay. Sorry, I missed that part. Yeah, sorry. I might not have said it. It's entirely possible at this point, giving the way in about an hour. Yeah. So in less than an hour. It'll be on and Andrew and I will be there with some friends having some guests on as well to talk about it and feel free to bring your open shift questions as it is an office hour. So you can totally bring your like, Hey, I've got a problem with open shift XYZ and we will try to help you out. So definitely tune into that. And as always, if you would like to subscribe to the open shift streaming calendar, I just dropped the link in chat. We'd really appreciate that if you just added that to your calendar or pulled the ICS file into your calendar and you would just have our shows available to you at disposal at any time and like button on Twitch or on the YouTube, it will actually notify you. Yeah, like and subscribe. I think are not that annoying personally. No, they're not. It's really just like, Hey, by the way, this thing's online right now and typically put 90 seconds of starting soon on. So by the time you hit the notification and go to it, right, you'll be in a good place. So we have a question. Is it a good idea to manage Ansible for running Docker compose using its module called Docker compose? My use case is more on the lines of running few test cases which rely on Docker compose. So I believe there's a dependency in the Ansible module of Docker compose being on that system. So just make sure you satisfy all the dependencies and it should work for your use case. The only the only challenge I've had with community modules for Ansible is at any, you know, what you would exactly expect with community modules, which is just making sure they're available and compatible with whatever the target is. And so that can be a little bit of a pain. So just make sure, you know, so not only do you have a dependency requirement on Docker compose, but it needs to make sure it's using the correct version of Python, you know, stupid stuff like that. So just that's been my biggest challenge with community modules, like nothing against them. Just kind of be aware of that. I have not used. I'm going to pull up the module page to community or not one of the things this is one of those places where it's kind of like which side do you err on? I don't use Ansible with containers sort of. So in other words, like, you know, there's kind of like you have kind of the machine that you're managing, which might use, let's say it uses a bunch of containers on it. How do you get those containers there? Well, there's a bunch of different ways. You can use something like a config management tool like Ansible to get those containers there and running and keep them, you know, upright. That's one option. One of the things that we talk about on this show and I kind of tend to believe is that an orchestration engine is actually the right answer for getting those containers running and keeping them running. But if you're using it in CI, that's a different story. So but if you're using it to build the container images, that's a different use case and Ansible I think is often more appropriate there than it is using it kind of at runtime. So like using the Docker compose module for Ansible is more or at least I think this is what it's for. I can't quite remember like, but I believe it's more like the orchestration side of things. And so like, I don't know. I don't so it's it's a really different. It's a really fuzzy space right now. Like there's a lot of overlapping toolchains that can do different aspects of build CI CD orchestration and they all do some of those things very, very well and others okay. So like if you know Ansible really, really well it can be a really good way to manage your entire environment, including orchestration. However, it may not be the best tool for the job for the orchestration. So I wouldn't go learn Ansible to do the orchestration if that makes sense. Yes, I wasn't listening. Sorry. I was someone sent me a message that seemed important. So I responded. I hear, I hear, but anyways, I do. So it's like that is a that is a super difficult topic while 35 says yes, my use case is for CI. So yeah. Yeah, there you go. So it can it can definitely be super useful for that kind of environment. You know, basically kind of just, you know, you want to automate the standup of your environment for some testing and the tear down, you know, in a relatively straightforward, simple way and you know Ansible. Well, that could be a really good solution for that. It's just like I said, that is a super custom answer for most people. Like it's not even something I would necessarily kind of cover on the show except to say like we could have, you know, 10 episodes interviewing 10 different people who will all have different valid answers to that question. Right. They're all valid. Right. It's just like an OS, right? Like there's just a thousand and one ways to do something whichever way that works best for you is the right to go with. Right. S HFS versus auto FS versus, you know, NFS F F S tab, you know, or maybe Mount D. So yeah. Yeah, whatever you got to whatever you got to use, use it. All right, folks. Thank you for joining us today. We really appreciate all your time and comments and everything and thank you for joining us. We'll be back here in less than an hour with myself, Andrew and some guests. And until then stay safe out there and if you don't see us later today, have a good week weekend, whatever it is, we are off the air on Friday, by the way, folks. Yes. And Monday. And Monday as it is a holiday here in the U.S. Yes. And then, but next, I think it's next week. We're doing the container health index. So join us for that show. It should be really interesting because I'm curious about it myself. But I might be lying. Oh, yes, I am lying. Yes. Next Wednesday, we're going to talk about subordinate user IDs and then we're going to talk about the health index the following week. Got it. All right. Cool. Thanks everybody. Thanks all. Take it easy. See you say. See you soon.