Docker Fundamentals #0001

· 53 min read

AI Generated Transcript

So that's that's just me so you know I think you know some of
his friends summer friends friends are going to be joining
in later with what they feel like or they when they get
up. But I'm going to start now.
So here we go. The idea would be to keep it interactive.
So if you have a question you can just open your mic and
ask that.
That's the way I think we should operate.
So let me begin focusing my attention to my.
Desktop so here I go so you see my desktop and you
should be able to see my handwriting where I'm writing here.
There we go and so that that you should be able
to see that.
Now once I confirm that with you,
I would like to now describe to you the basic concepts
of what Docker is like.
How do we put to use so that's that's the concept
we will do that.
So let's begin. So in order for us to run
some program like some kind of a process.
Or some program we want to run.
We want to execute it,
so we need to provide it a computer.
To run right, it needs to have some CPU.
Some storage.
Some memory or RAM.
Let's call it RAM and so that that's basic resources
you need to have for the process to able to
be executing properly.
That's what the computer really provides the operating system on
the computer typically provides these things.
For the process to be able to consume these resources,
so that's the that's the common idea.
We know that we know that I'm ready.
You want to run something that's what you need to
give.
So for example, I'm running this thing called Notability,
which is the application I'm using to write on my
computer.
It is using some memory, some CPU,
some storage on the computer.
You can see that in the activity monitor format.
And here you can sort out CPU consumption.
And memory consumption and disk consumption network consumption.
And let's go focus on the process that called Notability.
So let's see we can find Notability here.
And go by N so letter N there we go.
So one of these guys should be Notability.
Where is it? Is it hiding or something there?
That's the Notability app, right?
So if you now look at this carefully,
this is consuming some amount of CPU.
Or it moved, but that's that's the one 0.5
sometimes one.
So this is like a percent of a CPU,
like half a percent, 1% very very low consumption of CPU
from this application called Notability.
So it's a very good application,
very consumes very little of CPU,
so that's the CPU consumption idea.
We have the next concept here which is about memory
consumption.
We can do the same thing here.
Look for the application called Notability.
And see how much memory is it consuming.
So here's the Notability app.
I hope this is very small.
I think it is small,
but probably still you're able to read because I'm
highlighting.
I'm assuming that it's legible,
so Notability seems to be consuming 159 megabytes.
Of memory. That's the consumption from this particular application
called that that I'm using to write notes on the
computer.
And same with you know energy consumption,
how much battery it consumed or how much electricity it's
consumed for that particular process.
So they give you data,
more data available these days from Macintosh.
Disk consumption. You can see how much disk space is
being used by that particular process and how much
network activity is taking on on behalf of that
process.
Now typically an application like this.
Will not consume any network activity at all,
unless you have configured some kind of communication between
this Notability application and maybe have it back it up
to iCloud.
Or back it up to some other storage location that
you have.
So all my notes that you have here might get
backed up to some other computer somewhere else,
and that is network based activity,
right? So that's that's the network consumption.
So we are looking at a computer which gives you
some storage like disk storage network.
And it's being consumed by some application called Notability.
That's an example, right? Now if you want.
A particular port. On the network.
Let's say port number 3132. I'm making stuff up
right now.
That's the port assume that you need that port
on the machine.
And this requires some storage, so you you allocate like say
10 GB of storage.
That's probably too much for this app,
but I'm just giving it. I'm being generous.
It required like 159 MB. You saw that in the
in the.
In the in the activity monitor,
so you might give it like say I'll give it
400 MB memory allocation.
The actual usage is this much.
But I'm allocating a quota of 400 MB as a
allocation of quota. Maybe the CPU consumption you saw was
ranging from 0.5%.
To 1% of the overall CPU availability and I have
multiple cores here,
so that's a lot. It's a it's a decent size machine,
but what we have is I think people are pinging
me on LinkedIn and let's see what's going on there.
Hmm. Are they having trouble joining in or what?
No, no, no, no, no, no trouble yet.
This this teams thing I sometimes don't like it at
all,
but the so you get the idea that we have to
allocate the CPU that we have the memory that we
have the storage that we have the network that we
have in our computer to a process in order for
it to function properly.
So that's the concept. Now if you want to run
multiple of these things simultaneously.
That becomes a challenge. Say for example, I want to run
two sets of notability.
Another version of notability at the same time on the
same computer.
Well, I can allocate in a 1% to this guy because
I have like lots of CPU,
so maybe I have how much CPU do I have?
I don't know. Let's go find out.
So we have how many CPUs M1 Mac is like multicore,
so lots of probably 8 core or maybe 60 core.
I don't know how many course we have,
but it's. So so so I have 1600% of CPU available
out of which 1% can be very easily given to this
second notability very easily.
Same with RAM. I have tons and tons of RAM.
I can allocate like extra 400 to this guy.
No problem. Storage I have quite a bit of storage so
I can allocate 10 GB to this guy.
No big deal. The problem comes in when we have
a collision like this notability will want to back up
its notes and will also use the same port.
3132 of that's a conflict.
And that means we have collided one notability with the
other on the port access.
And that's why the second notability will not work.
But I want to work.
I want things to work the way I want.
Anytime I want wherever I want that's my desire.
And that is where we need to have a way
to break this collision like 3132 by this notability and
3132 by this notability.
We need to break somehow find a way to.
Address that conflict. To be to be to be taking an
example from our.
Friends company Redis, let's take that Redis so Eric who's
online right now works for this company Redis.
That is an open source product by the way.
He. Redis, where is Redis?
So Redis has provided us some getting started documentation.
Let's go see that. How do you install it?
And how do you install on Linux and a bunch
of other things?
But bottom line is we want to use the
Docker version,
which I will be using.
As I said, you know when Eric joined,
I just told I'll be using your example.
I'll be using now this guy Redis uses a port.
So let's see Redis port. What's the what's the port
that Redis uses?
Let's go find out. I think it's 6379 so this
Redis app that.
Redis uses 6379 port.
That's the port it wants to occupy.
That's it. That's how it is designed.
So if you run Redis on a computer it will
take on that port.
Now if you want to run two Redis instances on the
same computer,
impossible. They will want the same port and collide.
But I want to run multiple Redis things,
multiple Redis instances on the same hardware.
How do you break that?
That is where Docker comes in.
What Docker does?
Is it basically gives you?
A completely isolated environment.
What does it mean? Let's go find out.
So let's go to this thing called the container store,
right? If you go to the container store,
it has boxes, right? You see?
This thing that you see the container store is giving you
this box and that box and that box.
You can put stuff individually in separate boxes,
so that was a very dumb example.
Let's go look at a slightly better,
more relatable example.
Which is going to be.
Another search, let's call it Docker container and look
at some images.
So here is a classic visualization of a container.
Let's see some more.
Specific physical related examples,
physical world related examples.
So for example, shipping containers is a very relatable idea.
So this is a shipping container.
You may have seen it multiple places,
especially near the port.
Some kind of a port you will have this kind of
thing.
This is a shipping container.
Now the idea of shipping container is that it is
standardized.
It's exactly that dimension, so worldwide is the standard of
a container and that's the container.
That's how it is designed.
You can put it on a train.
You can put it on a ship.
You can put it wherever you want.
It's the exact same size.
You can track it stack stack one on top of
the other and you can create.
Whatever you want and it's.
Isolated within the whatever it whatever whatever is inside
has nothing or no relation with anything outside the container.
It's like completely full full,
you know. Self contained setup inside the box inside the
container.
So that's the concept where Docker came along.
What are we doing is giving each set of applications
a separate?
Self contained. Container.
That's the idea of Docker container.
So if you have one computer of some sorts.
It can be, you know, Linux or Mac or Windows.
Whatever you have, what it does.
Is that it creates?
Separate isolated environments.
Any number of them as long as your machine can
handle them.
So whatever your capacity of the machine is,
you can create and. Let you run individual Redis applications if
you like.
Redis again on the same computer.
And 6379 allocated to this Redis 6379 allocated to this
Redis.
No problem because it is isolated from each other.
What does it mean? Isolation means that these guys cannot
talk to each other like absolutely not.
There's no connection whatsoever at all.
Absolutely no connection whatsoever between the containers and with anything
else outside the containers like zero connection.
That means this machine or this container cannot talk
to the computer.
Cannot talk to the Internet.
Cannot talk to any other container at all like nothing.
Completely disconnected. That's the design.
The beginning point. Now.
When you have such a setup,
you will think why is the list even talking about
that?
Why would my machine not be interested in talking to
another or my computer or my public Internet or
whatever I have?
I need a way to connect.
I need a way to communicate.
I need a way to interact.
So yes, that that is absolutely possible,
but by default everything is disconnected,
isolated. Imagine you have.
You have an iPhone.
And you put this iPhone on a desk.
And the desk, so let's go get this iPhone.
Oh. I should definitely, but yeah,
get this iPhone and then bring it home.
Put it on the desk. Put airplane mode on,
disable Wi-Fi, disable Bluetooth, disable network, disable the SIM card.
Whatever you have, the connectivity to your cellular company.
Disconnect everything and put it on your desk.
What can that phone connect to?
The answer is nothing. That's exactly how the container will
behave.
Nothing, no connections whatsoever. By default, nothing is connected.
By default, nothing is able to talk to anything else
on the planet.
So now we have to explicitly open things for it
to talk to other things,
and we'll talk about how we do that by illustrating an
example.
So by default, nothing can communicate to anything else.
Everything is isolated. You can run random processes here.
For example, you can run your your your engine X
engine X process here if you like.
You can run a database here like MySQL if you
like.
Or you can have more containers running some other random
things like PostgreSQL if you like.
And they will all be isolated from each other.
By the way, we'll have another session just like that
extension of the current session about Docker Compose where we'll
actually talk about multiple such containers simultaneously being deployed and used.
That is a separate follow up topic.
We call it Docker Compose. We'll go through that in
the next exactly seven days from now.
So you know Tuesday, same time, which will be India,
Wednesday, 7 o'clock, same time, same everything, but we'll have
a separate detailed follow up discussion to this on
Docker Compose with multiple containers right now focusing on fundamentals.
Just one container. That's what we're doing to understand
fundamentals.
Having said these ideas about what a container is,
let's go into examples. So here is my command line
where I have.
The Docker application installed. Running with nothing.
So it is blank. And so you see that the result
came out with absolutely blank results. There's nothing running right now.
So now we will run something. How do you run
something?
You need to get something to run so I don't
have anything.
If I look at any of the images there are none.
These images that I'm talking about are something like.
Something like let's go see here. Let's go to the
applications.
And I was talking about this thing called notability,
right? With notability.
There so that app you see.
This notability app.
Is the image of the app?
And whatever is running on the when you double
click this thing.
That's an instantiation of that image.
So it starts to run. So when this thing runs,
it looks like.
Looks like that thing which I saw where the
not there there.
So this thing yellow thing.
The yellow paper that I have.
The yellow notebook is notability.
That's the instance of.
Where did it go finder come on there yeah.
So this is a image.
And the instance that I have run because I ran
it.
So it it runs like an application that's the.
That the PS command will illustrate that as we
as we execute things will will take various examples to
run.
So we I don't have redis on my machine,
so I need to get that redis image from somewhere.
Right, that's what I will be doing now.
So I have notability. I'm able to run it by double
clicking on it so I can just double click on
this and it starts notability.
So you see I double click. And there I go
double click and starts notability and this is where
I write.
So that's the idea about notability app and image and
its instantiation.
So this is an instance.
That. Is the image of the application you get
that from the app store.
So go to the app store and find notability.
You will find it somewhere here.
So if you search for it.
Come on app store. I think it's kind of slow for
some reason not responding,
but a big deal it will.
It will eventually load up.
For right now it's not talking to me,
so I'll ignore it.
Yeah, forget it. Yeah, you can download app from app store.
That's where the app comes from.
You can download an image from the image store,
a Docker image. So the Docker images come from this
thing called.
So notability there's notability for Mac and that the app
you can update it if you like.
I don't have to update right now,
but you can update for the nap.
But that's where it comes from.
That's the source of this application called notability.
So now let us see where we can get a
redis container.
So I go to this thing called the store for images.
So most commonly used store is called Docker Hub.
Docker Hub is available. Let's I think I'm already logged
in into Firefox,
so I'll just go to Docker Hub there.
And log in and you will see that I have.
Not signed in. I thought I did.
Maybe I did. So I sign in.
I put in my password.
And then I put in my authentication code.
From here. And I verify.
And then I am in to inside Docker Hub.
Now in Docker Hub there are lots of applications available.
Lots of images available, so let's go look for Redis,
not registered Redis. So here is Redis image updated a
day ago.
Our friend Eric has updated this or maybe his friends have
his company has.
So Redis has an open source product for key value storage.
It's kind of like a very useful.
It can also be used as a database if you
like by the way it is.
So that Redis thing you can download an image from here.
How do you download that image?
You run this command. Redis pull a Docker pull,
so we run that command on the terminal like that.
Like this. And I'll make the font a little
bigger so you can see it.
There we go.
And here I'm going to pull that Redis image.
So it is pulling down and it came down.
So now I have that image.
Typing mistake Docker images there Redis image created 27 hours
ago yesterday.
Basically somebody from Eric's company created this image a day
ago so that image came down.
Which came from this location.
So that's the image. You can see that image image ID
this ID number 84 echo Delta.
Whatever you see is the same thing that you see here.
Where is the image ID?
Oh, I think I have to look at the ARM version
of this to match the.
Image ID. Because my machine is a arm machine,
not a Intel machine. That's why the image ID did
not match.
So I should clarify what I just said,
which I did not clarify this machine that I am
dealing with this computer is a M1 Mac.
It is the arm architecture.
It is not Intel.
That is why these numbers are not matching up.
It pulls up the right image for the relevant architecture.
And this one is by default shows you on the
browser website shows you the Intel architecture image IDs.
That's why you see a mismatch or apparent mismatch of what
came down from the store.
But bottom line is the valid image is available to us
in this location and now we can actually make use
of that image to instantiate a container running Redis.
How do you do that?
Simply double click, but not really because there's nothing nothing
to click here.
It's a command line approach, right?
So we have to actually execute that.
How do you execute that?
You say Docker. Run.
And then you have to run that thing called
Redis,
but you will get surprised that it will not.
And you will ask me why did it not run?
If I just say run Redis and it will just
do nothing and it actually so yeah,
Redis has changed a little bit.
It is running right now.
You can see that it is running.
It used to not run in earlier version,
but they have changed. It looks like so.
What I'm showing you now is let's go see that.
So here I started. To run Redis,
the image that I downloaded from Docker Hub,
which was created this mean these many hours ago,
it is now running on.
Docker right there. That's the Docker application.
And it is ready to accept connections.
It is running on the port that I mentioned 6379.
And it is. Available for anybody to use.
However, you will notice that if you try to try
to talk to this Redis instance,
it will not respond because it is isolated.
So let's go try that and it will not respond.
And so I'm going to open another terminal.
Uh, let me just it is my ink here,
so I'm going to erase the ink.
There we go, and then I'll leave this container running
here on the on the on the right half.
Open a new terminal. And try to interact with that
container. And you will find that it doesn't want to
talk to you. Because it's isolated.
So here I go. Docker PS dash A.
And you see that this thing is running.
Up and running up and running for about a minute
at that port number 6379.
And if I try to ping it.
There is no address to ping because it hasn't been
exposed,
so I cannot actually ping this this port detail needs
to show me an address.
I need to ping. I don't have an address.
I just have a port that is all within the
container. So we have in our machine a container.
Running Redis. And is using the port number 6379,
but it's not exposed, so my Mac.
Cannot access it. Because it is not exposed outside the
container.
I need to run it in a way that it exposes
that port to the world outside.
I haven't done that in my ordinary in execution in this
step here, but I started Redis container.
It did not expose anything in just.
I just ran it like casually running without actually telling it
to expose that particular port to the machine here on
the Mac.
I did not do that,
so let me show you how to do that and then
we can interact with that Redis container.
Actually for real. So let's do that piece.
What I'm going to do now is.
Break that container. So I broke it.
And then see my Docker PS dash A.
You will see that a dead body is there.
The dead body was exited 9 seconds ago.
And this was created 2 minutes ago.
And. It is now dead,
so I need to clean up this dead body.
You don't have to clean up dead bodies,
but you can. I call him dead bodies,
but they're actually exited containers at the right phrase
to say I call it dead body because it's exited,
but it's dead container so you can clean it up
with this.
And what I'm typing here is the container ID number
from here from the beginning.
I just typing a few letters of that and it
cleans up the dead body out completely.
OK, I forgot the commands apparently.
Docker. RM minus F. And then 89B02.
And then it kills the dead body out completely extinguishes it.
Now you see Docker PS dash A.
It will show you nothing.
So blank. No dead bodies.
So now let us run that Docker container one more
time.
How did we run the first time I ran it
like this right?
What I want to do now is to expose the port
that it has.
I know it's 6379. I want to expose it.
To the container to the to the machine outside.
What does it mean? It means like this.
So I have the container.
Port number 6379. I want to map it.
To the actual machine on the Mac.
On port number 6379, that's the mapping I want to
allow.
So I had to write this like this.
I had to say dash P. 6379.
Colon 6379 and I'm going by my memory.
I haven't even referring, but I think I'm right.
So that's the command you have to pass.
To this command line.
And then this port 6379 will become available to the
Macintosh.
That's what you will see now.
So let's go run it.
I'm going to erase the ink.
And type in. P 6379 colon 6379.
And then run it.
It fails. Am I writing it incorrectly?
Probably. So let's go see.
So container networking feature sets are written down in
documentation and this is how you do it.
Yeah, so I was doing it correctly.
But apparently. It did not like it.
Bad directive, wrong number of arguments.
Let's type it again. Maybe the typing mistake of some
sort.
So Docker Docker run Redis.
Dash P and I'm going to map this to some
other port.
So let's say. 6379 happy to 6379.
And I'll follow the instructions provided by these guys.
So map it to the.
Map TCP port number 80 to the container port on
Docker host.
This should work.
No, no, no, it's not so.
Let me let me show you a different example.
I did not. I just picked up Redis because Eric
showed up so I don't know what they have changed
with Redis,
but I'll show you another example that I that I
it might work.
So the example I would like to use is engine X
slightly simpler and I'm kind of familiar with this a
whole lot than Redis.
I just picked Redis because Eric is here.
Eric worked for Redis. So try it was a good
try.
You must have changed something.
I don't know. I'll figure out maybe next time when
we meet on Tuesday.
I'll have a reaction to that.
So engine X as the application as a web server.
It also has a Docker engine X image available,
so let's go look at that.
And so here is your Docker engine X image.
We can bring it down from this location simply just
Docker pull the image from engine X so it pulls
down the image.
Now you will have that image available to us locally.
We'll make use of it. What it is.
What engine X is is a web server,
so it it runs static websites or even dynamic website.
But for our example, we'll just run a simple default engine
X installation,
and so now we have in our machine two images.
They are the Redis image.
And the engine X image we have any dead processes here
with us.
So let's go see how many dead processes we have two
of them.
I kill both of them by running this command.
Docker RM minus F.
And Docker PS minus AQ.
That should clean out all the dead bodies.
So now we have doctor PS dash A with nothing.
I want to run engine X,
so I'll say Docker run engine X that should run engine
X.
And it is running engine X runs on port number
80.
So. I will. I will look at the details that
is providing us.
We are running engine X process and it is.
Not giving us the port number detail in this log,
but I know it runs on port 80,
so we'll go look at that.
But before that we had to expose that port to the
machine outside,
so we'll do that piece before we can actually access
the engine X process.
Engine X casual run like that.
And remove the dead body.
You don't have to remove dead body,
but I'm just going through the process that there is
there is clarity.
So the dead body of engine X is dead,
it's gone. Oh sorry,
Docker PS dash A is nothing there.
Now I'll run Docker run engine X and this time what
I want to be able to do is map a port.
Like that.
Who you know what? Something is broken with Docker.
This has nothing to do with either Docker for Mac.
So what I want to do is change over this machine
to a Linux box.
I'll just go to a Linux box right now.
Here we go.
So there we have a Linux machine.
And here are lots of images right now.
I have tons and tons of images there.
I'll just download our engine X machine and play with
it.
So that's a different machine it's running Linux.
And here I will just go back to already example.
Let's go see Docker pull radius.
Good pulls and we should be able to run
it just like that.
Docker run red radius.
Port number 6379 colon 6379. And run it.
Strange.
Am I forgetting something about port mapping or what?
Yeah, I'm looking now and trying to look at the
commands.
That's I think I don't think you need the extra.
If you don't change the host name,
I think I'm going to put in chat.
Whoops, but I think this is all you need.
I don't know if they're changing the port number on this,
but I thought that was the command.
All you need for setting the port.
For Redis, but that would be Redis.
Right, this is the ping command,
but I want to expose it first,
right? I see what you're saying.
I see the that's just yeah,
I thought this was to change the port here.
Did you say 6390?
Yeah, this is to change the port because yeah,
that was that you change the port.
That was like if you want to change the port.
For I see, I see, I see what you're saying.
So doctor run, doctor run Redis.
And then 6390 that's just to change it.
It's you can set it to fix 379
because that's what you have in the config,
right? There's also a config file you could edit.
Etsy host file and Etsy host directory.
So maybe it's this.
I'm looking at this.
I don't haven't set change the ports so,
but there is this code.
Looking now here it is.
Host port host port database.
So let's let's follow the official instruction.
So see what these guys tell us.
So here it is.
So how do you quit pull?
So we pulled it right then we want to run.
So you say Docker run and it runs.
Now we have to run process and storage.
And. Where's the port mapping?
You don't see it there.
Is that it down there?
I think you need the CLI,
or maybe it's this URL talks about it,
but it's the CLI. Yeah, so.
And there it is. I think we have to run it like this.
You're right. Yeah, you gotta repeat the port.
It's like it's just start port to end port.
Looks like right that repeats the ports.
It's the address range.
Support range, right?
Because it's 6379 to 6379.
Looks like it's a range.
Let's go. Let's go try what these guys are
suggesting in the documentation.
So I'm opening up.
A command line that I will write what I have.
And. See what the command here may be pseudo run
dash D name Redis test port mapping and then volume mapping.
So let's go. Let's go exactly reproduce what these guys are
doing so we have Docker run dash D then the name.
Then the port mapping.
We'll follow exactly what this documentation suggests.
And then give it the image name.
Let me write this so Docker run dash D.
Then a name.
Call it whatever test then port mapping.
6379.
6379 and then a volume mapping which we don't need to
within pass the image name.
And that should work. Maybe did.
It did. It did work. So by the way it is working so missing.
The dash D option. Apparently it needs to be passed.
Looks like earlier I was running Docker.
Run and Redis.
And just doing a port mapping like that.
But now that I was the thing I was missing with the
dash D option. And that is what.
Resolved it. So now we have it running. Let's go see what is
running. We'll see that it is actually running a port number
that is available to us on local computer. Was it sorry to
interrupt you? Was the dash D option for Docker? No dash D
option is to run it persistently in the background.
Persistence OK, thanks. Persistence in the background
so it will keep on running in the background. You don't have
to wait for it on the command line, whereas the other option
here it makes you wait on the command line. So there is some
difference in the way Redis operates it seems.
In terms of without the dash D option, so let's go clean up
everything and do it again. So Docker RM dash F clean out
everything and then we have. We have nothing running.
And then we'll run what we have in the line number 9 on this
side and will clean out the name part and just leave it like
that. So it's very similar to what we have before.
Right, and even match it up like just like I was saying,
Docker run Redis with the dash D added and a dash P added.
And the only thing I add is dash D and let's see if this line
number 9 runs it properly. I think that's the resolution, so
let's go verify that. So here we go. We have nothing running.
And then we run the command from line number 9 on the right side,
type it on the left side and we get a fatal error. That means
we have to have this dash D up.
Ahead here somewhere. I think this is the how you how you
configure the command. I think that's where it boils down to.
So let's go see we have nothing running here. We have dead
bodies, so we clean them up.
And now we have nothing running here and then we run and it
runs. So that is the modification. We have to insert
this dash D here.
In order for it to properly execute in the background in a
fashion. So that's that was the resolution. Now let's go see
what Docker dash D does. Docker dash D is a daemon mode. If I
remember right, that's the way Docker describes it.
Docker daemon mode.
And so that's the daemon mode configuration and it does
mention a dash D option somewhere.
Where does it say?
It doesn't describe it, but it is definitely daemon mode. That
is for sure. So it is running. Let us go see what is running.
You will see that it is running a Redis container and we should
be able to interact with this Redis container. How do we do
that? It is it is dead.
Why did it die?
It ran and died. It still doesn't like that. It is dying in
the background. Still the same error, but in the background in
daemon mode. In daemon mode it is still dying. So let's go
to daemon Redis and let's switch to NGINX. So same thing.
NGINX.
And I'll try attempting a cleanup.
And then I examine that nothing is running and then I run this
next thing. This should run and let's go see what is running.
And you see that it also died.
Why is it dying?
Well, I don't know, but that's the best part of a demo is when
they when you have to troubleshoot. So it's it's the
best way to learn for sure.
Exec P not found. I mean, come on, are you kidding me?
OK, let's go. Let's go change the machine to Linux and
reproduce the same thing in Linux. So this this Macintosh
may be different. I don't know. I usually run mostly on the
Linux side, so let's go SSH back to Linux machine.
And here we will run the same command like line number 10 line
number 12. That command. And before that I need to pull
Docker pull NGINX. It should pull.
And then I'm going to execute Docker run NGINX and port
number 80 is probably occupied, so I had to give it like some
other port.
So I'm assigning an arbitrary port for me to use on the other
machine, and let us see if this thing runs.
And see if I can name it something name it Nilesh.
It ran. Let's go examine its logs.
And so you see that this thing is actually running something
else by the name Nilesh, not by this. So something else is
running by the name Nilesh there.
So there are lots of process. This is a live functional
machine and so there are lots of processes already running
right now, but one of them should be the one we just
started. So Docker PS dash A and then grep for NGINX and see
what comes up.
And yes, it is.
NGINX is exited again.
Nine minutes ago exited hmm.
What is going on? I'm at a loss, so why is it dying?
Maybe because I'm not using it properly, so that must be the
reason there's no other reason. So Docker RM NSF NGINX and I'm
going to bring this one up here and clean out all the NGINX
processes. Then I will look for anything running with the
NGINX. There's nothing then I will run Docker run NGINX and
see what pops up.
And it is seemingly running something.
But I cannot access it because I'm not exposed that port to
anything outside. So I'll exit that.
Look for the NGINX dead process and this time I will modify my
command and I let's go read the proper way to run on Docker
website because I must be missing something fundamental.
So Docker run.
Port mapping. Demon mode, let's see, how do you do that?
This is exactly how it describes.
So where's the port mapping thing?
That is how you do it. It's a darker Docker run. This is the
official documentation. Copy paste from documentation.
And so no changes made. This is the documentation. The only
change I will make is the image.
Will use NGINX. There's the only image only change I'm making.
The only change I will make is the image will use NGINX.
There's the only image only change I'm making.
And let's see if you run it that way. What happens?
Oh address occupied. So this address is occupied on port
number 8E is occupied. I had to assign some other port 8887
randomly assigned port 8887.
It ran, but it exited. Why?
Now it is running. OK, we did something and it is running. So
that command we just tried.
And this thing seems to run. Let us examine without killing it
on another terminal. What is running and how and where?
So here I'm going to go back to the same machine I was dealing
with. And look for my Docker processes.
That contain NGINX.
And so I have something running right there. This guy.
Is running for 34 seconds and it is accessible to me on that
word. Let's go dissect this and so here we have.
This process ID 3E401 running engine X up and running for 35 seconds.
And the port mapping is like this.
What does it mean?
Let's go dissect that.
This port mapping is what I want to focus on.
And what it does is it maps.
It maps that port to the machine port 8887.
This machine port. Which is the machine called iMac.
So I should visit that port and I should see engine X on my web browser.
So I should visit that port.
On the iMac.
Which is running Linux, by the way, just so you don't want to confuse you,
runs Linux.
And the port was 8887.
That should open up engine X and there it did.
What am I visiting? I am visiting this URL.
Let me let me clean up a little bit so you can focus on exactly what we did
and how are we running it.
So this is the command I think I ran. Let's go cross check that.
Erasing ink.
The command I ran was that command.
So I'll put that in the notepad.
The line number one, that's what I ran. Line number two same thing.
And then it runs by this process ID.
Which is a randomly assigned ID. The image name.
The entry point up and running for so long and then the address mapping.
Here is the mapping of the ports and when we open that machine iMac,
which is my internal machine, you can also see the same result.
If you go to my machine's physical address, which is 192.168.1.10, I think.
And then the port number is 8887. You will see the same exact result.
If you visit that page, let's go see that.
And I will open a browser, new tab, open result, same thing.
Do you see the same index result coming up available to you?
We are visiting.
We are visiting this port on that IP address, which is the same thing as this port on this name.
So the traffic from this Mac.
Safari.
Is hitting that IP address on that port on a Mac on on on the iMac.
The name is iMac, but it is actually running Linux.
And this.
Is the machine there which gets mapped to.
That port 80s number 80 on this container.
And that's why it shows what it shows. Otherwise it would not. I think somebody else is.
We are letting you know, Nilesh, are you coming up close to the hour? A couple minutes.
Yes, I understand. So somebody just joined Shondalin Betts.
And I'm sorry, I think I ignored that person for quite some time. Apparently that person has been waiting.
For so long, and I'm sorry I was just ignoring you.
Hey, you can speak. You can open your microphone and speak if you like.
Hi, hello.
Hello, how are you? Nice to meet you. It's nice to meet you also.
So I'm so sorry for keeping you waiting.
You're OK. How long did you wait for this? Not too long. Not too long. Not too long. I thought I must have ignored you for like so long because I was like busy talking describing something.
You're good. You're good. No, don't worry.
I see. So I'm sorry again for delay because I'm.
So let's let's recap. What did we just do?
Erasing that ink so it goes away and then.
What did we attempt? We described the idea of what a Docker container does. How does isolate itself? And so we were successful.
Let's see successful finally in a configuration on this machine.
The name is Mac, but it is not a Mac. It is actually Ubuntu. I just want to clarify that.
I just have a Mac that I do nothing with, so I run Ubuntu on it.
It's an old machine, but it's a very big giant computer, so I don't want to like throw it away, so I put Ubuntu on it. So it actually becomes useful.
This has the same IP address here.
And on that machine. On this Linux machine, I was able to get an engine X image pulled down from the Docker Hub engine X image pulled out from Docker Hub, and then I ran it.
Ran it like command number one line number one here. That's what I used to run and it ran, but when it ran without the dash P option.
It did not expose any port, so you can run engine X and it will run engine X just fine.
But not expose this port to the machine here, so there is no connection.
That's why we cannot access it in order for us to access that engine X server running on that container.
That we downloaded image for from Docker Hub.
We ran it like this so that this connection becomes valid.
The port mapping becomes valid.
So when you run it like this, the extra command flag passed along.
It maps this port.
To the port number 80 inside the container, so this is the container side.
This is the machine side.
And that's what we're visiting.
Now let us go see similar things with other other ideas like, for example, I initially began discussing concepts of of network sharing.
Which I illustrated this example also illustrate. By the way, if you if you if you need to run because of time, you welcome to hang up and disappear.
Thank you for joining. If you're leaving, we'll catch you again next Tuesday at the same exact time, same exact method, except it's a different registration link.
The same it's still free, still open to everybody. You can just sign on. If you want to go, you can hang up and go.
I'll conclude what I am describing and summarize it and then we hang up and we'll meet again Tuesday.
Same time, so I think I plan to do this like more often or rather I may plan to continue this every Tuesday, every Tuesday at the same exact time.
Tuesday when I say Tuesday in India, it becomes Wednesday. So just realize that I'll be doing this, but I need ideas of topics.
If you if you suggest topic ideas, please do that. I will add on new sessions every so often every seven days.
I'll do something of your choice. So if you have something in mind, bring it on.
I welcome anything and everything in terms of Linux or cloud, whatever it is, bring it on, suggest a topic.
I'll take it up and we'll talk about it. We'll do live exercises without using PowerPoint. I don't have any.
So that's that's my plan.
Eric is typing something. You can also tweet on Twitter, social media, LinkedIn, whatever, whatever you feel like. You can type here also. No problem.
If you want to hang up, you are welcome.
Maybe developer toolkit would be cool or like, you know, like developer platforms, different full stack kind of.
You like, I don't know, node or I don't know, Tanzu or anything like the stuff you're talking about is really cool.
Docker related is good too, but maybe how you go like the end end like maybe review like what you're developing in like like the tools you're using, right?
To load Docker and the script, maybe more scripting like bash even. That's just some ideas.
OK, OK, I welcome that. So I will I will bring it on the next session we will have on next time, seven days from now.
And then after that I will schedule new topics that I'll post them on LinkedIn and Twitter and you will you will see them coming along.
So let's let's continue with what I just said about network mapping. You saw this network mapping. Maybe I should clarify that a little bit more.
If you are missing on this idea, which is this number here, number four, line number four, I'll elaborate on that.
Make it bigger. And so this is the mapping.
And we accomplish that by this flag here right there like that.
That's the flag we pass in line number 12.
And the mapping goes like from the machine.
On that port.
To the container.
That's what you see in this representation, which expands like this, and so that's why we are able to see what the container is showing us here.
Because we are visiting that port on the machine, so it shows up. Having said, let's talk about a different topic, which is storage.
So this is the default page you see. If I want to change it to some other page or something else, I need to provide that page.
I need to say hello Nilesh or hello Eric or something like that, right? You need to change the page and give it to the container for it to pick it up and show.
That requires a second mapping, a second mapping called volume mapping with a dash V flag like dash P here.
Port mapping. We have a different flag available for it to be able to.
Map some file.
To a file in the container.
Let's see how we do that. What I want to do is change this.
The default page. Welcome to engine X page. It's something else. That's my plan. I want to do that by passing on a file from here.
To the container by a V mapping dash V mapping. I'll do that now.
So here I go.
I will expand our discussion here. Put a V mapping dash V and give it some file dot HTML and map it to.
The location inside the container, which happens to be for engine X happens to be. I think it is user.
Share.
Engine X HTML. If I am not mistaken, that's the location.
But if I'm mistaken, we'll we'll debug it again. No, no big deal there. So this file dot HTML I need to create and put it in some location, right?
So that some location needs to exist on the real machine.
And that some location needs to contain that file that I'm talking about, which I don't have yet. So I need to create a new file called index dot HTML and I'll put that in some location.
On the machine I'm dealing with.
This is a machine locally sitting right next to my feet on underneath the desk, and that is the machine that will carry the some location folder and the index HTML file containing say hello.
Summer point.
That's the file I will create now. So what I'll do is go to the terminal.
Break this engine X.
Kill everything.
Come on, die with the death command.
I need to write it again apparently. So here we go. Radar car RM or don't kill it with this. This is a live machine. I cannot kill everything there. So thank goodness I didn't kill.
It's like runs.
Multiple processes are running right there. I don't want to kill them.
There are probably a huge bunch.
Thank goodness I didn't kill arbitrarily.
Bunch of processes I already run there, so I thank goodness I didn't kill them.
Having said I will leave whatever that is there running as is examine what is.
Containing engine X.
And clean out.
So there are four things that I need to like clinically kill them. So I'll kill these guys specifically, not everything.
Or I just leave the dead bodies alone and handle them later. But what I want to do now is find a folder, create a directory. I call it.
I call it some location, right? Some location there it is some location.
Now in there I need to create a file so I create that file like this.
That's the file created in that some location location.
And in this file I need to have something like hello summer part.
So I added that.
And now I can see that the file contains hello summer part. What I need to be able to see is when I visit that website.
I should see hello summer part as opposed to welcome to engine X.
And I want to do this with a volume mapping. So how do you do that? Like line number 22.
We have.
Created this file in some location on that machine. We want to map it like this.
And pass it alongside here.
And execute the process one more time.
What it will do is it will override the default file that is usually sitting in this location that looks like this.
And swap it out.
With our own index HTML that's volume mapping.
So that's what you will see now and I hope I will succeed.
You never know you may have to resort to debugging.
But it's OK.
So let's go do it.
So I'll take this.
And craft.
My next command.
Which looks like.
The first line except is a modification. The modification is.
Like that.
So what did I add? The initial line that we ran was like this.
And we added on this component.
In this section.
But rest everything else is the same, right? So this should pick up the new file and show us hello summer fun.
And that's what I expect to see. Now let's go run this command.
So I'll take that command.
Copy it.
From here line number 27.
And.
Go to my machine.
And there I have.
The some location path has to be very clear and succinct, precise. That is a requirement.
We need to call it out that it is actually in the home location.
Home folder followed by some location where the index HTML sits.
That has to be clarified, otherwise it will not know where the file is.
So here I go. I will copy this now.
And.
Paste it.
So it seems to be picking up. Let's go see whether we go to that web browser and see if it shows exactly what we expect to see by refreshing the web page.
And we see hello summer fun right there.
So that was volume mapping.
So Eric is saying need to get ready to bed. I think it is. He's on the East Coast. Eric is on the East Coast. It is bedtime for him. So we say bye bye to him, but he's saying that we can connect on LinkedIn with Nilesh, but I know him.
Everybody else.
He wants to say connect to everybody else, and so you should. Absolutely. And in fact, I would suggest that before you hang up, sign on to this website, the cloud seminar. It is a free site. It is my site.
Sign on here and you get notifications and whenever I do live sessions, they just show. So if you are if you are here, you can, you know, just just say subscribe and it is free.
So you just put in your email address and then you will form. You will be invited to a community of sorts. You can connect through that and you can of course reach out to each other, talk to each other, connect with people on LinkedIn.
There are various companies. People are here like some of you. I don't even know personally, so I would like to get to know you personally. I will do that.
So yeah, welcome. So definitely sign up with this. This this cloud seminar. Just put in your email address here and say subscribe.
That should send you send you my messages whenever I send a.
Run a session like this. I will send out a message. You will receive that in email. You will probably more likely to receive those messages on Twitter and LinkedIn and Facebook and bunch of other socials in addition to this, but it's a good idea to subscribe to this.
And by the way, here you will see that I have tons and tons of content. I've been doing this thing for 14 years. This is my 15th year.
And so you will find that you will find lots of things here.
Which may be of your interest.
I cannot find my own stuff. That's the challenge.
Where is my stuff? Maybe here.
Yeah, here I think that should should get your attention. So see, I've been doing this for 14 years, 14 plus years. So this is the 15th one. I have done 557 video presentations recorded.
865 GB of files.
10,000,000 429 652 words spoken.
This is not a joke. I actually calculated each and every word and you will tell you last me how and I'll show you how 1356 hours spoken.
And all of this is available to you for free. Yes.
All the content is free now, so you can watch it if you like, or you'd like join life sessions.
Now, how did I? How did I?
Count the words you will ask.
Well, I have the answer. I use machine learning and.
Something like chat GPT you may have heard of the same company said that creates chat GPT also created a thing called whisper.
Whisper is a transcription tool and what it does is transcribes any audio or video into plain text, basically transcription.
So now I have transcribed each of these videos, 557 of them, and I have a text file containing each and every words ever spoken.
Then I put them in a command like this and I'll show you the command I will.
This is the command I basically use. So hold on, hold on.
Mate mate and the command I would use to get that would be.
Word count.
Minus W and file all of them concatenate and pipe it to word counter and I get the answer.
So that's how I counted each and every word I ever spoke in the last 14 plus years in 557 videos by transcribing every single video I ever did.
Each of these videos like a three hour long, so that's how I did it, and it is actually available so you can see it there.
Click on it, you have access. Having said, let's go back to our doctor discussion.
So this thing is you saw volume mapping also works like that. You can map other things like you know you can limit how much memory can be allocated to a computer to to a container.
You can constrain the idea. The idea of container is to be able to put limits.
Or to contain.
To contain.
Or to limit.
That's that's the thing that is the reason why we call it containers. They are in form.
It allows you to limit things that a container can use. You can limit a container that you will get only one megabyte of memory.
That's it. I may have hundreds of GB, but I'll give you their container. You can get only one megabyte. That's it.
So that you cannot consume more than you are authorized to connect and consume to that much memory limits I can set.
That's a constraint you can put on a container. So that's another way to handle conflict or handle.
Contention between containers. So that's that's another idea. So let's go recap now and you know choose you know in a few minutes we'll actually finish the discussion.
And so we started talking about the concept of sharing sharing. How do you can constrain CPU? How do you constrain RAM?
You can also put limits on CPU and RAM just like this command for mapping a port.
Just like this command for sharing a file. You can share file resources. You can share storage resources.
You can also do network mapping like I just described.
So whatever resources the underlying computer provides, you can craftily allocate it to a given container at the runtime and make use of these things in
a combination of multiple containers running together to produce a valuable useful service that you want for your customers.
So we'll talk about how do you put multiple containers together in our next Tuesday session.
Today we just discussed the fundamentals of CPU RAM limits and I did not actually show you how to do that, but we can show that by another.
I just read the documentation and show you how to set limits. There are commands you have to pass in the command line to set CPU and RAM limits.
And same thing with file storage. You saw here file storage sharing. You saw network mapping in this command and these things I did not show you,
but I can point you to the documentation as to how you can actually limit and constrain CPU consumption and memory consumption for a given Docker container.
Having said, I'm open to questions, so you're welcome to ask if you have or you can always ask anytime you can break the discussion and ask a question if you have.
So go ahead.
Questions are welcome if you have any.
I hope you can see me.
So a question for Shandel in where are you located?
I am in Alabama.
How did you find out about this thing? I don't know you, so I would like.
A friend told me about it on Twitter.
Who?
Um, one of your followers, right? But who? I have many. I just want to know who I rather not say.
It's OK to say.
No, and so I just joined in to see just to.
You're welcome. You don't have to disclose, but I'm just curious. So yeah, I don't. I just don't like to say certain things on an open like network like I see.
Yeah, and so that is totally, totally, totally fine. You don't have to disclose, but you know, nice to meet you. I would like to say.
Yeah, if you if you feel kind of comfortable connecting with me on LinkedIn, you're welcome to do that. Oh absolutely. Thank you.
So if you want to find me on LinkedIn, you can go here.
And type in.
Let's see, what do I type? Type this linkedin.com slash in slash LV Nilesh.
That's my same as Twitter handle.
Do you follow me on Twitter or not yet?
Not yet.
Do you?
Not yet, but that's where I got the information to register.
To me, yes, yes, yes.
You can follow me wherever you feel like or don't follow me if you don't like that's OK.
Totally OK. If you if you feel comfortable talking on a one on one, you're welcome to do that.
Yeah, you're welcome to tweet me and say let's talk and we can talk one on one if you like. If you don't feel comfortable like talking to like in an open group, that's totally fine.
I'll connect with you on LinkedIn. Nice, nice, nice.
So any other questions you have about this topic before we disconnect our session today, please let me know.
I have questions for you. Go ahead.
So I don't have a question particularly on this topic, but I'm just in general curious like why are you doing these sessions for free as such?
And why are you making all your content available for everyone? Like what is your motivation behind this?
Very good question. Very, very good question. I should answer that honestly. So see, I am 56 year old.
I have had three careers. This is my third career. I built a business of my own and made enough money to retire.
I have already retired five years ago, but I still keep making money.
Do you understand that? Yeah, that's a good situation to be in and something which kind of promotes giving back type scenario.
I know. So I do these things because I like to talk. I do these things because I love technology.
I do these things because I like Linux and open source. And so people ask me to do these things that I do it.
And you know, that's the honest answer, because I enjoy doing these things. I've been doing it for 15 years.
I told you so, you know, if you don't have to join and you don't have to listen to my nonsense or you don't have to even, you know, do anything at all.
Do whatever you like. I do this because I like to do. That's the reason I started this whole company is because I like to do these things.
I left Microsoft. You probably know me, right, Amit? Yes.
No, I mean, I think the question was not why you are doing this.
I think it was more why you are doing it for free, but I think you answered that because you kind of retired and you think like you want to help people.
Maybe it's exactly I like doing my stuff, so I keep doing it. And so, you know, if I do it alone, it gets boring, right? Yeah, I would like to have people associated with me. And so I just do it with you as a perfect.
That's perfect. You already helped me on one topic that I asked you questions, so that's perfect. I am yet to experiment and build something around that.
By the way, your question is very valid. Why are you doing it for free? That's a valid, genuine question. No doubt about it. No, because not many people do it these days, so that's why it is very strange.
Yes, that is absolutely true. Yeah, I mean, I appreciate your time that that's all I want to come to, you know.
Yeah, you're welcome. Thank you so. Yeah, you're welcome to disconnect if you like. I think some people already left, but I have a question for you guys, and that is how did you like the session today? What was it that we did? Nice. What was it that we did not that you did not like? Tell me all those things.
Tell me all those things. Tell me what you did not like. Tell me what you liked. Tell me how should I change.
Go ahead.
Hey, Nilesh, this couple. Hi.
No, session went well. This is just a feedback. So on your team screen on your left, I see Nilesh Lodha then welcome to Cloud Genius. So when you start. Yeah, that should go away.
Yeah, because when you write on, you know the app, yeah, some of your text was up that yeah, but I forgot to disable it. Yeah, I'm sorry. Yeah, I thought it's like a template and doesn't go. So I just want to give that press a button here.
This is this will come back. If I go like this, it comes back and I have to like hit the buttons here on that device for it to disappear and I did not do that. Press a button. It goes away.
What this device is?
This device is a stream deck and basically it's also open source by the way. Open source companion app configures a whole bunch of things. I can even turn off my lights and all when I talk, connects audio, connects my microphone here to a device, a sound device, lots of configuration available and all open source stuff. So the device is just a button. It's just a bunch of buttons.
Okay, and yeah, yeah, that's a good point. By the way, I forgot to suppress it. I should suppress. No, I thought like it's a template, you know, in the teams of like, you know, it's not teams. It's me.
This is this is clean video. This is the clean video. Yes, yes, yes.
This is clean feed of the desktop without me. I can move around from corner to corner if you like jumping from corner to corner. Yeah, no, no, sure, sure. I don't like it.
I was like myself. It doesn't do that. Yeah, yeah, no, you're in on the middle screen. Yes, yeah, I can go real size. This is the zoomed up size. Nice. And this is the regular size. This is minimized.
And this disappeared.
Nice. So thank you for that feedback. I forgot. I should have removed it, but I didn't. No, no, no, you're good.
Yeah. So another question for the doctors, you know, mostly I've seen the doctor use cases specifically like the web based applications. Right. So what about what about the the heavy compute intensive applications, you know, like, you know, as an example, maybe
a COTS application. I mean, it's just something Docker is looking at. Yeah, yeah, yeah. So I'll show you a really heavy application. I run here right here.
Very heavy.
It has a tensorflow Kubernetes. Sorry, no, no, no. TensorFlow running here.
And this is my photos app, open source photos app. It has all the photos, albums and videos and, you know, bunch of people like that. And so this is the app that runs all the photos I have like all like probably 69 terabytes of storage.
All the pictures I ever taken in my life are here. Now it's running in a Docker container. Can you believe that?
It is running right here on the same machine that I was talking show you about the iMac, the same iMac run this. This is called photo prism. It is a heavy loaded application.
Are you sharing or I just see only you? Yeah, because we are not sharing.
That's so dumb of me. I just forget to press the right buttons.
So is the image called photo? What did you say the image is called?
Photo prism. Photo prism.
Photo prism is an open source application.
And here it is the documentation for that. And you can run it in Docker or Docker compose.
And so that's how you run it. And it contains a tons of things like here. You can see that I have a huge number of photographs.
All all family pictures. I don't want to show you the photographs, but.
But that's the idea, right? All the pictures I ever taken since I was born. Maybe probably before that. So I have them. I have them stored here. 69.
Terabytes. So thank you. Is it a lightweight application? Is it a web application?
Yes, it's a web application. Is it lightweight? No way. No, no, it requires GPU processing runs tensorflow for face detection, image detection, location mapping, layout and everything.
And it's able to do it like I have tons of such applications running on the same stupid back.
Like here. Sure, the same. Let me break this engine X.
And if you if you minimize it.
See all these apps are running or something. I don't know what they're running. I don't go and read.
It is running something. I'll show you a nice example here.
Another one. Heavy.
This is called paperless.
Paperless is an open source app.
That basically makes my life paperless.
What does it mean? Anytime I get a paper.
I use an app for paperless, which is a free open source app, but I scan it and it shows up here.
Anything any random document I receive in the mail. I want to keep it. Take a picture. Boom, it shows up here.
And it is searchable and it is open source and it runs in Docker.
It runs. Let me show you the the actual.
Execution of this.
So you so you make these apps only private to you only, right? Like, I mean, they are locally locally locally in the company inside the office.
I can expose it to outside if I want. No, no, no. Of course you don't want.
I just wondering. So yeah, yeah, this is totally local, but I run them.
And it's also heavy.
So how do you scale these apps like, you know, you mentioned other that you have a 69 terabyte of memory. So but the photos is something that you keep out on. Keep in mind.
Right. So that's something that the scalability factor you built into the configuration when you.
I'll show you the storage. Let's see.
I'll show you the storage parts. So it's a distributed system inside the home. So I'll show you that. What's the part trueness?
True.
Yeah, yeah, OK. So this is my storage system. It is detached from the Docker container. It is not on the same.
Hold on, let me find out my password.
No worries, yeah.
Yeah, so this.
Is my machine.
With store stuff I have here.
My shares if you can see I have some Unix shares.
Let's go see the shares that I have Unix shares here. Which has storage called NFS storage.
And this actually exposes all those disks that this machine carries on the local network in form of NFS NFS as a protocol of sharing files file storage file share.
Like you have in your company, probably Samba share or sip share and Microsoft share.
This is NFS share network file share Unix share or Linux share. So it exposes all the storage to anybody who wants to use it inside the home.
Not sure that this paperless and this photo prism and every other thing that I have will use the shared storage in this machine. This is a dedicated box just for storage that store stuff.
That's all it does.
Not sure, sure, sure.
So that is how I configured this one.
OK, that's good enough.
Yeah, it does.
Keep asking. I have no problem.
I'm good. Thank you.
There are various ways from this storage box. You can share. You can do Apple shares, which I don't use. You can use block shares like hard disk shares or I SCSI shares if you like.
I use the Unix NFS shares quite a bit.
There are some web dash shares that I don't use.
There are some Windows share that I have.
So that's where I you know my recordings of all the videos of my software, my sources, source code, my test and my company documents are stored in these locations.
And so all the machines that I have will mount these folders from that computer.
For example.
If I open my Finder.
You will see that this Finder has a network access to that same TrueNAS device with the folders that you're looking at.
See this recording. It is coming from here. Software coming from here. Test from here. TrueHome coming from here.
TrueHome.
Sure, so that's the storage that I use in this Macintosh, which is actually sitting on this box behind me.
OK, sure.
So I've been building these things like a like a company would.
Yeah, yeah.
And that's why you see what you know. It's not a typical home. I have like a properly configured corporate firewall and storage system and you know.
Bunch of things all within the home.
Sure, I have tons of other things like you will even see monitoring stuff, you know, like here.
This is me sitting in my office. I'm monitoring myself.
There we go. You can see my head. Yes.
Then this is my front yard.
See.
There's a truck coming in.
And going away.
And so like that I have a bunch of cameras. You know all of these are open source based products running in Docker containers. No kidding. Here we go. This is also in Docker. This thing is called. What is it called?
Home.
Bridge.
That's home bridge is a product on GitHub. You can see it.
There it is. It gives you home kit support for any device like any device that supported by Google or Alexa or whatever else. It brings it to CD.
Home bridge. Sure, sure. This I run it in a Docker container somewhere. I have several machines slide around in you know various rooms. I have various machines configured and they do Linux stuff run containers and this one of the boxes runs home bridge.
And so this home bridge looks like this from a from a this is their website. My home bridge looks like this.
My home bridge looks like this. No, not this. This is a different product home bridge.
My home bridge looks like this. I need to log in.
Come on login.
What is my login?
Home bridge there.
That's my login.
What?
What? Login can you care?
OK, view.
Copy.
Paste.
Here this is my.
Status of all the accessories I have in my home and every door has a sensor.
Every room has a temperature humidity. God knows what sensor.
They all pull together all the detail information in home bridge and it exposes it to Siri home kit and I'm able to see what's going on like somebody triggered this.
Can't buy.
You see this can't buy.
Yeah, actually the name of my robot which cleans the home.
Yeah, yeah.
No, it's it's it's a Xiaomi device. It's a Chinese.
And so lower floor is called Cantabye in the upper floor is called Adam.
Oh my God.
And so yeah, this is also Docker containers. By the way, a bunch of containers I have. I don't even know. Sometimes I forget.
It's it's they have them running. Sometimes something stops working and then I go look what's happening and then then I fix it.
And then then it starts working again, but occasionally I have to go and fix because I don't have to like I had to call myself when 800 call Nilesh.
Yeah, yeah.
What was with the drone? I think I saw something with the drone drone. Yeah, yeah, yeah, Docker image or something.
I see I see drone drone drone is I think I have running drone drone is running a CI CD.
And so there let me log in.
Come on, login, please. What do you use for CI CD? What tool?
So this is the second tool I use Jenkins.
Also, yeah, Jenkins.
Did you try go CD? I tried almost every single CD CI CD application, but.
So that is your drone dashboard.
And it has some hello Docker thingy running. I tried experimented and it's still running, but I'm not using it. I'm using this one.
This is actively used. Sure. And it does actually create my websites. It builds the websites for me. So there's a pipeline constructed and bunch of builds successful. Some failure while ago, three months ago, there was a failure.
And this was a build failure apparently, and then it keeps building stuff whenever I push something. So it does help quite a bit. That's Jenkins. It's also running in the home. Yeah, everything is mostly in the home unless I need some resources, then it goes out to Google Cloud.
So why do you do a free session? That's a good question, man. Did I answer you properly? Did I answer that question properly or not? I mean, the only thing I got is like.
You like your stuff, but I think. A lot of people like their stuff, but like why do you? Like you are sharing your time also. It's not like you're just sharing your recorded lectures, right? I mean, you're sharing your time. I mean, you're sharing your time.
Also, so I feel that. You know, sharing your time and then really see a value coming out of it would be really nice, but I maybe you don't. Do you see value coming out of it? Oh, I see it. I mean, I told you, I told you, I told you, I told you.
That question that I was stuck, you know, in the past and you answered that the peer to peer. The P2P, you know, so that was excellent. And so I'll do that. I have similar questions around how to cheaply.
Build sensors, you know, which has microprocessors so that you know we don't need even Wi-Fi antenna. Then what are the other solutions we can build? Because I think we can make very nice products out of all these.
Knowledge and you know, yeah, do these things so we I would really like to see like your lectures like how people are using it in in what sense. Yeah, I think that's a good question.
Because I think that will also be a very nice. Knowledge sharing type thing, you know, yeah. Yeah, so I will definitely show you something that you're telling me that I did not answer your question. Basically, why free that question is still unanswered, right?
Um, maybe I don't know. So a short resolution to that issue is you can pay. Yeah, I mean, I like to. I like what I want to do. I don't know. I don't know what I want to do. I don't know what I want to do. I don't know what I want to do.
What I want to do is pay with, you know, by showing you what I'm implementing with that. Yeah, that's something like that. Yeah, that that will be actually useful. I want you to actually build things and then that'll be nice. Yes, yes.
Yeah, maybe tie. Yeah, tie this to something, you know, some objectives. So that would be really. I don't have any objective, so you. I don't have no objective. I really like that that you're actually asking for ideas, because that would be really helpful.
I really like that question answer type scenarios, you know. Yeah.
really helps. I really like that question answer type scenarios,
you know. Yeah.
Appreciate that. Thank you.
Thanks Malaysia. I need to talk for another meeting. Thank you.
Thank you for the call earlier. I appreciate that. I will
follow through that and implement. I already know. Yeah,
yeah, did you try the iPhone app and it didn't work for you?
It worked for me app, but you know, then it conflicted with
the Mac address. They blocked me. So yeah, I mean, because
it's like a one to one service. But then I use a different
provider. Then I bought a you know, I have a Android TV for
but I bought like a $10 Android USB from Walmart. And then I
was able to clone and then it worked properly fine. So I see
you guys. Yeah, got it. Yeah, yeah, yeah. Nice.
I mean, yeah, with that thing, maybe you will have more ideas
how to use that service for for for your broadcast as well.
In your lectures, I have enough ways to broadcast.
But yeah, let me know if you if you need any help. Yeah, we'll
get you know, we'll jump into the call and thank you. Thank
you very much. Yeah. So let's let's let's disconnect and say
goodbye to everybody who joined today. Thank you very much. I
appreciate that. I'll see you again Tuesday. Same time. Thank
you guys. Yeah, thank you. Let me thank you. Thanks. Bye bye.
Bye everybody.