WEBVTT

00:00:00.000 --> 00:00:08.198
[MUSIC]

00:00:08.198 --> 00:00:09.947
Hello and
welcome to another episode on

00:00:09.947 --> 00:00:11.430
the Container's Channel.

00:00:11.430 --> 00:00:13.160
I'm Matt McSpirit,
technical evangelist for

00:00:13.160 --> 00:00:14.590
all of our data
center technology.

00:00:14.590 --> 00:00:17.120
And in this episode it's
actually the start of

00:00:17.120 --> 00:00:20.130
a mini series where we're
gonna be exploring container

00:00:20.130 --> 00:00:21.450
fundamentals.

00:00:21.450 --> 00:00:23.490
Those of you who've watched
some of the videos already on

00:00:23.490 --> 00:00:24.380
the containers channel,

00:00:24.380 --> 00:00:27.000
you'll know we've got a lot
of demos of cool stuff.

00:00:27.000 --> 00:00:29.960
We introduced and had interviews
with people from Docker.

00:00:29.960 --> 00:00:33.180
We met with John Howard and
explored his contributions to

00:00:33.180 --> 00:00:35.860
the Docker as well, so
we've covered a load of

00:00:35.860 --> 00:00:38.700
stuff, but we wanna make sure
that we're giving you the depth

00:00:38.700 --> 00:00:41.030
knowledge of our
containers as well.

00:00:41.030 --> 00:00:44.350
And to help me do that today
I'm joined by Neil Peterson.

00:00:44.350 --> 00:00:45.770
Neil, introduce yourself and

00:00:45.770 --> 00:00:48.850
tell us a little bit about your
connection with containers.

00:00:48.850 --> 00:00:50.210
>> Great, thanks Matt.

00:00:50.210 --> 00:00:51.400
So my name's Neil Peterson,

00:00:51.400 --> 00:00:54.600
I'm a content developer
here at Microsoft.

00:00:54.600 --> 00:00:57.280
So, really what I'm doing
with containers is writing

00:00:57.280 --> 00:01:00.160
the documentation to go along
with our implementation of

00:01:00.160 --> 00:01:02.340
containers, that is Windows
server containers and

00:01:02.340 --> 00:01:04.270
the upcoming hyper B containers.

00:01:04.270 --> 00:01:07.100
So, I'm working with our
visualization team and And

00:01:07.100 --> 00:01:08.600
John and Taylor.

00:01:08.600 --> 00:01:11.900
Kind of documenting containers
and as part of that I'm playing

00:01:11.900 --> 00:01:15.020
around and doing research
on the technology myself.

00:01:15.020 --> 00:01:16.870
>> It's all very
new to a lot of us.

00:01:16.870 --> 00:01:18.410
A lot of our IT
professionals as well so

00:01:18.410 --> 00:01:20.080
the documentation
is critical and

00:01:20.080 --> 00:01:23.050
this documentation approach that
we've taken this time around for

00:01:23.050 --> 00:01:26.390
containers putting it on MSDM
but also people getting access

00:01:26.390 --> 00:01:28.560
on it through [INAUDIBLE],
that's a big.

00:01:28.560 --> 00:01:30.950
Change for
us << Yeah absolutely I mean so

00:01:30.950 --> 00:01:34.970
we are our documentation
is available on GitHub,

00:01:34.970 --> 00:01:38.600
community can contribute to it,
make updates to it and really

00:01:38.600 --> 00:01:43.180
as far as Window's container nad
We're in technical preview but

00:01:43.180 --> 00:01:46.350
we're documenting
them quite a bit, so

00:01:46.350 --> 00:01:48.870
we're putting a lot of stuff
out there pretty quickly.

00:01:48.870 --> 00:01:51.000
>> And if you haven't checked
out the documentation already,

00:01:51.000 --> 00:01:54.140
it's MSDN dot Microsoft dot com,
if you do wanna go down the MSDN

00:01:54.140 --> 00:01:56.330
root, forward slash
Virtualization and

00:01:56.330 --> 00:01:58.570
that will take you to
the containers landing page.

00:01:58.570 --> 00:02:00.840
And there's a number of
different scenarios that we

00:02:00.840 --> 00:02:04.820
documented for technical preview
three, around getting your

00:02:04.820 --> 00:02:08.320
container host ready, deploying
containers with PowerShare, or

00:02:08.320 --> 00:02:10.920
managing them with Docker and
so on, and on Azure as well.

00:02:10.920 --> 00:02:13.210
So If you haven't,
check out the documents,

00:02:13.210 --> 00:02:15.920
follow along, and also view the
videos because they will walk

00:02:15.920 --> 00:02:18.220
you through as well so
you can see it visually.

00:02:18.220 --> 00:02:21.380
But today, as I said,
is the start of a mini-series.

00:02:21.380 --> 00:02:22.730
We don't know how many
episodes we are going to do,

00:02:22.730 --> 00:02:24.460
we are just going to
keep them coming at ya.

00:02:24.460 --> 00:02:25.980
To help you understand and

00:02:25.980 --> 00:02:28.950
grasp the fundamentals at a bit
more of a technical level.

00:02:28.950 --> 00:02:31.400
But helping you through a lot
of demonstration as well.

00:02:31.400 --> 00:02:34.710
So, Neil's been busy building
these systems to enable, to show

00:02:34.710 --> 00:02:37.610
you essentially how some of this
stuff works in a bit more depth.

00:02:37.610 --> 00:02:39.930
And the first one we're just
going be taking a look at

00:02:39.930 --> 00:02:42.800
an introduction really about
just what containers are, that

00:02:42.800 --> 00:02:45.840
next level down from some of the
videos we've done in the past.

00:02:45.840 --> 00:02:47.560
Help you understand some
of the building blocks and

00:02:47.560 --> 00:02:50.270
some of the key features,
components, and concepts.

00:02:50.270 --> 00:02:53.170
Before we move on in future
episodes to more of the depth

00:02:53.170 --> 00:02:56.000
surrounding images,
networking and so on.

00:02:56.000 --> 00:02:58.320
So why don't you take it away
walk us through what are we

00:02:58.320 --> 00:03:00.311
going to learn about today
in this particular episode.

00:03:00.311 --> 00:03:03.813
<< For this episode we will do
just talk about what containers

00:03:03.813 --> 00:03:06.127
are, we'll create
some containers look

00:03:06.127 --> 00:03:09.168
at some container images and
really just start like you

00:03:09.168 --> 00:03:12.341
said laying the foundation to
dig deeper into things like

00:03:12.341 --> 00:03:15.518
container images networking
portability of containers

00:03:15.518 --> 00:03:16.046
>> okay cool

00:03:16.046 --> 00:03:16.706
>> okay so lets

00:03:16.706 --> 00:03:17.630
>> we only have a few

00:03:17.630 --> 00:03:21.065
slides that think " no, we cant
do slides" we have a few and

00:03:21.065 --> 00:03:23.642
then we are docking
straight into some demos so

00:03:23.642 --> 00:03:24.970
So yes stay with it.

00:03:24.970 --> 00:03:27.140
>> Just helps us position
some of the stuff as well.

00:03:27.140 --> 00:03:28.500
>> Sure, absolutely.

00:03:28.500 --> 00:03:32.560
So, Containers
are without doubt on fire,

00:03:32.560 --> 00:03:34.820
lots of people
are talking about them.

00:03:34.820 --> 00:03:39.780
It's pretty early on In the
technology lifecycle, containers

00:03:39.780 --> 00:03:41.870
have been around for some time
>> On Linux

00:03:41.870 --> 00:03:43.680
>> On Linux but

00:03:43.680 --> 00:03:47.040
they're really taking off right
now, so just to introduce

00:03:47.040 --> 00:03:50.140
containers and what
containers are, because it is

00:03:50.140 --> 00:03:53.210
a weird abstraction, we've been
working in virtualization for

00:03:53.210 --> 00:03:57.460
some time, and it's very easy to
compare a container to a virtual

00:03:57.460 --> 00:04:00.340
machine, but
>> What exactly are containers

00:04:00.340 --> 00:04:02.800
and what are we doing with them
and what can we do with them?

00:04:02.800 --> 00:04:04.280
So I mean at its core,

00:04:04.280 --> 00:04:08.660
containers really are kind of
a component of virtualization.

00:04:08.660 --> 00:04:11.170
It's almost like
an operation system or

00:04:11.170 --> 00:04:12.890
application virtualization.

00:04:12.890 --> 00:04:16.460
So Really essentially we use
containers similarly to how we

00:04:16.460 --> 00:04:18.040
would use a virtual machine.

00:04:18.040 --> 00:04:20.920
We virtualize this OS and

00:04:20.920 --> 00:04:24.020
we run applications from with
inside the container and

00:04:24.020 --> 00:04:27.410
we can access these applications
from outside of the container.

00:04:27.410 --> 00:04:29.470
You can see here in my
first bullet point,

00:04:29.470 --> 00:04:33.030
I call them out as an OS
Application Virtualization and

00:04:33.030 --> 00:04:35.720
Imaging or
Image Layering Technology,

00:04:35.720 --> 00:04:38.300
this is really important
>> A lot of the benefit we're

00:04:38.300 --> 00:04:40.400
gonna find in containers.

00:04:40.400 --> 00:04:43.550
Benefit being things like
fast start up time, or

00:04:43.550 --> 00:04:46.300
small footprint on the host OS,

00:04:46.300 --> 00:04:49.680
has to do with the way
we can manage and

00:04:49.680 --> 00:04:52.990
create these images, or
how containers use these images.

00:04:52.990 --> 00:04:54.830
So, I put that in the first
bullet point there,

00:04:54.830 --> 00:04:58.420
because images are Are hugely
important to how

00:04:58.420 --> 00:04:59.470
containers work.

00:04:59.470 --> 00:05:00.270
And, like we said,

00:05:00.270 --> 00:05:03.566
we're gonna dive pretty
deep into container images.

00:05:03.566 --> 00:05:07.520
So, containers,
OS virtualization.

00:05:07.520 --> 00:05:11.900
Containers host applications And
application dependencies, and

00:05:11.900 --> 00:05:13.350
that's also critical.

00:05:13.350 --> 00:05:16.340
What we'll see is, we're
stuffing an application and

00:05:16.340 --> 00:05:18.780
all its dependencies
in this container.

00:05:18.780 --> 00:05:22.220
And this container kinda becomes
this self contained unit,

00:05:22.220 --> 00:05:25.020
that can then be moved around
between environments, but

00:05:25.020 --> 00:05:27.270
it's got all those
dependencies built in to it.

00:05:27.270 --> 00:05:29.630
So we're not doing things like
having to reconfigure our

00:05:29.630 --> 00:05:31.830
container as we move it around.

00:05:31.830 --> 00:05:34.340
>> Do the dependencies have to
live in the same container?

00:05:34.340 --> 00:05:36.080
Cuz you could lay them
outside couldn't you?

00:05:36.080 --> 00:05:36.920
>> Yeah, absolutely.

00:05:36.920 --> 00:05:40.010
We can have multi
container applications.

00:05:40.010 --> 00:05:42.701
Where we might have a front-end
that has all the dependencies

00:05:42.701 --> 00:05:44.021
for the front-end in
one container and

00:05:44.021 --> 00:05:46.050
a back-end that has all
the dependencies for

00:05:46.050 --> 00:05:52.680
the back end,
however these two containers

00:05:52.680 --> 00:05:53.910
are dependent on each others
>> Yes.

00:05:53.910 --> 00:05:55.560
>> So they form an application.

00:05:55.560 --> 00:05:57.710
>> And they themselves
depend on the base image.

00:05:57.710 --> 00:05:59.710
Sure, yeah, absolutely.

00:05:59.710 --> 00:06:01.300
>> Okay.
>> We already kinda

00:06:01.300 --> 00:06:04.880
discussed it, containers
are built from container images.

00:06:04.880 --> 00:06:06.440
Container images are portable,
and

00:06:06.440 --> 00:06:07.390
this is where it's really cool.

00:06:07.390 --> 00:06:10.090
And we'll see in future
episodes, we'll actually build

00:06:10.090 --> 00:06:14.260
an application on my laptop
Move that container image

00:06:14.260 --> 00:06:18.070
up into what's know as
a Container Image Registry and

00:06:18.070 --> 00:06:22.090
then pull that over into a VM in
Azure, So its this portability

00:06:22.090 --> 00:06:27.690
in images that gives us this
great way of moving our

00:06:27.690 --> 00:06:30.030
work from environment to another
>> Mm-hm and

00:06:30.030 --> 00:06:30.960
that's the flexibility as well.

00:06:30.960 --> 00:06:32.340
All of our developers
are seeing as well.

00:06:32.340 --> 00:06:35.200
You know, build an application
Locally on the workstation,

00:06:35.200 --> 00:06:37.100
knowing that from
a consistency perspective,

00:06:37.100 --> 00:06:39.690
were I to deploy it to
your laptop, to a server

00:06:39.690 --> 00:06:42.850
in the data center or to
a public cloud, it's gonna work.

00:06:42.850 --> 00:06:44.050
>> Absolutely.
>> Because they see it there.

00:06:44.050 --> 00:06:46.260
The dependencies it will have,
or it will pull with it,

00:06:46.260 --> 00:06:47.790
and then you've got
that flexibility.

00:06:47.790 --> 00:06:51.410
>> Yep, absolutely, so some of
the benefit in containers, it's

00:06:51.410 --> 00:06:53.880
like okay, we see that we're
putting applications in here,

00:06:53.880 --> 00:06:55.360
but where are the benefits?

00:06:55.360 --> 00:06:58.450
Containers start fast,
they scale fast.

00:06:58.450 --> 00:07:00.270
They can be destroyed fast.

00:07:00.270 --> 00:07:03.700
That footprint on the host
is much smaller than that of

00:07:03.700 --> 00:07:04.550
a virtual machine.

00:07:04.550 --> 00:07:07.430
So we can gain this density

00:07:07.430 --> 00:07:10.340
on our physical computers that
are hosting these containers.

00:07:10.340 --> 00:07:14.190
We can gain a greater density
with containers than we can with

00:07:14.190 --> 00:07:15.900
a The VM itself.

00:07:15.900 --> 00:07:17.060
>> And in contrast to

00:07:17.060 --> 00:07:19.500
a VM I think we're gonna look
architecturally in a minute but

00:07:19.500 --> 00:07:21.870
when you're creating a VM those
have got a history with Hyper-V.

00:07:21.870 --> 00:07:25.130
You know you'll be saying how
many virtual processes do I

00:07:25.130 --> 00:07:28.540
need, how much RAM, do I need
a virtual DVD drive, how many

00:07:28.540 --> 00:07:31.720
networks, what networks do they
need to be on, VLAN's and so on.

00:07:31.720 --> 00:07:34.550
There's a lot more Thinking
about, from a virtual machine

00:07:34.550 --> 00:07:38.830
perspective, that hardware
layer that is necessarily,

00:07:38.830 --> 00:07:41.690
it exists to a certain extent
with containers in some aspects.

00:07:41.690 --> 00:07:46.590
But in terms of that very
strict, this VM will have these

00:07:46.590 --> 00:07:48.600
virtual processes,
that's very different.

00:07:48.600 --> 00:07:51.470
>> Yeah, I mean, essentially we
build a VM very similar to how

00:07:51.470 --> 00:07:52.940
we would build
a physical machine.

00:07:52.940 --> 00:07:54.230
We need to define all of those.

00:07:54.230 --> 00:07:58.410
Components and a lot of that
does go away with containers.

00:07:58.410 --> 00:08:02.660
That said I mean that leads into
this last point here as well,

00:08:02.660 --> 00:08:06.770
one of the things we can do with
containers is kind of constrain

00:08:06.770 --> 00:08:09.350
the resource usage of that host.

00:08:09.350 --> 00:08:11.810
So I mean we can build
a container and say hey

00:08:11.810 --> 00:08:15.880
Use this much memory or don't
use more than this much memory.

00:08:15.880 --> 00:08:18.700
Use this amount of the CPU
without going over.

00:08:18.700 --> 00:08:21.540
>> Yes.
>> So we can constrain

00:08:21.540 --> 00:08:24.330
what a container can
consume from that host.

00:08:24.330 --> 00:08:25.740
>> You know like
a mega-container.

00:08:25.740 --> 00:08:26.870
>> Sure.
Sure.

00:08:26.870 --> 00:08:27.430
Exactly.

00:08:27.430 --> 00:08:30.200
>> Just in the same way the.

00:08:30.200 --> 00:08:32.620
Something to consider as well.

00:08:32.620 --> 00:08:34.030
Okay so.

00:08:34.030 --> 00:08:37.070
Compare and contrast with the
VM, if we bring up the graphic

00:08:37.070 --> 00:08:39.260
that we've got on the next
slide to help us illustrate,

00:08:39.260 --> 00:08:41.950
what are the key takeaways from
this particular graph here

00:08:41.950 --> 00:08:44.679
that people should know?

00:08:44.679 --> 00:08:46.770
>> If you've been doing
research on containers you've

00:08:46.770 --> 00:08:48.790
probably seen a very
similar graphic.

00:08:48.790 --> 00:08:52.360
And one of the biggest
differences between a container

00:08:52.360 --> 00:08:56.130
and a virtual machine Is
kinda how the container

00:08:56.130 --> 00:08:59.700
works with the kernel
on the host.

00:08:59.700 --> 00:09:01.610
So looking at the left
hand side here,

00:09:01.610 --> 00:09:03.630
we've got a virtual machine.

00:09:03.630 --> 00:09:07.300
We've got a hardware layer,
we've got the OS and

00:09:07.300 --> 00:09:12.260
kernel of the host, as well
as the hypervisor technology.

00:09:12.260 --> 00:09:14.740
And then we're layering
Virtual Machines

00:09:14.740 --> 00:09:16.880
on top of that Hypervisor.

00:09:16.880 --> 00:09:19.210
So each one of these Virtual
Machines has an operating system

00:09:19.210 --> 00:09:20.510
and a Kernel in it as well.

00:09:20.510 --> 00:09:24.370
So every time we boot up a VM
we're booting up a full OS,

00:09:24.370 --> 00:09:25.620
Kernel and everything.

00:09:25.620 --> 00:09:28.610
>> And generally speaking, each
one will have a virtual hard disk-

00:09:28.610 --> 00:09:29.020
>> Yep.

00:09:29.020 --> 00:09:31.190
>> That will
>> A potentially significant

00:09:31.190 --> 00:09:33.320
amount of space from your
backend storage whatever

00:09:33.320 --> 00:09:34.650
that may be.

00:09:34.650 --> 00:09:37.570
Yes, you can use things like
differencing disks from a read

00:09:37.570 --> 00:09:40.820
only parent image but still but
consumption of storage

00:09:40.820 --> 00:09:43.920
typically associated with VMs
can be quite significant.

00:09:43.920 --> 00:09:44.700
>> Yep, absolutely.

00:09:44.700 --> 00:09:48.156
And then you've got these
virtual machines kinda making

00:09:48.156 --> 00:09:51.324
hardware requests and
you get this hypervisor layer

00:09:51.324 --> 00:09:54.852
intercepting those requests and
managing those requests

00:09:54.852 --> 00:09:58.816
against the hardware of the host
that the virtual machine holds.

00:09:58.816 --> 00:10:02.183
So that is the image
of a virtual machine.

00:10:02.183 --> 00:10:06.581
To contrast a container host
we've got the hardware of

00:10:06.581 --> 00:10:08.650
the container host.

00:10:08.650 --> 00:10:12.100
We've got the OS in the kernel
sitting on top of that,

00:10:12.100 --> 00:10:15.380
as well as the container
software the Docker engine.

00:10:15.380 --> 00:10:20.950
Windows server container engine,
but you'll notice here that

00:10:20.950 --> 00:10:25.170
the container itself doesn't
have that operating system.

00:10:25.170 --> 00:10:26.760
It doesn't have that kernel.

00:10:26.760 --> 00:10:28.500
So, there's really a shared,

00:10:28.500 --> 00:10:31.525
these containers are sharing
the kernel with the host OS.

00:10:31.525 --> 00:10:37.095
Boot up time is much quicker,
there's a lot less going on

00:10:37.095 --> 00:10:39.665
when we start these containers
versus a virtual machine.

00:10:39.665 --> 00:10:42.635
>> And obviously this graphic is
depicting, we just say hardware

00:10:42.635 --> 00:10:45.835
at the bottom here, but this
could be physical hardware, or

00:10:45.835 --> 00:10:47.595
it could be inside of
the virtual machine.

00:10:47.595 --> 00:10:48.665
>> Yep, absolutely.

00:10:48.665 --> 00:10:51.295
>> So there's nothing
stopping these two

00:10:51.295 --> 00:10:53.970
different technologies
coexisting happily.

00:10:53.970 --> 00:10:57.150
Way you might need for instance
you've got a Hyper-V host,

00:10:57.150 --> 00:10:59.880
you've got two VM's,
one is Linux, one is Windows and

00:10:59.880 --> 00:11:02.500
you run Linux containers
inside one VM and

00:11:02.500 --> 00:11:04.050
Windows containers on another.

00:11:04.050 --> 00:11:06.780
But on that overall physical
system you're running a mix of

00:11:06.780 --> 00:11:07.700
containers.

00:11:07.700 --> 00:11:09.840
So you've got the best of
both worlds in essence there,

00:11:09.840 --> 00:11:12.350
you're utilizing
the complementary technologies.

00:11:12.350 --> 00:11:14.630
So they're definitely not one or
the other,

00:11:14.630 --> 00:11:17.270
they can be used in
conjunction which is important.

00:11:17.270 --> 00:11:18.490
>> Yep, absolutely.

00:11:18.490 --> 00:11:25.150
So at surface level, it's
really simple to say virtual

00:11:25.150 --> 00:11:28.970
machines, we've got isolated
kernel inside the VM container,

00:11:28.970 --> 00:11:33.110
we're sharing that
kernel with the host OS.

00:11:33.110 --> 00:11:34.700
Now this picture
changes a little bit

00:11:34.700 --> 00:11:37.460
when we're introducing
Hyper V containers

00:11:37.460 --> 00:11:41.120
Which provides an additional
layer of isolation by kinda

00:11:41.120 --> 00:11:43.330
wrapping that container
in the VM itself.

00:11:43.330 --> 00:11:44.450
>> Yep, and
in a couple of weeks time,

00:11:44.450 --> 00:11:46.960
we'll be having episodes on
HyperV containers at the right

00:11:46.960 --> 00:11:50.260
point in time when they're
available for people to test.

00:11:50.260 --> 00:11:52.860
So you'll see more episodes on
the container's channel That

00:11:52.860 --> 00:11:56.520
help people dissect just what
Hyper-V container is because

00:11:56.520 --> 00:11:59.690
it certainly adds an extra
layer of capability but

00:11:59.690 --> 00:12:02.390
it's also quite complex to grasp
as well about what's going on in

00:12:02.390 --> 00:12:05.550
this blended kind of set
of technology' s here so.

00:12:05.550 --> 00:12:07.070
>> Absolutely.
>> So stay tuned for that one.

00:12:07.070 --> 00:12:12.410
>> So that's kind of the host
>> VM host container difference.

00:12:12.410 --> 00:12:14.890
There is also some differences
in the way we match containers

00:12:14.890 --> 00:12:15.880
versus to VM.

00:12:15.880 --> 00:12:16.740
There are kinda a shift,

00:12:16.740 --> 00:12:19.940
especially if you've been in a
roll you've been managing VM for

00:12:19.940 --> 00:12:20.970
a long time.

00:12:20.970 --> 00:12:23.560
This is really how we
use container images.

00:12:23.560 --> 00:12:27.150
So if you've been doing mass of
deployments of VM, you probably

00:12:27.150 --> 00:12:29.840
are familiar with the concept of
like a VM image, which is like

00:12:29.840 --> 00:12:33.900
a sys prept version of an OS
that we can deploy to a bunch of

00:12:33.900 --> 00:12:37.660
VMs and spin up a bunch
of VMs in a rapid rate.

00:12:37.660 --> 00:12:39.970
Container image is very
different than a VM image, and

00:12:39.970 --> 00:12:41.810
we'll see that,
we'll dig into that deep.

00:12:41.810 --> 00:12:44.890
As well as the way we manage
networking with our containers,

00:12:44.890 --> 00:12:46.370
So that's kind of different.

00:12:48.060 --> 00:12:50.780
It's different than how we
would potentially manage

00:12:50.780 --> 00:12:52.880
networking with VMs, and
well see that as well.

00:12:52.880 --> 00:12:53.430
>> Okay, cool.

00:12:53.430 --> 00:12:56.290
So tell us a bit more at
least as an intro to these

00:12:56.290 --> 00:12:57.650
images you've been mentioning.

00:12:57.650 --> 00:13:00.930
And I know in the next episode
we're gonna delve deeper,

00:13:00.930 --> 00:13:02.880
significantly deeper,
into container images, but

00:13:02.880 --> 00:13:06.340
just give people the 10,000
foot view of images.

00:13:06.340 --> 00:13:07.340
>> Yep, absolutely.

00:13:07.340 --> 00:13:10.220
And I do call this out because
this is a hugely important part

00:13:10.220 --> 00:13:11.840
of working with containers.

00:13:11.840 --> 00:13:15.530
So what container images are is
they're a read only template

00:13:15.530 --> 00:13:18.720
that are used to start
up a container with.

00:13:18.720 --> 00:13:22.280
These templates
contain applications.

00:13:22.280 --> 00:13:24.940
They contain the dependencies
for the applications.

00:13:24.940 --> 00:13:27.700
And they can also contain
instructions that kind of like

00:13:27.700 --> 00:13:28.790
bootstrap the image.

00:13:28.790 --> 00:13:32.198
So like every time I start
a container with this image,

00:13:32.198 --> 00:13:33.590
start this process.

00:13:33.590 --> 00:13:35.680
And we'll see that.

00:13:35.680 --> 00:13:38.950
These images can be comprised
of multiple layers.

00:13:38.950 --> 00:13:42.790
So I might have a base OS image,
like Ubuntu, and then I might

00:13:42.790 --> 00:13:48.580
have another layer on top of
that that is my web application.

00:13:48.580 --> 00:13:51.540
And then for every container
that I start on my host that's

00:13:51.540 --> 00:13:56.530
using that base OS image,
they all share the same instance

00:13:56.530 --> 00:13:59.810
of that image, this is where
we get that small footprint-

00:13:59.810 --> 00:14:01.930
>> Optimized resource usage.

00:14:01.930 --> 00:14:06.060
>> Optimized resource usage and
we can achieve that density by

00:14:06.060 --> 00:14:08.510
sharing these images and we will
see an example of that as well.

00:14:09.640 --> 00:14:14.300
I already talked about
the images containing

00:14:14.300 --> 00:14:18.030
the execution instructions,
and then finally, these images

00:14:18.030 --> 00:14:21.500
can be stored and retrieved
from a container registry.

00:14:21.500 --> 00:14:23.600
This is how we can
achieve that portability.

00:14:23.600 --> 00:14:26.850
So develop locally,
store in a registry,

00:14:26.850 --> 00:14:28.930
pull it over in a my
production environment.

00:14:28.930 --> 00:14:29.430
>> Registry, repository.
>> [CROSSTALK]

00:14:29.430 --> 00:14:31.784
>> Registry, repository,

00:14:31.784 --> 00:14:36.150
just a place.
We can have private registries,

00:14:36.150 --> 00:14:38.830
the one we look at in
future episodes is

00:14:38.830 --> 00:14:40.420
public registry Dr. Hub.

00:14:40.420 --> 00:14:41.590
>> Right.
Okay, cool.

00:14:41.590 --> 00:14:44.590
So, I'm guessing that's
a little bit of a background.

00:14:44.590 --> 00:14:46.710
Do you wanna duck into a demo
and show us [CROSSTALK].

00:14:46.710 --> 00:14:48.040
>> Yeah, absolutely.

00:14:48.040 --> 00:14:50.350
Let's take a look
at the demo here.

00:14:50.350 --> 00:14:53.587
So, let me just size up my
environment here, so I'm gonna

00:14:53.587 --> 00:14:57.120
do lot of these initial demos
using Linux containers.

00:14:57.120 --> 00:15:02.790
That said, what I've got here is
a Linux host running in Hyper V

00:15:02.790 --> 00:15:03.900
on my machine right here.

00:15:03.900 --> 00:15:05.750
So while I'm working in Linux,

00:15:05.750 --> 00:15:09.150
I'm actually working against
a Hyper V version machine.

00:15:09.150 --> 00:15:12.240
Now I'm going to be running
a bunch of Docker commands.

00:15:12.240 --> 00:15:15.350
Docker is,
as we saw in other videos,

00:15:15.350 --> 00:15:17.950
is a container
management system.

00:15:17.950 --> 00:15:21.250
We'll be using it here
against Linux containers

00:15:21.250 --> 00:15:23.900
I'll also show an example
of using Docker against

00:15:23.900 --> 00:15:25.570
a Windows Server
container as well.

00:15:25.570 --> 00:15:26.670
>> Excellent, so again, and

00:15:26.670 --> 00:15:29.990
there is already some
documentation on the MSDN

00:15:29.990 --> 00:15:31.540
site and on GitHub.

00:15:31.540 --> 00:15:34.420
Where you can if you wanna
get started with Docker and

00:15:34.420 --> 00:15:36.730
Windows Server containers,
there's stuff there for you.

00:15:36.730 --> 00:15:38.050
>> Yep.
>> So take it away.

00:15:38.050 --> 00:15:39.620
>> So we'll just look
at some basic commands.

00:15:39.620 --> 00:15:41.470
So I'm on my
container host here.

00:15:41.470 --> 00:15:46.120
I'm gonna do Docker images,

00:15:46.120 --> 00:15:49.320
to see a list of images that I
have on this container host we

00:15:49.320 --> 00:15:52.470
can see I have three, a Boot two
and then a couple of others.

00:15:52.470 --> 00:15:54.140
>> How did they get there?

00:15:54.140 --> 00:15:58.260
>> So I got these through
pulling them from the Docker hub

00:15:58.260 --> 00:15:58.850
registry.

00:15:58.850 --> 00:15:59.417
>> Okay.
>> So

00:15:59.417 --> 00:16:01.934
as an example if I wanted to
pull down a new image here

00:16:01.934 --> 00:16:02.587
let's say.

00:16:08.012 --> 00:16:10.450
Maybe a MySQL.

00:16:10.450 --> 00:16:16.010
I'm gonna run a command
Docker search, MySQL.

00:16:16.010 --> 00:16:18.670
What it's gonna do is it's gonna
reach out to the Docker Hub, so

00:16:18.670 --> 00:16:19.820
the registry, and

00:16:19.820 --> 00:16:23.840
return a list of images that
have MySQL in their names.

00:16:23.840 --> 00:16:27.560
You can see here that we've got
this column here, OFFICIAL, and

00:16:27.560 --> 00:16:32.070
kind of a little indication that
this is an official image here.

00:16:32.070 --> 00:16:35.290
So I can see MySQL,
it's an official image.

00:16:35.290 --> 00:16:37.210
And I can also see the STARS.

00:16:37.210 --> 00:16:39.750
So these images can be
rated on the Docker Hub.

00:16:39.750 --> 00:16:43.730
I kinda get some indication of
through this view here like,

00:16:43.730 --> 00:16:46.290
hey that's probably the image I
wanna go after because I just

00:16:46.290 --> 00:16:51.190
want a very generalized
MySQL image to go on top of.

00:16:51.190 --> 00:16:52.660
But there's quite a few
other things in there.

00:16:52.660 --> 00:16:55.918
>> It's interesting that so many
people have uploaded what looked

00:16:55.918 --> 00:16:58.028
like to be equivalence
of the same image,

00:16:58.028 --> 00:17:00.925
even though there's one there
that's great that you can

00:17:00.925 --> 00:17:03.230
use that's well-rated all ready.

00:17:03.230 --> 00:17:04.690
>> But
it makes a lot of sense, so

00:17:04.690 --> 00:17:08.880
I may want to take down this
MySQL image, the official image.

00:17:08.880 --> 00:17:12.630
Do a couple changes that
relate to my application.

00:17:12.630 --> 00:17:14.830
>> Okay.
>> And maybe post it back up to

00:17:14.830 --> 00:17:17.870
this public registry so that I
can pull it out somewhere else.

00:17:17.870 --> 00:17:18.540
>> All right, I see.

00:17:18.540 --> 00:17:22.035
So, I suppose if they document
some of that in the description

00:17:22.035 --> 00:17:23.800
,like some of them just
still say my sequels.

00:17:23.800 --> 00:17:24.480
>> Sure, sure.

00:17:24.480 --> 00:17:25.580
>> Absolutely.

00:17:25.580 --> 00:17:28.230
We need some good
documentation hints.

00:17:28.230 --> 00:17:30.200
>> Sure.
[LAUGH] Of course, so

00:17:30.200 --> 00:17:30.990
let's do this.

00:17:30.990 --> 00:17:31.913
Let's actually, so we.

00:17:35.743 --> 00:17:37.460
Saw a list of images
on my machine.

00:17:37.460 --> 00:17:41.860
Let's go ahead and spin up
a container, and actually see,

00:17:41.860 --> 00:17:44.480
build a container and see if
we can do something with it.

00:17:44.480 --> 00:17:48.870
So if I actually run a command,
docker ps, we can see

00:17:48.870 --> 00:17:51.470
that docker ps basically
returns a list of containers,

00:17:51.470 --> 00:17:52.725
we can see I have none here.

00:17:52.725 --> 00:17:53.680
>> Mm-hm.

00:17:53.680 --> 00:17:57.800
>> If I do docker ps dash A it
returns a list of containers

00:17:57.800 --> 00:18:01.350
that are either in a started
state or a stopped state.

00:18:01.350 --> 00:18:04.110
So again I have no containers
on this machine whatsoever.

00:18:05.120 --> 00:18:06.910
So I'm gonna run a command,
doc or run

00:18:09.730 --> 00:18:14.160
Dash IT and basically Dash IT
will start my container in

00:18:14.160 --> 00:18:18.130
an interactive mode and return
my keystrokes to the screen.

00:18:18.130 --> 00:18:20.410
So, basically gonna
start a container and

00:18:20.410 --> 00:18:24.470
jump right into that container,
then I wanna select the image

00:18:25.520 --> 00:18:27.180
that I wanna use to
create the container.

00:18:27.180 --> 00:18:30.800
I'm gonna select my Ubuntu image
and then give it a command.

00:18:31.990 --> 00:18:34.500
So I'm gonna run in an
interactive mode what command do

00:18:34.500 --> 00:18:35.610
I wanna run, in this case,

00:18:35.610 --> 00:18:38.320
I'm just gonna open
up the back shell and

00:18:38.320 --> 00:18:41.310
that quickly, my container
has been created and

00:18:41.310 --> 00:18:42.840
I am in my container
at this point.

00:18:42.840 --> 00:18:43.900
>> That was rapid.

00:18:43.900 --> 00:18:44.910
>> It's very rapid.

00:18:44.910 --> 00:18:47.630
>> And the container name,
is it that long?

00:18:47.630 --> 00:18:50.610
>> So this is part of
the container lid.

00:18:50.610 --> 00:18:54.260
The container was also given a
name, we'll take a look at that.

00:18:54.260 --> 00:18:56.270
We'll spill out of the container
here in a moment and

00:18:56.270 --> 00:18:56.930
take a look at that.

00:18:56.930 --> 00:18:58.040
>> Right, okay cool.

00:18:58.040 --> 00:18:59.160
But that was rapid.

00:18:59.160 --> 00:18:59.690
>> Yeah, so

00:18:59.690 --> 00:19:03.020
within the container, if we take
a look I've got a file system.

00:19:03.020 --> 00:19:07.460
So behind the scenes there's
a bunch of stuff going on with

00:19:07.460 --> 00:19:12.070
the container technology
to facilitate this, so

00:19:12.070 --> 00:19:15.390
we've got namespace and
process isolation.

00:19:15.390 --> 00:19:17.573
So, whereas with
a virtual machine,

00:19:17.573 --> 00:19:21.110
we're spinning up a
self-contained virtual machine.

00:19:21.110 --> 00:19:23.650
This container is
running on this host

00:19:23.650 --> 00:19:26.240
alongside any other containers.

00:19:26.240 --> 00:19:30.960
And using namespace and
process isolation technologies

00:19:30.960 --> 00:19:35.870
From what inside this container,
it looks like a complete,

00:19:35.870 --> 00:19:39.030
an isolated instance of
the Ubuntu operating system.

00:19:39.030 --> 00:19:40.490
>> Yeah, it thinks it's
the only thing there-

00:19:40.490 --> 00:19:41.413
>> It thinks it's the only

00:19:41.413 --> 00:19:42.480
thing there essentially.

00:19:42.480 --> 00:19:43.420
>> From a resource perspective.

00:19:43.420 --> 00:19:44.480
>> From a resource perspective.

00:19:44.480 --> 00:19:46.250
So you can see we've got
a file system here, so

00:19:46.250 --> 00:19:50.750
it can be something
like Mkdir test.

00:19:50.750 --> 00:19:52.040
>> Creating a folder
essentially.

00:19:52.040 --> 00:19:53.519
>> Yep, so
I have created this folder test.

00:19:55.951 --> 00:19:58.911
And I am gonna go ahead and
jump out of

00:19:58.911 --> 00:20:03.662
my container by typing exit,
so we can see that I am back.

00:20:03.662 --> 00:20:07.910
In the container host,
if I do something like ls,

00:20:07.910 --> 00:20:11.970
we can see that I don't
have a test folder here.

00:20:11.970 --> 00:20:12.980
>> Yeah.

00:20:12.980 --> 00:20:15.430
>> So pretty simple stuff,
but let's take a look at that

00:20:15.430 --> 00:20:16.870
container that was
actually created.

00:20:16.870 --> 00:20:20.610
So I'm going to run
docker ps dash a, and

00:20:20.610 --> 00:20:23.535
here you can see we've got the
container ID that we saw before-

00:20:23.535 --> 00:20:24.110
>> Mm-hm.

00:20:24.110 --> 00:20:27.050
>> But also the name and
it's kind of wrapping here.

00:20:27.050 --> 00:20:28.890
But you can see we've
got this funny.

00:20:28.890 --> 00:20:30.640
>> Has that been
randomly generated?

00:20:30.640 --> 00:20:31.220
>> Yep.

00:20:31.220 --> 00:20:32.400
>> Determined pearl man?

00:20:32.400 --> 00:20:33.670
>> Determined pearl man.

00:20:33.670 --> 00:20:35.030
Yep, so randomly generated.

00:20:35.030 --> 00:20:35.860
>> As good as any.

00:20:35.860 --> 00:20:36.920
>> Yep, yep.

00:20:36.920 --> 00:20:42.500
So very simply that was a simple
example of creating a container,

00:20:42.500 --> 00:20:43.750
modifying the container.

00:20:43.750 --> 00:20:47.390
So the modification that we
did was creating a folder.

00:20:47.390 --> 00:20:50.370
We could have just as easily
installed some software.

00:20:50.370 --> 00:20:51.650
So let's actually
take a look at that.

00:20:54.920 --> 00:20:56.371
So I'm going to create
a new container.

00:21:01.323 --> 00:21:05.312
And I'm also going to run
this in an interactive mode,

00:21:05.312 --> 00:21:06.710
using the Ubuntu.

00:21:06.710 --> 00:21:07.840
>> The same base, again.

00:21:07.840 --> 00:21:09.404
>> The same base
[INAUDIBLE] image.

00:21:09.404 --> 00:21:10.900
>> Mm-hm.
>> And I'm going to start

00:21:10.900 --> 00:21:12.650
the shell.

00:21:12.650 --> 00:21:14.190
So, container has been created.

00:21:14.190 --> 00:21:15.460
I'm now inside of the container.

00:21:15.460 --> 00:21:16.330
>> Different.

00:21:16.330 --> 00:21:17.480
Numbers and character there, so

00:21:17.480 --> 00:21:19.350
you it's different
to the previous one.

00:21:19.350 --> 00:21:20.110
>> Yep, absolutely.

00:21:20.110 --> 00:21:22.340
And now I'm actually gonna
install some software.

00:21:22.340 --> 00:21:23.820
And what we'll do is we'll
install some software

00:21:23.820 --> 00:21:26.350
into the container,
once the software has

00:21:26.350 --> 00:21:29.985
been installed in the container,
we'll jump Jump out and

00:21:29.985 --> 00:21:33.195
then capture that into
its own container image.

00:21:33.195 --> 00:21:37.025
So, we'll create a container
image that's been derived from

00:21:37.025 --> 00:21:39.095
the base OS image of.

00:21:39.095 --> 00:21:43.679
So, I'm gonna run app get, and
I'm just gonna install a text

00:21:43.679 --> 00:21:47.029
editor, and
then actually before I do that,

00:21:47.029 --> 00:21:51.372
you can see if I run the command
them Command was not found.

00:21:58.296 --> 00:22:01.367
I'm using a package
management technology

00:22:01.367 --> 00:22:05.932
in Linux called apt-get just to
reach out, grab the software and

00:22:05.932 --> 00:22:08.240
install it in the container.

00:22:08.240 --> 00:22:09.140
>> Okay.
>> So again,

00:22:09.140 --> 00:22:10.980
I say install it in
the container, there's some.

00:22:10.980 --> 00:22:13.180
Namespace, process isolation.

00:22:13.180 --> 00:22:16.870
There's some Trickery going on
at the container host level,

00:22:16.870 --> 00:22:17.540
but essentially,

00:22:17.540 --> 00:22:19.840
that's what we're doing is
installing this software here.

00:22:19.840 --> 00:22:22.600
>> But inside that container,
it's got a scratch base

00:22:22.600 --> 00:22:25.170
where it's essentially where
the changes are captured.

00:22:25.170 --> 00:22:25.680
>> Exactly.

00:22:25.680 --> 00:22:28.120
>> So, it would be going into
there, even though it thinks,

00:22:28.120 --> 00:22:32.470
if it was in the Windows world,
writing to cdrive/Windows.

00:22:32.470 --> 00:22:35.615
It's not writing to the host
windows because that's in

00:22:35.615 --> 00:22:38.910
read-only mode, essentially, the
base image, so it's capturing to

00:22:38.910 --> 00:22:43.500
a scratch space where can let
you save that off to an image.

00:22:43.500 --> 00:22:47.790
>> Exactly, so that scratch
space becomes that next layer in

00:22:47.790 --> 00:22:50.190
the image when we
capture this container.

00:22:50.190 --> 00:22:52.820
>> Okay, so
it looks like that download and.

00:22:52.820 --> 00:22:54.520
>> Install is completed.

00:22:54.520 --> 00:22:55.780
>> Yup.
So, I'm still in the container,

00:22:55.780 --> 00:22:57.270
so I'll run them.

00:22:57.270 --> 00:23:00.005
We can see that my software
has been installed.

00:23:00.005 --> 00:23:01.900
>> Uh-huh.

00:23:01.900 --> 00:23:03.290
>> So, I'm exist of that.

00:23:03.290 --> 00:23:07.380
And I'm exit out of container.

00:23:11.089 --> 00:23:12.366
Try that again.

00:23:15.697 --> 00:23:18.549
And so here is my two
containers, here's the first one

00:23:18.549 --> 00:23:21.800
that we created and then
the last one that I created.

00:23:21.800 --> 00:23:27.290
This has a name of-
>> Tender Chandroseka.

00:23:27.290 --> 00:23:29.805
>> Yep, thank you for
pronouncing that for me.

00:23:29.805 --> 00:23:32.510
>> [LAUGH]
>> It's, I don't know where

00:23:32.510 --> 00:23:35.860
they're getting this very very
diverse names from compared to

00:23:35.860 --> 00:23:38.470
the 2 we've got based on
the 2 we've got so far.

00:23:38.470 --> 00:23:40.690
>> So, what I'm gonna do now
is I'm gonna take this last

00:23:40.690 --> 00:23:43.200
container that we built and I'm
gonna create an image from it.

00:23:43.200 --> 00:23:49.820
All right, so Docker commit
>> I'm just gonna

00:23:49.820 --> 00:23:53.800
grab the idea of the container
and I'll just name it them

00:23:55.660 --> 00:23:59.230
and that quickly, we can see
this big long grid was returned

00:24:02.580 --> 00:24:06.230
and now if I do Docker images
again you will see that I have

00:24:07.290 --> 00:24:09.990
>> Another image, and then and

00:24:09.990 --> 00:24:15.665
so I'll do docker vim again,
I'll do interactive mode.

00:24:15.665 --> 00:24:22.720
And vim and dash.

00:24:22.720 --> 00:24:23.720
>> But
now you could essentially,

00:24:23.720 --> 00:24:25.750
I know we're gonna cover
this in future videos,

00:24:25.750 --> 00:24:27.600
you could essentially
give this vim

00:24:27.600 --> 00:24:28.970
>> Image to anybody.

00:24:28.970 --> 00:24:29.790
>> Absolutely.
>> And they would be

00:24:29.790 --> 00:24:34.110
able to run it on their machine,
providing you have a Linux-base.

00:24:34.110 --> 00:24:35.790
>> Yep.
>> And it would just run.

00:24:35.790 --> 00:24:39.530
>> Yep, yeah, we can take the
image that we just created, and

00:24:39.530 --> 00:24:41.170
push it up to Docker Hub.

00:24:41.170 --> 00:24:43.480
And then you can pull it down
in your environment, and

00:24:43.480 --> 00:24:44.440
just run it.

00:24:44.440 --> 00:24:45.400
>> Cool, nice.

00:24:45.400 --> 00:24:49.290
>> So I just built a new
container from that image.

00:24:49.290 --> 00:24:50.640
And I'll type in vim.

00:24:50.640 --> 00:24:52.170
And you can see that
there's the software.

00:24:52.170 --> 00:24:53.960
>> Yeah, nice.

00:24:53.960 --> 00:24:56.730
>> So
that's pretty simple stuff.

00:24:56.730 --> 00:25:00.220
And in the next video we'll dig
into images quite a bit more.

00:25:00.220 --> 00:25:04.630
We'll actually
take a look at how

00:25:04.630 --> 00:25:08.130
an image derived from a base
compares to that base.

00:25:08.130 --> 00:25:10.160
We'll look at the layering,
we'll actually take

00:25:10.160 --> 00:25:12.870
a much more microscopic look at
>> Kinda how that layering

00:25:12.870 --> 00:25:13.620
works.

00:25:13.620 --> 00:25:16.580
But to kinda round out
the demonstrations for

00:25:16.580 --> 00:25:19.070
this first introduction,
and that was pretty simple.

00:25:19.070 --> 00:25:21.500
We created a folder,
we installed some software.

00:25:21.500 --> 00:25:24.630
But I also wanted to give kind
of a full-fledged example of

00:25:24.630 --> 00:25:26.300
an application running
in a container,

00:25:26.300 --> 00:25:29.210
just to see something
a little more practical.

00:25:29.210 --> 00:25:34.731
To do so, I'm actually Let me
exit out of this container.

00:25:39.741 --> 00:25:41.877
Let me just get
into a folder here.

00:25:45.155 --> 00:25:48.130
I'm gonna use something
called Docker Compose.

00:25:48.130 --> 00:25:50.670
Something we can talk
about in a future video.

00:25:50.670 --> 00:25:55.440
But Docker Compose is Kind
of an orchestration tool

00:25:55.440 --> 00:26:00.140
that allows us to
define instructions for

00:26:00.140 --> 00:26:03.740
deploying multiple containers
and linking them together.

00:26:03.740 --> 00:26:07.050
It's really just an automation
tool for deploying kind of

00:26:07.050 --> 00:26:08.520
a full application
>> Right.

00:26:08.520 --> 00:26:10.640
>> based out of several
different containers.

00:26:10.640 --> 00:26:11.210
>> Okay.
>> So,

00:26:11.210 --> 00:26:14.080
I'm just kinda
>> Get this example up and

00:26:14.080 --> 00:26:14.600
running quickly.

00:26:14.600 --> 00:26:16.790
I'm gonna use something
called Doctor compose.

00:26:16.790 --> 00:26:20.810
All right, so

00:26:20.810 --> 00:26:26.140
doctor compose dash doctor
compose up space dash d.

00:26:26.140 --> 00:26:32.080
Let me try that again.

00:26:34.220 --> 00:26:35.275
I wasn't in the right folder.

00:26:35.275 --> 00:26:40.272
docker -compose up -d.

00:26:41.810 --> 00:26:45.490
That quickly it spun
up two computers.

00:26:45.490 --> 00:26:47.540
So if I do docker ps

00:26:48.740 --> 00:26:52.320
you can see that I've got
two containers running.

00:26:53.580 --> 00:26:57.121
The images used were
neilpeterson/front and

00:26:57.121 --> 00:26:58.935
then a MySQL image, and

00:26:58.935 --> 00:27:02.211
they are running on
this system right now.

00:27:04.032 --> 00:27:07.213
So let me just grab the IP
address of this system.

00:27:21.557 --> 00:27:25.532
And so what we're doing, what's
happening here is I'm attaching

00:27:25.532 --> 00:27:29.405
to an application that's running
in the front ended container.

00:27:29.405 --> 00:27:30.170
>> Mm-hm.

00:27:30.170 --> 00:27:32.490
it's just a simple little form
that is going to insert some

00:27:32.490 --> 00:27:34.650
data into a database.

00:27:34.650 --> 00:27:35.640
So I'll just do C9 C9.

00:27:35.640 --> 00:27:39.150
I won't actually fill this out.

00:27:41.560 --> 00:27:42.250
Click submit.

00:27:49.400 --> 00:27:52.100
And then I went to another page
in the application and you can

00:27:52.100 --> 00:27:55.880
see where we are retrieving
the data From actually a MySQL

00:27:55.880 --> 00:27:58.980
instance that was running on
a second container there.

00:27:58.980 --> 00:28:01.400
>> Nice.
So that Docker composed

00:28:01.400 --> 00:28:04.470
capability that you just
used was essentially

00:28:04.470 --> 00:28:06.210
using some kind of
configuration file.

00:28:06.210 --> 00:28:07.530
>> Yep.
>> To go, I need this and

00:28:07.530 --> 00:28:08.920
this, boom.

00:28:08.920 --> 00:28:11.250
And you had already configured
those individually too.

00:28:11.250 --> 00:28:13.100
And it told them what to
run when it started and

00:28:13.100 --> 00:28:17.525
you'll see there Local/bin/start
for the My SQL, and

00:28:17.525 --> 00:28:20.170
run.sh for the front end.

00:28:20.170 --> 00:28:22.110
Is that essentially what-
>> Yeah,

00:28:22.110 --> 00:28:23.890
let's just take
a look at the file.

00:28:23.890 --> 00:28:25.140
So it's exactly
what we're doing,

00:28:25.140 --> 00:28:27.750
I've just defined two
containers in here.

00:28:27.750 --> 00:28:30.280
So my first container
I wanna use is image.

00:28:30.280 --> 00:28:32.210
I've exposed some ports
which we'll talk about

00:28:32.210 --> 00:28:34.210
in the next video.

00:28:34.210 --> 00:28:36.840
And then just set some
environmental variables and

00:28:36.840 --> 00:28:39.640
then the same for
my second container.

00:28:39.640 --> 00:28:44.160
So just an automated way of

00:28:44.160 --> 00:28:46.940
spinning up multiple containers,
linking them together.

00:28:46.940 --> 00:28:47.760
>> Nice.

00:28:47.760 --> 00:28:49.520
>> Yeah, and again, my intention
there is I just really want to

00:28:49.520 --> 00:28:52.560
show kind of a more practical
example of what a container

00:28:52.560 --> 00:28:56.220
can do, beyond just creating
folders and installing software.

00:28:56.220 --> 00:28:59.560
But an application Running
from within a container.

00:28:59.560 --> 00:29:03.080
>> Nice, okay, so I suppose
that concludes our demo.

00:29:03.080 --> 00:29:06.800
And that brings us to the end
of this first episode on this

00:29:06.800 --> 00:29:09.250
mini series on
the Containers Channel.

00:29:09.250 --> 00:29:10.940
There's some recommended
resources you want

00:29:10.940 --> 00:29:12.430
to make sure that
you're aware of.

00:29:12.430 --> 00:29:14.510
Firstly, you can download
the window's server technical

00:29:14.510 --> 00:29:17.430
preview Currently Technical
Preview 3 as of time

00:29:17.430 --> 00:29:19.770
of recording, if you're watching
this somewhere down the line,

00:29:19.770 --> 00:29:22.430
it might be T P 4,
it might be even later.

00:29:22.430 --> 00:29:24.050
It's still gonna be relevant.

00:29:24.050 --> 00:29:29.396
So check out that, review
the container's documentation on MSDN.Microsoft.com/virtualiza-

00:29:29.396 --> 00:29:31.415
tion There's Docker resources on

00:29:31.415 --> 00:29:35.740
docker.com/microsoft, and to get
started with Docker, there's

00:29:35.740 --> 00:29:39.518
links to the documentation as
well, docs.docker.com/windows.

00:29:39.518 --> 00:29:43.100
Lots of useful resources there,
and join us again on the next

00:29:43.100 --> 00:29:46.570
video in this mini-series, where
Neil and I will be exploring

00:29:46.570 --> 00:29:49.293
images in a bit more depth, and
networking, and portability.

00:29:49.293 --> 00:29:51.852
So, cool, thanks.

00:29:51.852 --> 00:29:52.352
See you later.

00:29:52.352 --> 00:30:02.352
[MUSIC]

