WEBVTT

00:00:00.001 --> 00:00:07.580
Docker is one of the core elements of developing Python applications in consistent ways, as well as running them across different hardware universally.

00:00:07.580 --> 00:00:10.840
On this episode, you'll meet Peter McKee from Docker.

00:00:10.840 --> 00:00:15.100
He's here to catch us up on what's happening in the Docker universe for Python developers.

00:00:15.100 --> 00:00:20.520
This is Talk Python To Me, episode 308, recorded March 9th, 2021.

00:00:20.520 --> 00:00:40.300
Welcome to Talk Python To Me, a weekly podcast on Python, the language, the libraries, the ecosystem, and the personalities.

00:00:40.300 --> 00:00:42.100
This is your host, Michael Kennedy.

00:00:42.100 --> 00:00:48.020
Follow me on Twitter, where I'm @mkennedy, and keep up with the show and listen to past episodes at talkpython.fm,

00:00:48.020 --> 00:00:51.160
and follow the show on Twitter via at Talk Python.

00:00:51.160 --> 00:00:55.940
This episode is brought to you by Datadog and us over at Talk Python Training.

00:00:55.940 --> 00:00:58.180
Please check out what we're offering during our segments.

00:00:58.180 --> 00:00:59.580
It really helps support the show.

00:00:59.580 --> 00:01:01.300
A little bit of news.

00:01:01.300 --> 00:01:05.600
We just released not one, but two new courses, and more are just around the corner.

00:01:05.600 --> 00:01:10.100
You might remember my interview with Sebastian Witowski over on episode 279,

00:01:10.100 --> 00:01:12.540
where we discussed the modern Python developers toolkit.

00:01:12.540 --> 00:01:16.520
Since then, he and I have teamed up to bring you this whole idea of modern tools

00:01:16.520 --> 00:01:19.780
applied to well-structured Python projects as a course.

00:01:19.780 --> 00:01:20.880
And we just released it.

00:01:20.880 --> 00:01:22.820
It's called Modern Python Projects.

00:01:22.820 --> 00:01:26.360
You can find it over at talkpython.fm/modern dash python dash projects,

00:01:26.360 --> 00:01:28.140
or you'll find the link in the show notes.

00:01:28.140 --> 00:01:33.100
If you like the idea of a total tool chain makeover for how you're building your Python projects and applications,

00:01:33.100 --> 00:01:37.060
be sure to drop by the course page and watch the overview video to see if it's right for you.

00:01:37.060 --> 00:01:40.060
I'm sure everyone will learn something interesting in this course.

00:01:40.140 --> 00:01:43.080
There's so many cool things in here, no matter your experience level.

00:01:43.080 --> 00:01:47.520
Another new course we just launched is full web apps with FastAPI.

00:01:47.520 --> 00:01:51.540
FastAPI is definitely the framework with the most energy lately.

00:01:51.540 --> 00:01:56.760
But if you build your APIs with FastAPI, well, you need another framework for your HTML user interaction side.

00:01:56.760 --> 00:02:00.400
In other words, could you replace Flask or Django with FastAPI?

00:02:00.500 --> 00:02:01.740
The answer is yes.

00:02:01.740 --> 00:02:03.800
And this course is your guide to doing so.

00:02:03.800 --> 00:02:07.340
Check it out at talkpython.fm/fastapi dash web.

00:02:07.340 --> 00:02:08.400
Link in the show notes.

00:02:08.400 --> 00:02:11.500
I'm really excited about these two courses, and I hope you all love them.

00:02:11.500 --> 00:02:16.080
We'll be giving away five tickets to attend PyCon US 2021.

00:02:16.080 --> 00:02:20.080
This conference is one of the primary sources of funding for the PSF,

00:02:20.080 --> 00:02:23.460
and it's going to be held May 14th to 15th online.

00:02:23.460 --> 00:02:27.180
And because it's online this year, it's open to anyone around the world.

00:02:27.180 --> 00:02:32.040
So we decided to run a contest to help people, especially those who have never been part of PyCon before,

00:02:32.040 --> 00:02:33.400
attend it this year.

00:02:33.400 --> 00:02:38.740
Just visit talkpython.fm/PyCon 2021 and enter your email address,

00:02:38.740 --> 00:02:41.440
and you'll be in the running for an individual PyCon ticket.

00:02:41.440 --> 00:02:43.220
Compliments of Talk Python.

00:02:43.220 --> 00:02:46.080
These normally sell for about $100 each.

00:02:46.080 --> 00:02:49.360
And if you're certain you want to go, I encourage you to visit the PyCon website,

00:02:49.360 --> 00:02:53.600
get a ticket, and that money will go to support the PSF and the Python community.

00:02:53.600 --> 00:02:55.900
Congratulations to Tammy Doe.

00:02:56.020 --> 00:03:00.040
Tammy won the second of five tickets we're giving away, and there's still more chances to win.

00:03:00.040 --> 00:03:04.620
If you want to be in this drawing, just visit talkpython.fm/PyCon 2021.

00:03:04.620 --> 00:03:06.480
Enter your email address.

00:03:06.480 --> 00:03:08.600
You'll be in the running to win a ticket.

00:03:08.600 --> 00:03:10.700
Now, let's get on to that interview.

00:03:10.700 --> 00:03:13.700
Peter, welcome to Talk Python To Me.

00:03:13.700 --> 00:03:14.980
Yeah, thanks for having me.

00:03:14.980 --> 00:03:15.700
Great to be here.

00:03:15.700 --> 00:03:17.660
Hey, it's really great to have you here as well.

00:03:17.660 --> 00:03:21.860
It's been far too long since we've talked containers and Docker and all the things.

00:03:21.860 --> 00:03:24.780
I was looking back at something like Show 9 or something like that.

00:03:24.780 --> 00:03:26.140
It was, I believe, 2015.

00:03:26.140 --> 00:03:28.360
Has anything changed with Docker since 2015?

00:03:28.360 --> 00:03:30.000
I suspect something has.

00:03:30.000 --> 00:03:32.300
Yeah, containers are interesting.

00:03:32.300 --> 00:03:34.420
They're moving very fast, right?

00:03:34.420 --> 00:03:35.120
Very fast.

00:03:35.460 --> 00:03:42.520
On just about all fronts, I think the whole developer, DevOps, DevSecOps, you know, just have embraced it the past five years.

00:03:42.520 --> 00:03:45.780
Yeah, I was thinking what you might respond to from that question.

00:03:45.780 --> 00:03:56.560
And to me, it seems like not so much how containers work and run, but just how people have embraced them and how many places they show up and how many people are saying, hey, hey, we have a cluster.

00:03:56.700 --> 00:03:58.040
You just run your thing over here.

00:03:58.040 --> 00:04:03.820
Just give us your container and we'll help you run it as part of our platform as a service or whatever it is they're cloud hosting.

00:04:03.820 --> 00:04:04.280
Yeah.

00:04:04.280 --> 00:04:05.140
Yeah, it's very interesting.

00:04:05.140 --> 00:04:12.560
And then there's all these little micro, maybe micro is not the correct term, but all these, a lot of SaaS and startups and trying to help.

00:04:12.820 --> 00:04:15.180
And containers are at the core of a lot of that.

00:04:15.180 --> 00:04:17.400
If you get in a container, we can run it.

00:04:17.400 --> 00:04:22.880
And yeah, some really interesting SaaS as they're starting up, little niche platforms as a service type things.

00:04:22.880 --> 00:04:23.960
Yeah, 100%.

00:04:23.960 --> 00:04:24.600
Yeah, absolutely.

00:04:24.600 --> 00:04:25.660
It's super interesting.

00:04:25.660 --> 00:04:28.780
Before we dive too deep into that, though, let's get started with your story.

00:04:28.780 --> 00:04:30.000
How did you get into programming?

00:04:30.000 --> 00:04:35.620
As a kid, my dad's an accountant, but a nerd at heart, you know, a techie, let's say.

00:04:35.620 --> 00:04:41.900
And he started out, this is interesting, at least to me, he started out with calculators before PCs were a big thing.

00:04:41.980 --> 00:04:44.520
He had calculators and he programmed these calculators and stuff.

00:04:44.520 --> 00:04:50.220
And anyways, long story short, he ended up getting, I think it was Apple II was the first kind of computer we had.

00:04:50.220 --> 00:04:54.380
And I was fascinated about it, started programming on it, just learning, messing around.

00:04:54.380 --> 00:05:00.520
Fast forward after high school, I was in the Coast Guard and had gotten out and was going back to school.

00:05:00.520 --> 00:05:02.980
And, you know, I started back as an accountant.

00:05:02.980 --> 00:05:06.820
My dad said, hey, accounting is a good foundation, like math and science and those type of things.

00:05:06.820 --> 00:05:09.720
And I hated it, hated it, debits and credits.

00:05:10.100 --> 00:05:13.540
And I was just like micro Mac record.

00:05:13.540 --> 00:05:14.120
Yeah, exactly.

00:05:14.120 --> 00:05:16.600
Now it's very, yeah, now it's a lot more interesting.

00:05:16.600 --> 00:05:17.760
Back then I couldn't stand it.

00:05:17.760 --> 00:05:19.380
But then I lucked out.

00:05:19.380 --> 00:05:26.280
My father was running two steel companies and he had a consulting team that was writing software for him, you know, like very exciting stuff.

00:05:26.280 --> 00:05:29.600
Like inventory management, work in process tracking.

00:05:29.980 --> 00:05:35.000
It's not exciting, but it's the kind of stuff that if you looked at what people were doing before, it was dreadful, right?

00:05:35.000 --> 00:05:37.880
It was like transformative, even though it seems so boring and basic.

00:05:37.880 --> 00:05:38.200
Yeah.

00:05:38.200 --> 00:05:38.620
Yeah.

00:05:39.120 --> 00:05:41.680
And he said, why don't you come work for me?

00:05:41.680 --> 00:05:46.940
And this consulting firm, the main, the owner had some life issues or whatever and had to move on.

00:05:46.940 --> 00:05:50.140
And I said, well, I don't, you know, I don't know what I'm doing.

00:05:50.140 --> 00:05:51.760
He said, oh, you'll figure it out.

00:05:51.760 --> 00:05:54.060
There's a big Barnes and Noble at the top of the hill there.

00:05:54.060 --> 00:05:54.420
You can.

00:05:54.420 --> 00:05:55.820
They got a whole section on it.

00:05:55.820 --> 00:05:56.260
Just go read it.

00:05:56.260 --> 00:05:56.420
Yeah.

00:05:56.420 --> 00:05:57.120
Literally.

00:05:57.120 --> 00:05:57.460
Yeah.

00:05:57.460 --> 00:05:59.180
And, and I did, and I did.

00:05:59.180 --> 00:06:01.540
And, you know, it was, I had a passion.

00:06:01.540 --> 00:06:02.920
I had a burning desire, right?

00:06:02.920 --> 00:06:03.280
To learn.

00:06:03.280 --> 00:06:04.520
It was fascinating to me.

00:06:04.520 --> 00:06:05.240
Yeah.

00:06:05.240 --> 00:06:07.580
And so I switched over a computer science degree, MIS.

00:06:07.580 --> 00:06:14.940
And, but by the time I got farther along than that, I was getting paid to program and I was learning a ton more on the job.

00:06:14.940 --> 00:06:16.280
So that kind of started my career.

00:06:16.280 --> 00:06:18.820
Do you remember your first experience of getting paid to write code?

00:06:18.820 --> 00:06:21.480
Was it just like, I can't believe they're actually paying me to do this?

00:06:21.480 --> 00:06:22.020
Absolutely.

00:06:22.020 --> 00:06:22.800
Absolutely.

00:06:22.800 --> 00:06:23.280
It was.

00:06:23.280 --> 00:06:23.720
Yeah.

00:06:23.780 --> 00:06:28.600
I mean, it's literally how they say, you know, find something you love and are passionate in and the money will come.

00:06:28.600 --> 00:06:29.620
And yeah, it did.

00:06:29.620 --> 00:06:30.500
It certainly did.

00:06:30.500 --> 00:06:31.920
I was, I really enjoyed it.

00:06:31.920 --> 00:06:35.240
And yeah, I was getting paid to learn and write applications.

00:06:35.240 --> 00:06:37.040
So yeah, it was, it was awesome.

00:06:37.040 --> 00:06:37.760
It was awesome.

00:06:37.760 --> 00:06:37.960
Yeah.

00:06:37.960 --> 00:06:38.440
It's fantastic.

00:06:38.440 --> 00:06:40.420
I remember my first experience like that as well.

00:06:40.420 --> 00:06:43.980
I'm like, I had better figure this out before they realized I can't actually do this stuff.

00:06:43.980 --> 00:06:44.620
Yeah.

00:06:44.620 --> 00:06:49.400
I could do the things they want if I'm like, oh, any moment they're just going to say, no, if you actually don't get to do this anymore.

00:06:49.400 --> 00:06:50.600
But it was, it was great.

00:06:50.600 --> 00:06:50.920
Yeah.

00:06:50.920 --> 00:06:51.720
Yeah, exactly.

00:06:52.040 --> 00:06:54.520
By that time I said, you know, I have to get on a bigger team and learn.

00:06:54.520 --> 00:06:58.680
I know I got to the point where, okay, I can write programs, but I don't know how to be an engineer.

00:06:58.680 --> 00:07:01.000
And I'm not sure I could put it in those type of words.

00:07:01.000 --> 00:07:04.680
But, but luckily after that, I got on a team and had some great mentors.

00:07:04.680 --> 00:07:07.520
So yeah, that's, that's how I kind of got started.

00:07:07.520 --> 00:07:07.880
Yeah.

00:07:07.880 --> 00:07:08.340
Fantastic.

00:07:08.340 --> 00:07:09.860
I think that's good advice.

00:07:09.860 --> 00:07:15.500
You know, it's, it's really cool to be on small teams because you really get to put your hand in so many areas.

00:07:15.500 --> 00:07:18.680
You're not pigeonholed into, well, I'm the one who optimizes a stored procedure.

00:07:18.680 --> 00:07:19.500
So I do that.

00:07:19.500 --> 00:07:19.880
Right.

00:07:19.880 --> 00:07:28.860
You know, you get like a really broad experience, but at some point when it's like, I'm, there's no one I can talk to or learn from to go farther in this.

00:07:28.860 --> 00:07:31.320
Then it gets to be a little bit limiting, I think.

00:07:31.320 --> 00:07:32.320
Yeah, exactly.

00:07:32.320 --> 00:07:33.640
Like, well, that's how it got for me.

00:07:33.640 --> 00:07:35.440
I was like, I don't know where to go next.

00:07:35.440 --> 00:07:37.940
And I don't know who, you know, I didn't have anybody there with me.

00:07:37.940 --> 00:07:38.300
Yeah.

00:07:38.300 --> 00:07:46.640
I think having a mentor either, you know, well-structured or kind of loosely structured or whether you look back on it five years and go, oh, that person was kind of mentor for me.

00:07:46.640 --> 00:07:47.640
It's very powerful.

00:07:47.640 --> 00:07:47.940
Right.

00:07:47.940 --> 00:07:48.540
It's very powerful.

00:07:48.540 --> 00:07:48.900
Yeah.

00:07:48.900 --> 00:07:49.860
Yeah, absolutely.

00:07:49.860 --> 00:07:50.760
It totally is.

00:07:50.760 --> 00:07:56.380
I remember making that transition to a really great group of people who were, every one of them I felt like was way smarter than me.

00:07:56.480 --> 00:08:00.460
It was intimidating, but absolutely was a good outcome.

00:08:00.460 --> 00:08:00.700
Yeah.

00:08:00.700 --> 00:08:01.500
That's the place to be.

00:08:01.500 --> 00:08:01.740
Right.

00:08:01.740 --> 00:08:06.540
Unless, you know, of course, I think a lot of us too in tech deal with the ego issue sometimes.

00:08:06.540 --> 00:08:07.280
I know I did.

00:08:07.280 --> 00:08:07.500
Right.

00:08:07.500 --> 00:08:08.700
Like, hey, I'm pretty smart.

00:08:08.700 --> 00:08:09.340
I know what I'm doing.

00:08:09.340 --> 00:08:11.580
Then you, when you're young and ambitious, right.

00:08:11.580 --> 00:08:17.860
And you run into other really smart people that like are smart and you go, okay, I'm not that smart.

00:08:17.860 --> 00:08:18.160
Yeah.

00:08:18.160 --> 00:08:20.160
It's a little humbling, but it can be humbling.

00:08:20.160 --> 00:08:20.420
Yeah.

00:08:20.420 --> 00:08:23.640
Those are probably good life lessons, but they're hard to take when you're young.

00:08:23.640 --> 00:08:24.000
I remember.

00:08:24.000 --> 00:08:24.780
Yeah, absolutely.

00:08:24.780 --> 00:08:25.220
Yeah.

00:08:25.220 --> 00:08:25.740
Fantastic.

00:08:26.300 --> 00:08:27.420
So how about now?

00:08:27.420 --> 00:08:28.580
What are you doing day to day?

00:08:28.580 --> 00:08:28.940
Yeah.

00:08:28.940 --> 00:08:32.580
So I head up the developer relations team at Docker and I get to do what I love.

00:08:32.580 --> 00:08:37.540
You know, I still get to play around with tech and learn new things and build stuff.

00:08:37.540 --> 00:08:40.640
But then I also get to transfer that knowledge to others or at least try.

00:08:40.640 --> 00:08:44.100
So teaching and mentoring is what I do mostly day to day, right?

00:08:44.100 --> 00:08:46.260
Content and workshops and those types of things.

00:08:46.260 --> 00:08:50.860
I help folks learn to use containers and Docker to help build applications.

00:08:50.860 --> 00:08:51.180
Right.

00:08:51.180 --> 00:08:53.040
So, yeah, it's fantastic.

00:08:53.040 --> 00:08:54.320
I love my job.

00:08:54.320 --> 00:08:54.980
Truly do.

00:08:55.120 --> 00:08:56.280
I can imagine.

00:08:56.280 --> 00:09:01.420
You know, I really have thought for a long time that this developer evangelist sort of

00:09:01.420 --> 00:09:05.380
role just seems so neat because you get to work with a bunch of people.

00:09:05.380 --> 00:09:09.140
You're not really there just closing boring JIRA tickets every day, right?

00:09:09.140 --> 00:09:13.580
You get to just work at like the fun level of software and really interact with a lot of

00:09:13.580 --> 00:09:14.100
different people.

00:09:14.100 --> 00:09:17.440
You get to go to conferences, maybe be on a podcast, all those kinds of things.

00:09:17.540 --> 00:09:22.780
I just, it's a really cool space to be after you've learned enough in the industry to play

00:09:22.780 --> 00:09:23.120
that role.

00:09:23.120 --> 00:09:23.380
Yeah.

00:09:23.380 --> 00:09:23.980
A hundred percent.

00:09:23.980 --> 00:09:28.880
I remember seeing, I had thought about the role before, but I think I was at Google's,

00:09:28.880 --> 00:09:29.500
what is it?

00:09:29.500 --> 00:09:30.060
Google Next.

00:09:30.060 --> 00:09:31.260
I think it's their conference.

00:09:31.260 --> 00:09:35.840
And that was when I kind of, I had known about Dev Advocates and DevRel, but when I saw

00:09:35.840 --> 00:09:37.660
a couple speak, I was like, oh wait, Dev Advocates.

00:09:37.660 --> 00:09:39.420
Oh, they get paid to do this.

00:09:39.420 --> 00:09:43.200
This isn't just, you know, Peter, who's a software engineer, then speaks, right?

00:09:43.200 --> 00:09:44.060
This is their job.

00:09:44.060 --> 00:09:46.020
And I was like, oh, that's, that's pretty interesting.

00:09:46.020 --> 00:09:46.300
Yeah.

00:09:46.300 --> 00:09:46.780
Yeah.

00:09:46.780 --> 00:09:47.040
Yeah.

00:09:47.040 --> 00:09:50.660
It's, I think you got to have the right personality for it, but I think it's really fantastic.

00:09:50.660 --> 00:09:55.080
I did actually a whole episode, episode 189 on this role.

00:09:55.080 --> 00:09:59.000
And I had four or five people who were at different companies doing this.

00:09:59.000 --> 00:10:00.900
So yeah, I was, it's really, really neat.

00:10:00.900 --> 00:10:06.500
So, you know, I do want to catch up on what is new and Docker and containers in that whole space,

00:10:06.500 --> 00:10:09.080
but there are a lot of people with lots of different backgrounds.

00:10:09.080 --> 00:10:13.140
Let's, you know, listen to the show who I'm sure everyone's heard of Docker and

00:10:13.140 --> 00:10:14.180
containers, right?

00:10:14.180 --> 00:10:17.460
It's like hearing of Linux or something, but that doesn't mean you're super familiar

00:10:17.460 --> 00:10:19.980
with it or you really understand the advantages or maybe the history.

00:10:19.980 --> 00:10:24.500
So let's actually maybe start with just like the history of containers a little bit.

00:10:24.500 --> 00:10:31.140
I know when I first saw the talk by the original, I think it was the original CEO of Docker,

00:10:31.140 --> 00:10:35.520
he had a really interesting sort of tie back to shipping containers.

00:10:35.520 --> 00:10:36.000
Yeah.

00:10:36.000 --> 00:10:37.420
So what's this whole idea of containers?

00:10:37.420 --> 00:10:38.320
Where's it come from?

00:10:38.320 --> 00:10:39.220
What's the deal?

00:10:39.220 --> 00:10:39.480
Yeah.

00:10:39.480 --> 00:10:40.120
Solomon Hykes.

00:10:40.120 --> 00:10:41.100
Yeah, that was him.

00:10:41.220 --> 00:10:44.220
When I first saw his, I think it was at a Pi conference.

00:10:44.220 --> 00:10:45.880
Now that I think about it, actually in Europe.

00:10:45.880 --> 00:10:46.900
Yeah.

00:10:46.900 --> 00:10:50.600
He gave a quick brief, kind of like what do you call lightning talk, right?

00:10:50.600 --> 00:10:54.340
And it kind of went over at the end and people like went kind of crazy.

00:10:54.340 --> 00:10:58.140
And I remember kind of seeing it and I was like, and if you ever go watch it, I recommend people

00:10:58.140 --> 00:11:00.900
go watch it and kind of look for the aha moment.

00:11:00.900 --> 00:11:02.540
At least it took me a bit, right?

00:11:02.780 --> 00:11:04.760
And, you know, he did ran these commands and then, oh yeah.

00:11:04.760 --> 00:11:07.940
And then there's this process running inside of a container and super easy.

00:11:07.940 --> 00:11:11.220
And I forget what he demoed, but it took me a while, right?

00:11:11.220 --> 00:11:11.880
To be honest, right?

00:11:11.880 --> 00:11:14.520
I stepped back and said, well, okay, we have VMs.

00:11:14.520 --> 00:11:15.440
What is this container thing?

00:11:15.440 --> 00:11:18.840
And it took me a little bit to figure out like, oh wow, this is super powerful.

00:11:18.840 --> 00:11:23.920
But, you know, containers that the constructs to build containers have been around for a while

00:11:23.920 --> 00:11:25.320
since the seventies, right?

00:11:25.360 --> 00:11:29.960
And been in Unix, different Unix flavors with change root and those type of things.

00:11:29.960 --> 00:11:38.980
And then I think around 2000, I believe was when vServe came out and then about eight years.

00:11:38.980 --> 00:11:44.800
So you had Linux vServe and FreeBSD had some, you know, container-like functionalities to isolate

00:11:44.800 --> 00:11:47.000
processes into those type of things.

00:11:47.000 --> 00:11:51.340
So vServe was kind of like a virtual, you know, sitting on top of the core kernel and having

00:11:51.340 --> 00:11:52.420
some virtualization there.

00:11:52.420 --> 00:11:53.500
I'll put virtualization.

00:11:53.500 --> 00:11:57.460
Yeah, when I first heard about Docker, I thought, oh, this is this amazing new thing.

00:11:57.460 --> 00:12:02.220
And then as I researched it more, I'm like, actually this, the pieces had always, not always,

00:12:02.220 --> 00:12:03.540
but they had been there for a while.

00:12:03.540 --> 00:12:07.360
Like these pieces you're talking about, they just hadn't really been put into a nice little

00:12:07.360 --> 00:12:09.100
package the way Docker has, right?

00:12:09.100 --> 00:12:09.460
Yeah.

00:12:09.460 --> 00:12:09.860
Yeah.

00:12:09.860 --> 00:12:13.480
And I think that's the beauty of what Docker did and Solomon and his team, right?

00:12:13.480 --> 00:12:18.160
There was, I think there was three founders, but yeah, two is, was it 2013?

00:12:18.160 --> 00:12:19.040
There it is on the screen.

00:12:19.040 --> 00:12:19.260
Yeah.

00:12:19.260 --> 00:12:22.160
So 2013 Docker kind of took off, right?

00:12:22.160 --> 00:12:23.980
It kind of exploded and it was just that.

00:12:23.980 --> 00:12:25.840
And I, you know, they simplified containers.

00:12:25.840 --> 00:12:27.720
These constructs were all there, but they made it easy.

00:12:27.720 --> 00:12:32.220
The ability to deep, you know, drop back down in, into the details or stay very high level

00:12:32.220 --> 00:12:37.540
and use, you know, Docker run, Docker push, you know, those Docker build, right?

00:12:37.540 --> 00:12:40.080
Those three main commands were super powerful.

00:12:40.080 --> 00:12:41.660
And I think that was the beauty of Docker.

00:12:41.660 --> 00:12:47.700
They just made it easier for the average developer or, you know, for, if you had to be a Linux kernel

00:12:47.700 --> 00:12:50.880
developer to kind of really understand containers before that.

00:12:50.880 --> 00:12:51.520
Yeah.

00:12:51.520 --> 00:12:52.420
And they simplified it.

00:12:52.420 --> 00:12:52.580
Yeah.

00:12:52.580 --> 00:12:54.940
Linux admin or something like that, right?

00:12:55.020 --> 00:12:55.200
Yeah.

00:12:55.200 --> 00:12:55.260
Yeah.

00:12:55.260 --> 00:12:55.940
A hundred percent.

00:12:55.940 --> 00:12:59.360
And it's kind of like, I think Microsoft did a great job at this.

00:12:59.360 --> 00:13:03.960
I think Apple has done a great job at this, you know, Microsoft with, you know, VB, right?

00:13:03.960 --> 00:13:08.520
And I'm going to get beat up on the internets for this visual, visual basic, but visual basic

00:13:08.520 --> 00:13:11.680
six, I mean, kind of weird, but it was a game changer, right?

00:13:11.680 --> 00:13:17.500
You had C++ MFC, you know, writing these C++ to write desktop apps and business apps.

00:13:17.500 --> 00:13:17.740
Right.

00:13:17.960 --> 00:13:21.160
And VB6 came along and said, oh no, no, it's, you know, if you need a text box and

00:13:21.160 --> 00:13:22.880
some labels and a button, just drag it on there.

00:13:22.880 --> 00:13:23.140
Right.

00:13:23.140 --> 00:13:24.260
Look, I won't beat you up for that.

00:13:24.260 --> 00:13:25.540
VB was transformative.

00:13:25.540 --> 00:13:27.320
It was magical.

00:13:27.320 --> 00:13:27.780
Yeah.

00:13:27.780 --> 00:13:32.200
The problem with VB was you could go so far and then you're like, well, VB doesn't do that.

00:13:32.200 --> 00:13:34.520
So now you, now you get a grownup.

00:13:34.520 --> 00:13:38.260
Now it's time to put your big boy pants on and get a grownup language and suffer the,

00:13:38.260 --> 00:13:40.800
you know, C++ huge gap.

00:13:40.800 --> 00:13:44.620
But for what you, a lot of people built with that, it was incredibly easy.

00:13:44.620 --> 00:13:47.800
To be honest, there's nothing like that today that I can think of.

00:13:47.800 --> 00:13:52.480
That is so powerful for building a little distributable application I can give to you.

00:13:52.480 --> 00:13:52.660
Yeah.

00:13:52.660 --> 00:13:55.700
Electron feels super complicated and hard.

00:13:55.700 --> 00:13:59.940
Python, you can build stuff, but it's always kind of like, but this is a challenge or that,

00:13:59.940 --> 00:14:06.060
you know, even though the windows stuff with WPF is, it's way more complicated than like,

00:14:06.060 --> 00:14:07.500
it was magic, right?

00:14:07.500 --> 00:14:12.160
It's just, it's too bad that there's not sort of a semi-modern version of something that

00:14:12.160 --> 00:14:13.220
simple for people.

00:14:13.220 --> 00:14:13.520
Yeah.

00:14:14.080 --> 00:14:18.860
And if, who knows if, if Visual Basic had curly braces, we might have a different story.

00:14:18.860 --> 00:14:21.640
I mean, like, like truly, right?

00:14:21.640 --> 00:14:24.500
I mean, I remember having debates with, yeah, what's not a real language?

00:14:24.500 --> 00:14:26.040
It's, you know, it's basic.

00:14:26.040 --> 00:14:27.840
It's the basic programming language, right?

00:14:27.840 --> 00:14:28.340
But yeah.

00:14:28.340 --> 00:14:28.680
Yeah.

00:14:28.680 --> 00:14:28.980
Yeah.

00:14:28.980 --> 00:14:29.320
Yeah.

00:14:29.320 --> 00:14:33.340
And John Sheen out there in the live stream says, rad concepts seem to be coming back as

00:14:33.340 --> 00:14:34.920
these low code, no code platforms.

00:14:34.920 --> 00:14:36.780
That's a really interesting tie in there.

00:14:36.780 --> 00:14:38.020
I do agree with that.

00:14:38.020 --> 00:14:42.560
I think that they've gone even lower than, or simpler than what Visual Basic was to like

00:14:42.560 --> 00:14:43.660
really, really simple.

00:14:43.660 --> 00:14:47.160
So yeah, I'm not sure it's exactly equivalent, but it's definitely, you're right.

00:14:47.160 --> 00:14:48.520
Those things are definitely coming back.

00:14:48.520 --> 00:14:48.780
Yeah.

00:14:48.780 --> 00:14:50.120
I think we were real complicated.

00:14:50.120 --> 00:14:52.420
Now we're going real too simplifying, right?

00:14:52.420 --> 00:14:54.000
The pendulum swings hard.

00:14:54.000 --> 00:14:54.420
Yeah.

00:14:54.420 --> 00:14:55.560
I think we'll find it.

00:14:55.560 --> 00:14:58.040
I do believe though, with technology, right?

00:14:58.040 --> 00:14:59.500
Abstractions get higher and higher.

00:14:59.920 --> 00:15:03.980
And well, this will kind of roll in a little bit into where the container history went

00:15:03.980 --> 00:15:04.500
next.

00:15:04.500 --> 00:15:11.320
And, you know, 2017, 18-ish, Kubernetes kind of dominated the orchestration, right?

00:15:11.320 --> 00:15:12.240
And still does.

00:15:12.240 --> 00:15:15.960
But it is, I was going to say horribly complex.

00:15:15.960 --> 00:15:17.900
And maybe it is, maybe I'll get beat up for that too.

00:15:17.900 --> 00:15:20.380
But it is extremely complex, right?

00:15:20.380 --> 00:15:21.200
Extremely complex.

00:15:21.200 --> 00:15:26.100
And you're mostly talking about like running a Kubernetes cluster is complex.

00:15:26.100 --> 00:15:29.460
Not necessarily like somebody's already set up for you and you give them a-

00:15:29.460 --> 00:15:31.260
of a definition and say, run that.

00:15:31.260 --> 00:15:34.340
Like that part might not be so hard, but like if you're going to do the whole stack, right?

00:15:34.340 --> 00:15:34.620
Yeah.

00:15:34.620 --> 00:15:36.220
The whole stack from the ground up, right?

00:15:36.220 --> 00:15:36.500
Yeah.

00:15:36.500 --> 00:15:39.800
So it's a bunch of moving parts, getting installed, getting everything working together.

00:15:39.800 --> 00:15:41.280
Security, networking.

00:15:41.280 --> 00:15:41.740
Yeah.

00:15:41.740 --> 00:15:44.180
It's not simple, right?

00:15:44.180 --> 00:15:45.240
It's not simple at all.

00:15:45.240 --> 00:15:49.820
This portion of Talk Python To Me is brought to you by Datadog.

00:15:49.820 --> 00:15:54.460
Are you having trouble visualizing latency and CPU or memory bottlenecks in your app?

00:15:54.460 --> 00:15:57.340
Not sure where the issue is coming from or how to solve it?

00:15:57.940 --> 00:16:02.740
Datadog seamlessly correlates logs and traces at the level of individual requests, allowing

00:16:02.740 --> 00:16:05.120
you to quickly troubleshoot your Python application.

00:16:05.120 --> 00:16:09.760
Plus, their continuous profiler allows you to find the most resource-consuming parts of

00:16:09.760 --> 00:16:13.480
your production code all the time at any scale with minimal overhead.

00:16:13.480 --> 00:16:16.500
Be the hero that got that app back on track at your company.

00:16:16.500 --> 00:16:22.660
Get started today with a free trial at talkpython.fm/Datadog, or just click the link in your

00:16:22.660 --> 00:16:23.900
podcast player's show notes.

00:16:23.900 --> 00:16:26.460
Get the insight you've been missing with Datadog.

00:16:26.460 --> 00:16:31.860
I think it'll get easier and easier and easier and orchestrated run times.

00:16:31.860 --> 00:16:36.380
You know, I see a lot in tech, like the app engine from Google with Python, right?

00:16:36.380 --> 00:16:37.900
Well, basically serverless now.

00:16:37.900 --> 00:16:41.100
But when it first came out, you're like, what, you're going to run my whole app?

00:16:41.100 --> 00:16:41.760
No, no, no, no, no.

00:16:41.760 --> 00:16:42.860
I need to control all that.

00:16:42.860 --> 00:16:43.240
Yeah.

00:16:43.240 --> 00:16:44.000
So we did away with it.

00:16:44.000 --> 00:16:44.900
But now we're coming back.

00:16:44.900 --> 00:16:46.520
You know, serverless, we're kind of coming back to it.

00:16:46.520 --> 00:16:47.640
Same with Kubernetes, right?

00:16:47.700 --> 00:16:52.020
Oh, you're ECS and ACI on, you know, hey, give me a container.

00:16:52.020 --> 00:16:53.180
I'll just run it and manage it.

00:16:53.180 --> 00:16:54.280
You know, we said, no, no, no, no.

00:16:54.280 --> 00:16:55.500
I need to control all that.

00:16:55.500 --> 00:16:57.260
And then you get this massive Kubernetes.

00:16:57.260 --> 00:16:59.440
And now I think we're going back, right?

00:16:59.440 --> 00:17:00.080
Yeah.

00:17:00.080 --> 00:17:02.380
I just want to give you my containers and run them for me, right?

00:17:02.380 --> 00:17:04.300
I don't have time to deal with all this.

00:17:04.300 --> 00:17:08.360
And Google's and Google announced autopilot and those type of things, right?

00:17:08.520 --> 00:17:09.960
So I think that's the way we're going to go.

00:17:09.960 --> 00:17:14.460
And I think Docker as a company, about a year ago, when we sold off the enterprise, a little

00:17:14.460 --> 00:17:18.940
over a year ago, sold the enterprise business off, got a kind of package software, enterprise

00:17:18.940 --> 00:17:21.620
software, moved more to SaaS, back to developers.

00:17:21.620 --> 00:17:22.020
Yeah.

00:17:22.020 --> 00:17:26.260
Well, let's dig into that for a minute, because I remember seeing Docker coming along and it

00:17:26.260 --> 00:17:28.840
was like, oh, this is a really cool, really cool dev tool.

00:17:28.840 --> 00:17:30.460
But how are they going to make any money out of this?

00:17:30.460 --> 00:17:34.160
And I feel like the first big step was, well, what we're going to do is we're going to have

00:17:34.160 --> 00:17:40.000
special offerings for enterprises and help them tame their zillions of different types

00:17:40.000 --> 00:17:41.180
of software they need to run.

00:17:41.180 --> 00:17:43.160
It sounds like that that's not the case anymore.

00:17:43.160 --> 00:17:43.940
What's that transition?

00:17:43.940 --> 00:17:45.540
What's happened with Docker around that?

00:17:45.540 --> 00:17:49.060
I think first the business model was we shifted to an enterprise business model.

00:17:49.060 --> 00:17:51.440
Prior to that, Docker was just exploding, right?

00:17:51.440 --> 00:17:55.360
And building tools and every Docker con, there was a new release and a new tool.

00:17:55.360 --> 00:17:58.000
And a lot of them would fizzle out and stuff like that.

00:17:58.000 --> 00:18:02.600
And the people with the purse strings, the money said, hey, hold on, this is great.

00:18:02.600 --> 00:18:03.620
You're doing some wonderful things.

00:18:03.700 --> 00:18:05.240
But we want our money back eventually.

00:18:05.240 --> 00:18:08.360
So can you go sell something?

00:18:08.360 --> 00:18:09.920
And they probably-

00:18:09.920 --> 00:18:11.820
Open source and Cumbia, we all love it.

00:18:11.820 --> 00:18:13.100
But we're investors.

00:18:13.100 --> 00:18:14.280
Where's our 10X?

00:18:14.280 --> 00:18:14.540
Yeah.

00:18:14.540 --> 00:18:14.900
Yeah.

00:18:14.900 --> 00:18:16.580
So we shifted a little bit to enterprise.

00:18:16.580 --> 00:18:18.780
And it was just an old business model, I think.

00:18:18.780 --> 00:18:24.260
On-prem, long licenses, three-year licenses, at least a year, if not three years.

00:18:24.260 --> 00:18:26.020
And then consulting on top of that.

00:18:26.020 --> 00:18:31.400
So paying a couple of hundred thousand dollars for the software and then twice that for consulting

00:18:31.400 --> 00:18:32.020
services.

00:18:32.360 --> 00:18:34.840
It was just a model that's a little bit outdated.

00:18:34.840 --> 00:18:36.640
And it's still there, of course.

00:18:36.640 --> 00:18:41.640
But Salesforce was really the first that kind of was starting to drive the nail into the coffin,

00:18:41.640 --> 00:18:42.360
so to speak, right?

00:18:42.360 --> 00:18:48.800
Well, it seems to me where a lot of those stories are moving are, are you moving to Azure?

00:18:48.800 --> 00:18:50.180
Are you moving to AWS?

00:18:50.180 --> 00:18:51.440
Are you moving to Linode?

00:18:51.440 --> 00:18:57.240
Instead of trying to solidify and really modernize the data center inside companies, a lot of them

00:18:57.240 --> 00:18:59.520
are going, how can we just get out of the data center business?

00:18:59.520 --> 00:19:02.240
In which case, that's a totally different story, right?

00:19:02.240 --> 00:19:04.000
In terms of how they work with you guys.

00:19:04.120 --> 00:19:08.380
We did have an advantage, you know, cross cloud, one single plane of glass for all your containers

00:19:08.380 --> 00:19:10.320
across clouds, internal, external.

00:19:10.320 --> 00:19:15.600
But it was just, it was a day late and a dollar short with funding when we kind of tried to

00:19:15.600 --> 00:19:15.940
do that.

00:19:16.400 --> 00:19:20.980
And yeah, so they sold off the enterprise business and focused back on what Docker does

00:19:20.980 --> 00:19:26.680
really well is build development tools, development experiences, making container development first

00:19:26.680 --> 00:19:28.080
really easy, right?

00:19:28.080 --> 00:19:29.580
And that's kind of what we're focused on.

00:19:29.580 --> 00:19:31.180
We call it shift left, right?

00:19:31.180 --> 00:19:32.340
Focusing back on the developer.

00:19:32.340 --> 00:19:38.100
We're still very interested in ops and DevOps and DevSec ops, but more from a developer's perspective

00:19:38.100 --> 00:19:42.420
and not that day two long-term running your production environments and stuff.

00:19:42.420 --> 00:19:43.000
Yeah.

00:19:43.000 --> 00:19:46.180
And so we got small again, got focused again.

00:19:46.180 --> 00:19:51.600
You know, we have something like 10 million developers or 10 minute desktop installs, you

00:19:51.600 --> 00:19:56.320
know, billions of images being pulled out of Hub and kind of looked at it and said, hey, there's

00:19:56.320 --> 00:19:57.480
a business here, right?

00:19:57.480 --> 00:20:01.960
Just official images on Hub is a huge, huge asset for us, right?

00:20:01.960 --> 00:20:06.240
You know, with Python and packages and all the languages and runtimes, right?

00:20:06.240 --> 00:20:11.200
To get really good, high quality scanned packages is hard, right?

00:20:11.200 --> 00:20:12.480
And Hub does that.

00:20:12.580 --> 00:20:16.000
So you know where you're getting your Mongo database from, who's produced it.

00:20:16.000 --> 00:20:17.540
Docker kind of puts their stamp on it.

00:20:17.540 --> 00:20:17.840
Okay.

00:20:17.840 --> 00:20:24.620
So you guys have like officially verified, certified, either direct images or Docker files that build

00:20:24.620 --> 00:20:25.360
the images out there?

00:20:25.360 --> 00:20:25.680
Yeah.

00:20:25.680 --> 00:20:26.160
Yeah.

00:20:26.160 --> 00:20:30.660
So we have official images, which we kind of say, hey, this is following best practices.

00:20:30.660 --> 00:20:33.720
This is, you know, been scanned for security vulnerabilities.

00:20:33.720 --> 00:20:35.940
That doesn't mean there's not security vulnerabilities in there.

00:20:35.940 --> 00:20:38.260
If anybody works in the security space, right?

00:20:38.260 --> 00:20:39.520
That's like impossible.

00:20:39.960 --> 00:20:40.900
Yeah.

00:20:40.900 --> 00:20:42.260
Lowers your attack surface.

00:20:42.260 --> 00:20:46.540
This is the, we're recording this the week that we're basically hearing, you know, 60,000

00:20:46.540 --> 00:20:51.500
direct companies have been compromised by the Microsoft Exchange vulnerability.

00:20:51.500 --> 00:20:53.840
And then they're probably providing products to others, right?

00:20:53.840 --> 00:20:54.960
Like it's, it's tough.

00:20:54.960 --> 00:20:55.360
Yeah.

00:20:55.360 --> 00:20:56.040
Yeah, it is.

00:20:56.100 --> 00:21:00.360
But at the same time, there's also a lot of news around supply chain vulnerability.

00:21:00.360 --> 00:21:03.120
And the SolarWinds thing was a supply chain vulnerability.

00:21:03.120 --> 00:21:07.340
I don't believe the, you don't know, but I don't believe the exchange one was.

00:21:07.340 --> 00:21:12.440
But, you know, Docker is certainly part of that supply chain, either strengthening or weakness

00:21:12.440 --> 00:21:13.080
there, right?

00:21:13.080 --> 00:21:18.900
Like we hear about how PyPI and npm and RubyGems and all of those have people have been, you know,

00:21:18.900 --> 00:21:21.560
putting renewed interest in trying to get bad things into there.

00:21:21.620 --> 00:21:27.320
I always have the same thought about Docker if I just grab an arbitrary Docker file off

00:21:27.320 --> 00:21:29.900
the internet because, oh, look, this configures the thing that I need.

00:21:29.900 --> 00:21:31.440
And I Docker build Docker run.

00:21:31.440 --> 00:21:35.260
Well, it might be configuring it with extra goodies for someone else right in there.

00:21:35.260 --> 00:21:35.480
Right.

00:21:35.480 --> 00:21:40.380
And so that sounds like a really good thing to, you know, at least have verified to the degree

00:21:40.380 --> 00:21:41.000
that you guys can.

00:21:41.000 --> 00:21:41.320
Yeah.

00:21:41.320 --> 00:21:41.780
Yeah.

00:21:41.780 --> 00:21:43.760
You used to be with security, right?

00:21:43.780 --> 00:21:48.640
It's, I remember sitting at a large computer manufacturing company here in central Austin,

00:21:48.640 --> 00:21:49.380
central Texas.

00:21:49.380 --> 00:21:53.740
I won't mention their name, but, you know, we're getting, oh, nice.

00:21:53.740 --> 00:21:54.200
Thank you.

00:21:54.200 --> 00:21:54.980
Yeah.

00:21:54.980 --> 00:21:59.760
So we're, you know, launching a big release and we're all sitting in the go, no go meeting

00:21:59.760 --> 00:22:01.680
and it's, you know, a couple of days before release.

00:22:01.680 --> 00:22:04.680
And of course, then that's when the security team walks in.

00:22:04.680 --> 00:22:04.920
Right.

00:22:05.160 --> 00:22:08.480
And they're like, oh, you know, like literally like dropping down.

00:22:08.480 --> 00:22:11.080
Hey, you didn't fill out your, your TPS reports.

00:22:11.080 --> 00:22:11.960
And exactly.

00:22:11.960 --> 00:22:16.140
Well, that's such the wrong time to do it because, you know, a lot of those ideas have to be built

00:22:16.140 --> 00:22:20.620
in early and you've got to, yeah, it's really tricky to layer that on at the very, very end.

00:22:20.620 --> 00:22:21.220
A hundred percent.

00:22:21.220 --> 00:22:26.600
And now with containers, developers a lot more are closer to the operating system and worrying

00:22:26.600 --> 00:22:27.040
about it.

00:22:27.040 --> 00:22:32.120
You know, before you had your VM and you had, you know, you had ops folks taking care of that

00:22:32.120 --> 00:22:33.200
was patching them and keeping it.

00:22:33.200 --> 00:22:34.000
Here's my code.

00:22:34.260 --> 00:22:35.960
It's going to need Nginx and uWSGI.

00:22:35.960 --> 00:22:36.760
You figure that out.

00:22:36.760 --> 00:22:36.960
Go.

00:22:36.960 --> 00:22:37.300
Right.

00:22:37.300 --> 00:22:37.800
Yeah.

00:22:37.800 --> 00:22:40.540
Now we're throwing it in containers and devs are doing a lot of that.

00:22:40.540 --> 00:22:45.240
So shifting that security even farther left to, Hey, scan your images, make, you should

00:22:45.240 --> 00:22:46.520
know what's going in your images.

00:22:46.520 --> 00:22:49.900
You know, what base images you're using, those types of things are super important.

00:22:49.900 --> 00:22:50.240
Yeah.

00:22:50.240 --> 00:22:50.760
Okay.

00:22:50.760 --> 00:22:53.840
And controlling that whole light, like you said, that, that whole life cycle, right.

00:22:53.840 --> 00:22:57.300
Of, of when you're building your images and how through CI/CD, right.

00:22:57.300 --> 00:23:00.520
Doing the consistency consistently, making sure you're doing scans.

00:23:00.520 --> 00:23:00.780
Right.

00:23:00.780 --> 00:23:02.860
So you can protect that whole pipeline.

00:23:02.860 --> 00:23:03.560
A hundred percent.

00:23:03.560 --> 00:23:03.820
Yeah.

00:23:03.820 --> 00:23:06.060
We definitely need to be thinking about that as an industry.

00:23:06.060 --> 00:23:06.880
It's serious.

00:23:06.880 --> 00:23:07.240
Yeah.

00:23:07.240 --> 00:23:10.600
There's so many smart people out there and they move fast.

00:23:10.600 --> 00:23:13.400
They move really fast and keeping up with the hackers is hard.

00:23:13.400 --> 00:23:15.580
That's for sure.

00:23:15.580 --> 00:23:16.220
That's for sure.

00:23:16.560 --> 00:23:20.640
So one of the things I thought it might be fun to touch on is just some of the areas

00:23:20.640 --> 00:23:25.520
that containers are useful, maybe some of their, their benefits, things like that.

00:23:25.520 --> 00:23:25.820
Right.

00:23:25.820 --> 00:23:30.720
I think there's a lot of different use cases that are not, well, it makes DevOps more consistent

00:23:30.720 --> 00:23:33.320
with development, even though that may be one of the benefits.

00:23:33.320 --> 00:23:33.620
Yeah.

00:23:33.980 --> 00:23:37.360
You know, the biggest problem that Docker solves is that packaging.

00:23:37.360 --> 00:23:38.400
It runs on my machine.

00:23:38.400 --> 00:23:38.720
Right.

00:23:38.720 --> 00:23:40.420
And that's been part of our marketing since the beginning.

00:23:40.420 --> 00:23:41.660
It works for me.

00:23:41.660 --> 00:23:42.140
Right.

00:23:42.140 --> 00:23:44.460
There's a fantastic thing that people should Google.

00:23:44.460 --> 00:23:48.660
Maybe if I can find it, I've put it on the show before, but there's a thing called, it

00:23:48.660 --> 00:23:49.120
works.

00:23:49.540 --> 00:23:51.760
It works on my machine certification.

00:23:51.760 --> 00:23:55.100
You can get the official certification.

00:23:55.100 --> 00:23:58.200
This is done by Jeff Atwood and some folks.

00:23:58.200 --> 00:23:58.760
Oh, that's fantastic.

00:23:58.760 --> 00:23:59.540
And another guy over there.

00:23:59.540 --> 00:24:00.680
And so you get this big banner.

00:24:00.680 --> 00:24:01.700
It says, it works on my machine.

00:24:01.700 --> 00:24:06.020
And the way you get it is you compile your code and getting the latest from any version

00:24:06.020 --> 00:24:09.360
control, getting the recent from that is totally optional and up to you.

00:24:09.360 --> 00:24:11.540
You launch the application that has been compiled.

00:24:11.540 --> 00:24:16.500
You cause at least one code path to be the, to, that needs to be checked, to be executed.

00:24:16.700 --> 00:24:19.380
The preferred way to do this is ad hoc manual testing.

00:24:19.380 --> 00:24:21.780
You may omit this step.

00:24:21.780 --> 00:24:25.560
If the code change was less than five lines or in the developer's professional opinion,

00:24:25.560 --> 00:24:27.120
it couldn't possibly result there.

00:24:27.120 --> 00:24:29.140
And then you check it into source control.

00:24:29.140 --> 00:24:29.420
Right.

00:24:29.420 --> 00:24:31.480
And so, yeah, I mean, that's, that's a joke.

00:24:31.480 --> 00:24:36.780
And the reason I bring it up is it's just, you know, so common in the industry that you

00:24:36.780 --> 00:24:39.020
run into this, this problem, right?

00:24:39.020 --> 00:24:43.020
That, well, we tested over here and under this environment, it works fine, but in a different

00:24:43.020 --> 00:24:44.280
environment, it doesn't.

00:24:44.420 --> 00:24:48.700
And, you know, we try to backfill that with things like CI/CD and whatnot, but it's, you

00:24:48.700 --> 00:24:50.120
know, it's still, it's not a perfect fit.

00:24:50.120 --> 00:24:55.660
So with, with Docker, you can get much closer to running on exactly the same system.

00:24:55.660 --> 00:24:55.920
Yeah.

00:24:55.920 --> 00:24:56.660
Yeah.

00:24:56.660 --> 00:25:00.920
The idea is not only package your app, but package the operating system, all of its

00:25:00.920 --> 00:25:06.100
dependencies, your app, its configuration, all the application dependencies all in one package,

00:25:06.100 --> 00:25:06.320
right?

00:25:06.320 --> 00:25:07.000
Into an image.

00:25:07.000 --> 00:25:09.200
And then pass, share that around, right?

00:25:09.200 --> 00:25:10.460
Makes it so much easier.

00:25:10.460 --> 00:25:10.740
Yeah.

00:25:10.740 --> 00:25:12.840
At that large computer manufacturer, right?

00:25:12.840 --> 00:25:14.160
We had two huge data centers.

00:25:14.160 --> 00:25:18.120
And I talk about this in my getting started video, you know, 50 in each center just for

00:25:18.120 --> 00:25:19.800
the browse layer and dub, dub, dub.

00:25:19.800 --> 00:25:23.360
And if you go through and patching those machines, those 50, and you miss one.

00:25:23.360 --> 00:25:27.260
And of course we had scripts and all that, but you know, we still had them manually.

00:25:27.260 --> 00:25:31.180
You list of what servers are in and out of the, out of the data center, who's in DNS,

00:25:31.320 --> 00:25:32.100
who's not right.

00:25:32.100 --> 00:25:32.720
You miss one.

00:25:32.720 --> 00:25:36.400
And then you get this, these, these random errors where I hit three good servers, the

00:25:36.400 --> 00:25:40.220
fourth one breaks, and then you hit F5 and you go back to server two and you're fine.

00:25:40.220 --> 00:25:40.660
Right.

00:25:40.660 --> 00:25:40.960
Yeah.

00:25:40.960 --> 00:25:45.180
That's really tricky when it's, it's going, you know, could be round Robin type of

00:25:45.180 --> 00:25:46.140
load balancing.

00:25:46.140 --> 00:25:48.900
And you're like, well, sometimes it's wrong, but I don't know when.

00:25:48.900 --> 00:25:49.160
Right.

00:25:49.160 --> 00:25:49.400
Yeah.

00:25:49.400 --> 00:25:53.380
So we used to just go and, you know, restart all the servers one by one.

00:25:53.380 --> 00:25:54.840
Some of the, some of the troubleshooting.

00:25:54.840 --> 00:25:55.060
Yeah.

00:25:55.060 --> 00:25:57.960
Some of the troubleshooting you get into is like, we have no idea.

00:25:57.960 --> 00:25:58.220
Yeah.

00:25:58.220 --> 00:26:00.900
So I think Docker really, really attacks that really well.

00:26:01.160 --> 00:26:04.720
But then when you looking at developers, what I'm really excited is, you know, moving into

00:26:04.720 --> 00:26:08.680
microservices and kind of more modern cloud first kind of development.

00:26:08.680 --> 00:26:09.160
Right.

00:26:09.160 --> 00:26:14.600
Again, getting everything running on your machine, you know, 10, 15, a hundred microservices that

00:26:14.600 --> 00:26:15.520
you're not going to use.

00:26:15.520 --> 00:26:16.160
You're not going to touch.

00:26:16.160 --> 00:26:17.740
You don't work on, but they need to be there.

00:26:17.740 --> 00:26:22.840
So, you know, you have this mesh of microservices or even just three or four of them, right.

00:26:22.840 --> 00:26:23.700
That work together.

00:26:23.700 --> 00:26:26.760
You have to have your sign on, you know, your single sign on, blah, blah, blah, all these

00:26:26.760 --> 00:26:31.000
things and getting databases and queuing and everything running locally is hard.

00:26:31.000 --> 00:26:31.460
Right.

00:26:31.460 --> 00:26:37.100
If I got to install Mongo and SQL server locally, and then maybe projects are using two different

00:26:37.100 --> 00:26:37.500
versions.

00:26:37.500 --> 00:26:37.940
Right.

00:26:37.940 --> 00:26:43.340
So now if everything's in containers and then if you're using compose, which I'll use orchestration

00:26:43.340 --> 00:26:46.340
loosely here, but it orchestrates your containers locally.

00:26:46.340 --> 00:26:46.640
Right.

00:26:46.640 --> 00:26:49.140
Because Docker is all well and simple and easy.

00:26:49.620 --> 00:26:53.760
When the goal is I need to fire up this Docker container and I put the thing I want to run

00:26:53.760 --> 00:26:58.160
at the end, you know, I say Docker run, you know, container something.

00:26:58.160 --> 00:27:03.220
But if I want to run multiple things and they've got to discover each other on the network, they've

00:27:03.220 --> 00:27:04.520
got to have DNS names.

00:27:04.800 --> 00:27:06.740
And this one has to start before that one.

00:27:06.740 --> 00:27:07.020
Right.

00:27:07.020 --> 00:27:12.540
All of a sudden it's a whole, a whole nother level of like manual challenges to do that

00:27:12.540 --> 00:27:12.900
by hand.

00:27:12.900 --> 00:27:17.940
So Docker compose is basically a way to write a file that takes a bunch of Docker containers

00:27:17.940 --> 00:27:21.160
and starts them the right way with the right ports and everything.

00:27:21.160 --> 00:27:21.340
Yeah.

00:27:21.440 --> 00:27:21.800
Exactly.

00:27:21.800 --> 00:27:22.440
Exactly.

00:27:22.440 --> 00:27:25.680
Wire gives you kind of built in discoverability.

00:27:25.680 --> 00:27:30.300
So DNS, you can easily plug in volumes and share volumes across your containers.

00:27:30.300 --> 00:27:31.120
Yeah.

00:27:31.120 --> 00:27:32.000
Super powerful.

00:27:32.000 --> 00:27:36.220
And it's also a way to, like you said, writing out all these Docker run commands and then your,

00:27:36.220 --> 00:27:38.080
you know, your run command is huge.

00:27:38.080 --> 00:27:42.820
You can put that all into a compose file and then you use version control.

00:27:42.820 --> 00:27:43.480
Things like that.

00:27:43.480 --> 00:27:43.720
Yeah.

00:27:43.720 --> 00:27:44.020
Yeah.

00:27:44.020 --> 00:27:47.940
And then once I, yeah, exactly, Michael, I could set up and then, you know, setting up a

00:27:47.940 --> 00:27:48.280
new dev.

00:27:48.280 --> 00:27:53.380
Hey, you know, pull latest from GitHub and Docker compose up and, you know, brings your

00:27:53.380 --> 00:27:54.000
application up.

00:27:54.000 --> 00:27:57.000
I've got a couple of ideas here that I thought might be fun to bounce off you.

00:27:57.000 --> 00:27:59.920
And the very first one on the list is onboarding new developers.

00:27:59.920 --> 00:28:00.360
Yeah.

00:28:00.360 --> 00:28:02.300
I mean, it's one thing to say, well, we're going to create a new project.

00:28:02.300 --> 00:28:06.940
I want to work on it, but almost no one starts jobs with brand new projects.

00:28:06.940 --> 00:28:09.900
They start jobs with, here's what we've been working on for four years.

00:28:09.900 --> 00:28:11.820
It's kind of clunky, but it works.

00:28:11.820 --> 00:28:12.760
Go.

00:28:12.760 --> 00:28:13.280
Right.

00:28:13.280 --> 00:28:14.100
A hundred percent.

00:28:14.100 --> 00:28:14.660
A hundred percent.

00:28:14.660 --> 00:28:18.260
And I wrote, I wrote a blog post about this, but, and then my mentees, right.

00:28:18.260 --> 00:28:21.760
A lot of them come out of bootcamps and, you know, they're used to right click new

00:28:21.760 --> 00:28:22.220
project.

00:28:22.220 --> 00:28:22.520
Right.

00:28:22.520 --> 00:28:24.140
And I'm like, that's not where you're going to go.

00:28:24.140 --> 00:28:24.400
Right.

00:28:24.400 --> 00:28:28.720
You're going to jump into a code base that is not the latest and greatest react, you know,

00:28:28.720 --> 00:28:30.280
functional components, right.

00:28:30.280 --> 00:28:32.300
You're going to have old stuff and you got to be productive.

00:28:32.300 --> 00:28:34.920
It's a huge, I mean, I'm sure the audience will know.

00:28:34.920 --> 00:28:38.040
It'd be great to hear, you know, the last time you joined a dev team, how long it took

00:28:38.040 --> 00:28:41.800
you to just get your computer set up and get your environment set up and get familiar.

00:28:41.800 --> 00:28:42.080
Right.

00:28:42.080 --> 00:28:45.020
It's a week, at least a week, if not two weeks.

00:28:45.520 --> 00:28:49.080
Or, you know, your machine dies and you're like, well, now I got to get it all set up

00:28:49.080 --> 00:28:49.300
again.

00:28:49.300 --> 00:28:50.940
I haven't done that for a year and a half.

00:28:50.940 --> 00:28:52.020
So I forgot how to do that.

00:28:52.020 --> 00:28:52.260
Right.

00:28:52.260 --> 00:28:52.480
Yeah.

00:28:52.480 --> 00:28:56.640
I'm trying to get everything into containers as much as possible, run everything in containers.

00:28:56.640 --> 00:29:01.220
When you get into the GUI apps, it gets a little fun, but yeah, if you're running everything

00:29:01.220 --> 00:29:05.000
in containers, it makes it super simple to be able to move those onboard new devs.

00:29:05.000 --> 00:29:05.400
Yeah.

00:29:05.400 --> 00:29:06.180
A hundred percent.

00:29:06.180 --> 00:29:06.700
A hundred percent.

00:29:06.900 --> 00:29:10.580
So another one of those that I think we kind of already touched on more or less is reliable

00:29:10.580 --> 00:29:11.080
development.

00:29:11.080 --> 00:29:16.080
Like everybody's working literally on the same system and you don't have the, you know, works

00:29:16.080 --> 00:29:17.500
on my machine certification thing.

00:29:17.500 --> 00:29:17.700
Yeah.

00:29:17.700 --> 00:29:18.180
A hundred percent.

00:29:18.180 --> 00:29:23.360
Another one though is, you know, I'm here on my Mac, but maybe I want to do things that

00:29:23.360 --> 00:29:30.840
are as close as possible to where I deploy my various stuff things, which is Ubuntu, right?

00:29:31.100 --> 00:29:32.700
And Mac is kind of like Ubuntu.

00:29:32.700 --> 00:29:37.080
I mean, it's got sort of a Unix flavor to it, but it's not Ubuntu itself.

00:29:37.080 --> 00:29:38.620
It's not exactly that.

00:29:38.620 --> 00:29:38.900
Right.

00:29:38.900 --> 00:29:45.180
And so having this ability to be closer to the environment that you're going to run at,

00:29:45.180 --> 00:29:48.820
or you're going to deploy to, even though you happen to be developing in on something

00:29:48.820 --> 00:29:49.520
that's not that.

00:29:49.520 --> 00:29:49.820
Yeah.

00:29:49.820 --> 00:29:52.580
Being able to get correct versions, right?

00:29:52.580 --> 00:29:55.840
Of everything across your stack is, is very hard, right?

00:29:55.840 --> 00:29:57.840
It seems simple, but it's not.

00:29:57.840 --> 00:29:59.000
I mean, I could get Nginx.

00:29:59.160 --> 00:30:03.460
I could brew install Nginx onto my machine, which I probably have done already, but maybe

00:30:03.460 --> 00:30:08.580
I've got like the latest, greatest, whereas by default over on Ubuntu, if I just say, you

00:30:08.580 --> 00:30:12.460
know, app install Nginx, I think it's held back a little ways for some reason, unless you

00:30:12.460 --> 00:30:14.960
really like configure it for the latest sources.

00:30:14.960 --> 00:30:19.120
And so, you know, maybe the configuration file has something new that I could do on my machine

00:30:19.120 --> 00:30:19.620
that's supported.

00:30:19.620 --> 00:30:23.180
But if I try to put it out there, it's just going to, you know, service failed to start.

00:30:23.180 --> 00:30:23.600
Yeah.

00:30:23.600 --> 00:30:25.440
Go find a log file somewhere and figure this out.

00:30:25.440 --> 00:30:25.700
Right.

00:30:25.700 --> 00:30:28.840
And that's, especially when you're new, it's like, I don't even know where the log files are.

00:30:28.840 --> 00:30:30.080
Why is this happening to me?

00:30:30.080 --> 00:30:30.780
It's so frustrating.

00:30:30.780 --> 00:30:31.180
Right.

00:30:31.180 --> 00:30:31.460
Right.

00:30:31.460 --> 00:30:32.060
Yeah.

00:30:32.060 --> 00:30:36.100
You're pulling down a project and the remia getting started is compile, right?

00:30:36.100 --> 00:30:38.000
Make run, make, right?

00:30:38.000 --> 00:30:38.860
Yeah.

00:30:38.860 --> 00:30:43.640
And if unless you're a C, a Linux C developer and you start getting errors, you know, off the

00:30:43.640 --> 00:30:46.780
stack overflow, you go and start randomly trying things.

00:30:46.780 --> 00:30:47.000
Right.

00:30:47.020 --> 00:30:51.520
And that as a senior developer, you know, I'm like, I'm so scared.

00:30:51.520 --> 00:30:52.680
I'm a foobar my machine.

00:30:52.680 --> 00:30:52.960
Right.

00:30:52.960 --> 00:30:55.240
Cause I'm just changing settings and stuff.

00:30:55.240 --> 00:30:55.700
And yeah.

00:30:55.700 --> 00:30:55.940
Yeah.

00:30:55.940 --> 00:31:00.020
But if you were doing that all inside of your container and really a Docker file is, is the

00:31:00.020 --> 00:31:02.700
steps you would do to install an application.

00:31:02.700 --> 00:31:03.040
Right.

00:31:03.260 --> 00:31:07.300
And so they're all there repeatable, have the correct versions of, you know, libraries

00:31:07.300 --> 00:31:08.400
all in the image.

00:31:08.400 --> 00:31:08.620
Right.

00:31:08.620 --> 00:31:14.100
I think it's a simple preconception to have is like Docker saves me from knowing Linux in

00:31:14.100 --> 00:31:14.980
terms of the command.

00:31:14.980 --> 00:31:18.620
So I don't need to know Linux if I'm going to run on Docker and maybe off to Kubernetes or

00:31:18.620 --> 00:31:18.900
whatever.

00:31:18.900 --> 00:31:21.800
And so I can just do Docker and then everything will be fine.

00:31:21.800 --> 00:31:28.320
But in practice, like those steps you just described, those are apt install this, you know,

00:31:28.320 --> 00:31:31.900
and the various configuration commands of Linux itself.

00:31:31.900 --> 00:31:33.920
So there, you do need to know a little bit.

00:31:33.920 --> 00:31:37.720
There's a very small subset that you need to do, but you know, you don't really have to be

00:31:37.720 --> 00:31:38.600
an admin of Linux.

00:31:38.600 --> 00:31:42.420
So I do think it takes down the bar, but I still think it's interesting that it's, you still

00:31:42.420 --> 00:31:44.640
kind of have to know a little bit about how to set up the system.

00:31:44.640 --> 00:31:44.920
Yeah.

00:31:44.920 --> 00:31:45.440
Yeah.

00:31:45.440 --> 00:31:48.880
And it's nice because you can start high level, like, Hey, I just run my, my, my

00:31:48.880 --> 00:31:51.340
Mongo image and it works and I'm not exactly sure.

00:31:51.340 --> 00:31:51.680
Right.

00:31:51.680 --> 00:31:52.960
I just, here's the connection string.

00:31:52.960 --> 00:31:53.320
We're good.

00:31:53.320 --> 00:31:53.600
Yeah.

00:31:53.600 --> 00:31:54.520
Here's the connection string.

00:31:54.520 --> 00:31:58.460
And then if you start, okay, I want to build my own and I want to get slimmest images as

00:31:58.460 --> 00:31:59.380
possible, right.

00:31:59.380 --> 00:32:01.580
You're going to, you're going to start diving more in it.

00:32:01.580 --> 00:32:05.400
And really the skillset to build your images is you have to understand Docker, but then

00:32:05.400 --> 00:32:07.480
you also have to understand Linux commands, right?

00:32:07.480 --> 00:32:10.060
How to install things on Linux, configure them for sure.

00:32:10.060 --> 00:32:11.760
But you don't, to your point, right.

00:32:11.760 --> 00:32:12.780
You don't have to start there.

00:32:12.780 --> 00:32:16.800
Like don't become a super, you know, admin, you know,

00:32:16.880 --> 00:32:19.680
get the Linux command line Bible or whatever book it is.

00:32:19.680 --> 00:32:21.300
Like start tearing through it.

00:32:21.300 --> 00:32:21.580
Right.

00:32:21.580 --> 00:32:22.020
I think that's a book.

00:32:22.020 --> 00:32:22.200
Yeah.

00:32:22.200 --> 00:32:22.780
I think it is too.

00:32:22.780 --> 00:32:26.680
You can go very far with, without knowing that just basic Linux commands.

00:32:26.680 --> 00:32:26.880
Yeah.

00:32:26.880 --> 00:32:27.000
Yeah.

00:32:27.000 --> 00:32:29.960
I got a few examples of like, these are the three things you really got to do.

00:32:29.960 --> 00:32:30.240
Yeah.

00:32:30.340 --> 00:32:35.540
And the nice thing too, about official images that you can, they're stored in GitHub too.

00:32:35.540 --> 00:32:39.900
So if you go in the hub and see it, you can jump into the GitHub repo and actually read

00:32:39.900 --> 00:32:40.540
the Docker file.

00:32:40.540 --> 00:32:42.740
So it's great way to kind of, kind of learn, right.

00:32:42.740 --> 00:32:45.340
Of best practices and those types of things.

00:32:45.340 --> 00:32:45.520
Yeah.

00:32:45.520 --> 00:32:46.040
Yeah, absolutely.

00:32:46.040 --> 00:32:49.240
You talked about building like thin images and whatnot.

00:32:49.240 --> 00:32:54.060
One of the interesting things is taking these Docker files and layering them, right?

00:32:54.060 --> 00:32:57.620
Like instead of just saying, I'm going to, I'm going to need Nginx and I'm going to need

00:32:57.620 --> 00:32:58.880
Python and I'm going to need all this.

00:32:58.880 --> 00:33:00.700
So let's just build one that has all that.

00:33:00.700 --> 00:33:06.220
And then any minor change you make to the Docker file means you completely rebuild all of that

00:33:06.220 --> 00:33:06.460
stuff.

00:33:06.460 --> 00:33:08.980
And maybe part of that's compiled from source that takes two minutes.

00:33:08.980 --> 00:33:10.240
And it's like, why is this so slow?

00:33:10.240 --> 00:33:10.480
Right.

00:33:10.480 --> 00:33:10.880
Right.

00:33:10.880 --> 00:33:14.960
You could make that four or five Docker files that one depends on the other that depends

00:33:14.960 --> 00:33:17.360
on the other in very subtle, small ways.

00:33:17.360 --> 00:33:21.200
So like only the very last bit that changes maybe really requires much work.

00:33:21.200 --> 00:33:21.360
Right.

00:33:21.360 --> 00:33:22.180
You want to speak to that a little?

00:33:22.180 --> 00:33:22.420
Yeah.

00:33:22.420 --> 00:33:23.940
So you can do two things in there.

00:33:23.940 --> 00:33:27.600
I think you want to make sure one of the best practices you want to do is only one

00:33:27.600 --> 00:33:30.640
run one process inside of a container.

00:33:30.640 --> 00:33:34.840
And I'm going to, I'm going to, I use container and image sometimes interchangeably.

00:33:34.840 --> 00:33:38.420
So, and then I get, I get yelled at for the people's on the internet.

00:33:38.420 --> 00:33:39.540
I'm probably making it wrong.

00:33:39.540 --> 00:33:41.140
So I'm an image, I believe.

00:33:41.140 --> 00:33:41.360
Yeah.

00:33:41.360 --> 00:33:41.860
No.

00:33:41.860 --> 00:33:42.580
And you're totally fine.

00:33:42.580 --> 00:33:42.720
Right.

00:33:42.720 --> 00:33:46.480
Cause you can use them interchangeably, but so container is just a running image, right?

00:33:46.480 --> 00:33:51.420
And if you're a computer scientist or object-oriented programmer, it's your class and your

00:33:51.420 --> 00:33:53.160
objects, your class is your image.

00:33:53.160 --> 00:33:54.660
And then your object is your container.

00:33:54.660 --> 00:33:56.840
So containers are instance of running.

00:33:57.440 --> 00:33:59.560
And I use them interchangeably all the time.

00:33:59.560 --> 00:34:03.220
And I get yelled at in a lot of my talks, but, but generally speaking one process running

00:34:03.220 --> 00:34:07.200
inside of your container, you know, it's the, it's the old Linux idea, separation concerns,

00:34:07.200 --> 00:34:10.220
do one thing, do really well, microservices, those types of things.

00:34:10.220 --> 00:34:13.540
But then to be able to create your images as small as possible, right?

00:34:13.540 --> 00:34:15.500
You can do multi-stage builds is what we call it.

00:34:15.500 --> 00:34:19.120
So you can have a stage in your Docker file.

00:34:19.120 --> 00:34:24.720
That has all your compilers, your libraries, everything you need to build your application.

00:34:24.720 --> 00:34:27.180
Make that one part of your Docker file.

00:34:27.600 --> 00:34:29.320
And then below that you can reference that.

00:34:29.320 --> 00:34:34.000
And so like a lot of Golang stuff, and we do this internally is we'll use Docker to build

00:34:34.000 --> 00:34:36.580
all our apps, multi-architectural to architect.

00:34:36.580 --> 00:34:40.440
And then below that, just pull out the compiled binary and put that in my image.

00:34:40.820 --> 00:34:42.980
So now your image is extremely small.

00:34:42.980 --> 00:34:47.920
It only has your executable in it and everything else that you compiler tools, GCC, all that

00:34:47.920 --> 00:34:49.300
type of stuff is left out.

00:34:49.300 --> 00:34:49.960
Oh, that's interesting.

00:34:49.960 --> 00:34:50.180
Yeah.

00:34:50.180 --> 00:34:52.260
So those are kind of like throwaway containers.

00:34:52.260 --> 00:34:56.420
It'll do everything in container, get your nice dev build environment, build it, and then

00:34:56.420 --> 00:34:57.520
pull only what you need out.

00:34:57.520 --> 00:35:02.700
So even like in a node world where you're not, it's not a compiled, compiled language or Python's

00:35:02.700 --> 00:35:04.260
compiled, not a compiled language, right?

00:35:04.260 --> 00:35:07.580
You could do everything you need in an earlier stage and then pull that out.

00:35:07.820 --> 00:35:11.240
Just what you need into the final stage to be able to serve those up in your runtime.

00:35:11.240 --> 00:35:11.820
That's it.

00:35:11.820 --> 00:35:16.540
And that's the best way to kind of get the smallest, lightest images you want.

00:35:16.540 --> 00:35:21.340
And the smaller and lightest that you can get them, then they're easier to pass around.

00:35:21.340 --> 00:35:22.280
They're easier to start.

00:35:22.280 --> 00:35:23.440
They're faster to start up.

00:35:23.440 --> 00:35:27.880
And the attack surface from a security perspective is very small.

00:35:27.880 --> 00:35:28.180
Yeah.

00:35:28.180 --> 00:35:29.160
Less is better there.

00:35:29.160 --> 00:35:29.760
Less is better.

00:35:29.760 --> 00:35:29.940
Yeah.

00:35:29.940 --> 00:35:30.380
Absolutely.

00:35:30.380 --> 00:35:30.940
All right.

00:35:30.940 --> 00:35:36.180
Some other areas that I think two more that are certainly related, but not exactly the same.

00:35:36.180 --> 00:35:41.300
I feel like the data science side has a lot to gain from the whole container stuff because

00:35:41.300 --> 00:35:45.560
so often the environments are multi-technology.

00:35:45.560 --> 00:35:49.660
You know, you might have, oh, we're going to use this library and it depends on Fortran.

00:35:49.660 --> 00:35:51.520
We'll use this library and it depends on Rust.

00:35:51.520 --> 00:35:53.660
And then we're going to control that from a Jupyter notebook.

00:35:53.660 --> 00:35:57.880
And it's, you know, it's different environments make that harder, easier to set up.

00:35:57.880 --> 00:36:01.360
And so I feel like data science has a lot to benefit from here as well.

00:36:01.560 --> 00:36:02.120
I think so too.

00:36:02.120 --> 00:36:05.000
And that's not my world day to day for sure.

00:36:05.000 --> 00:36:09.060
And so I gave a talk at the Toronto machine learning group a while back.

00:36:09.060 --> 00:36:10.320
The talk should be online.

00:36:10.320 --> 00:36:11.760
So if you're interested, you'll be able to check that out.

00:36:11.760 --> 00:36:15.520
And when I was step back and really thought about what I wanted to talk about and how is

00:36:15.520 --> 00:36:17.580
Docker really helpful in these scenarios.

00:36:17.580 --> 00:36:19.680
And it's kind of all the things we've been talking about.

00:36:19.680 --> 00:36:24.520
It's how do I share my data set with other data scientists, right?

00:36:24.520 --> 00:36:28.580
And you can put those in images and you can put those in volumes and share those, right?

00:36:28.580 --> 00:36:34.180
And then how do I get a consistent environment to, you know, reproducibility is the biggest

00:36:34.180 --> 00:36:35.060
thing in science, right?

00:36:35.060 --> 00:36:35.280
Right.

00:36:35.280 --> 00:36:37.280
That's the other half of that that I was hinting at.

00:36:37.280 --> 00:36:37.620
That's right.

00:36:37.620 --> 00:36:37.960
Yeah.

00:36:37.960 --> 00:36:38.440
Yeah.

00:36:38.440 --> 00:36:43.080
And so having that reproducibility that I can share with other scientists and you have everything

00:36:43.080 --> 00:36:44.960
packaged together that I was running, right?

00:36:44.960 --> 00:36:48.960
And you might swap out the data with your own data, but the processes is all the same.

00:36:48.960 --> 00:36:53.500
So I think reproducibility is huge and talking with those folks, the machine learning folks,

00:36:53.500 --> 00:36:55.060
that's what they were looking for, right?

00:36:55.060 --> 00:36:56.240
Is how do I pass this around?

00:36:56.240 --> 00:36:57.180
How do I share this?

00:36:57.180 --> 00:37:02.000
How do I get my environment up quickly without having to become a full-blown computer scientist,

00:37:02.000 --> 00:37:02.300
right?

00:37:02.300 --> 00:37:03.380
A software engineer.

00:37:03.380 --> 00:37:04.800
Or an admin or something.

00:37:04.800 --> 00:37:05.520
An admin, yeah.

00:37:05.520 --> 00:37:09.920
Well, one of the challenges in science in general, I believe lately is there's been,

00:37:09.920 --> 00:37:11.440
what do you call it?

00:37:11.440 --> 00:37:14.780
A crisis of reproducibility, but like a real focus on reproducibility.

00:37:14.780 --> 00:37:18.720
And because of that, I think some folks have realized certain studies are very hard to

00:37:18.720 --> 00:37:19.060
reproduce.

00:37:19.060 --> 00:37:23.480
And it used to be what they would publish is, here's a graph I generated with my software

00:37:23.480 --> 00:37:24.940
and here's the analysis of the graph.

00:37:24.940 --> 00:37:26.640
And you're like, well, that could mean anything.

00:37:26.640 --> 00:37:27.960
I can make a graph out of anything.

00:37:27.960 --> 00:37:29.360
That doesn't mean very much, right?

00:37:29.360 --> 00:37:33.620
And so then the move to like Jupyter Notebooks and IPython and so on to say, well, here's the

00:37:33.620 --> 00:37:35.940
code and here's the graph and here's the explanation.

00:37:35.940 --> 00:37:36.880
And that's a fantastic.

00:37:37.400 --> 00:37:43.100
But what version of the library that maybe had a small interior change that no one sees

00:37:43.100 --> 00:37:46.080
that might propagate some change down there.

00:37:46.080 --> 00:37:52.820
And you can solidify all that stuff into a Docker container and then say, this is exactly

00:37:52.820 --> 00:37:53.460
what we ran.

00:37:53.460 --> 00:37:54.940
At least maybe it was wrong.

00:37:54.940 --> 00:37:55.400
Maybe it was right.

00:37:55.440 --> 00:37:56.320
But this is what we did.

00:37:56.320 --> 00:37:56.540
Yeah.

00:37:56.540 --> 00:37:57.040
Yeah.

00:37:57.040 --> 00:38:01.620
Just even a minor tick in a version of an algorithm that's processing the data, right?

00:38:01.620 --> 00:38:03.740
And I'm one tick behind you.

00:38:03.740 --> 00:38:05.500
And well, that's not the same, right?

00:38:05.500 --> 00:38:06.280
It's not the same.

00:38:06.280 --> 00:38:06.680
Yeah.

00:38:06.680 --> 00:38:07.380
It might be okay.

00:38:07.380 --> 00:38:09.580
But we need to know that that's how the difference is.

00:38:09.580 --> 00:38:09.740
Yeah.

00:38:09.740 --> 00:38:10.740
You know, one thing that's interesting.

00:38:10.740 --> 00:38:13.040
Have you seen this project Gigantum?

00:38:13.180 --> 00:38:13.820
No, I haven't.

00:38:13.820 --> 00:38:14.100
Okay.

00:38:14.100 --> 00:38:19.140
So this one, I had these guys on the show back on episode 238 and it's really all about

00:38:19.140 --> 00:38:19.460
Docker.

00:38:19.460 --> 00:38:20.380
It's super interesting.

00:38:20.380 --> 00:38:20.760
Oh, cool.

00:38:20.760 --> 00:38:26.000
So it's like a collaborative way for building like local environments in Docker, but then

00:38:26.000 --> 00:38:29.640
sharing those and then people can work on them and then you can like publish them to the

00:38:29.640 --> 00:38:29.980
cloud.

00:38:29.980 --> 00:38:31.880
And there's like all these cool activity streams.

00:38:31.880 --> 00:38:37.260
And it's just all about orchestrating data science with facilitating that by doing Docker.

00:38:37.260 --> 00:38:38.200
They have interesting things.

00:38:38.200 --> 00:38:42.260
Like if you go in and open up like a terminal and you type some commands, I believe they try to

00:38:42.260 --> 00:38:46.580
like capture those and make those part of what has to be done to the Docker container, even

00:38:46.580 --> 00:38:47.960
though you didn't change the files.

00:38:47.960 --> 00:38:50.780
They're trying to do a lot of stuff to make it like really the same.

00:38:50.780 --> 00:38:51.540
So I don't know.

00:38:51.540 --> 00:38:52.660
It's an interesting idea.

00:38:52.660 --> 00:38:53.440
Oh, that's interesting.

00:38:53.440 --> 00:38:54.300
I'm going to go check it out.

00:38:54.300 --> 00:38:54.820
Yeah.

00:38:54.820 --> 00:38:57.560
Jumping back to our earlier conversation, building that Docker file, right?

00:38:57.560 --> 00:39:00.520
Is, is, and you, especially when you're learning commands, right?

00:39:00.520 --> 00:39:04.320
That build debug cycle, test cycles can be painful a little bit.

00:39:04.320 --> 00:39:04.760
Yeah.

00:39:04.760 --> 00:39:06.560
So we're trying to think about that at Docker, right?

00:39:06.560 --> 00:39:09.480
Like it's one thing to have an image and just run it and use it.

00:39:09.480 --> 00:39:11.920
And then it's another to build, build an image, right?

00:39:11.940 --> 00:39:15.620
A very complex image and kind of, so what you end up doing is kind of what you say.

00:39:15.620 --> 00:39:19.580
You create a base image and then you're inside of that running commands and then go, crap.

00:39:19.580 --> 00:39:19.820
Okay.

00:39:19.820 --> 00:39:20.700
What did I run there?

00:39:20.700 --> 00:39:21.180
Exactly.

00:39:21.180 --> 00:39:22.020
You go write that down.

00:39:22.020 --> 00:39:22.800
Yeah.

00:39:22.800 --> 00:39:24.460
We kind of love to reverse sometimes.

00:39:24.460 --> 00:39:28.700
That thing I just did to make this work, make that part of the Docker file, you know?

00:39:28.700 --> 00:39:29.100
Right.

00:39:29.100 --> 00:39:31.860
Extract what I did.

00:39:31.860 --> 00:39:35.500
Those five things I typed on the command, the terminal command prompt.

00:39:35.500 --> 00:39:39.360
When I logged in with Docker run, you know, Z shell or bash.

00:39:39.360 --> 00:39:39.660
Yeah.

00:39:39.660 --> 00:39:40.360
I need that too.

00:39:40.500 --> 00:39:40.620
Yeah.

00:39:40.620 --> 00:39:41.220
A hundred percent.

00:39:41.220 --> 00:39:41.800
A hundred percent.

00:39:41.800 --> 00:39:42.200
Yeah.

00:39:42.200 --> 00:39:42.620
Advice.

00:39:42.620 --> 00:39:43.400
Do you got advice on that?

00:39:43.400 --> 00:39:47.040
I mean, it's basically a saving at each point right now.

00:39:47.040 --> 00:39:48.620
It's very low fidelity, right?

00:39:48.620 --> 00:39:51.400
You're, you're running the command and then, and trying to remember.

00:39:51.400 --> 00:39:51.720
Right.

00:39:51.720 --> 00:39:52.540
And it's painful.

00:39:52.540 --> 00:39:53.080
Yeah.

00:39:53.080 --> 00:39:53.600
Yeah.

00:39:53.600 --> 00:39:54.120
It's very painful.

00:39:54.120 --> 00:39:55.600
Some up arrow action.

00:39:55.600 --> 00:39:56.880
Like, okay, I did that.

00:39:56.880 --> 00:39:57.960
Then down arrow, down arrow.

00:39:57.960 --> 00:39:58.300
Okay.

00:39:58.300 --> 00:39:58.980
Those are the things.

00:39:58.980 --> 00:39:59.660
Something like that.

00:39:59.660 --> 00:39:59.920
Yeah.

00:39:59.920 --> 00:40:00.300
Yeah.

00:40:00.300 --> 00:40:00.580
Yeah.

00:40:00.580 --> 00:40:05.460
We've been playing around with some interactive, lightweight kind of, I say editors, but tools,

00:40:05.460 --> 00:40:05.760
right?

00:40:05.760 --> 00:40:07.560
To, to build your images.

00:40:07.780 --> 00:40:15.860
So the concept of building an image from scratch, it's where you kind of, you can do a top or a Docker file, say from, you know, Ubuntu or from Alpine.

00:40:15.860 --> 00:40:18.460
Well, you can do from scratch and that's literally nothing.

00:40:18.460 --> 00:40:18.820
Right.

00:40:18.880 --> 00:40:26.520
And you're moving everything in yourself and that's tough, but it's, if you, the most secure and leanest image, that's the way to do it.

00:40:26.520 --> 00:40:31.680
And yeah, so we've been thinking about tools around that and it's exactly that capturing what you're doing and what works.

00:40:31.680 --> 00:40:31.940
Right.

00:40:31.940 --> 00:40:35.300
So you can play a little bit and take, try and figure things out.

00:40:35.300 --> 00:40:39.120
And then once you figure it out, you're like, oh crap, what, what was that sequence that just worked?

00:40:39.120 --> 00:40:39.340
Right.

00:40:39.340 --> 00:40:44.660
Cause I did five things, but those three things were what actually worked and that could be tough for sure.

00:40:44.660 --> 00:40:46.820
I find that what I do is I'll fire.

00:40:47.020 --> 00:40:48.420
I'll try to create the Docker file.

00:40:48.420 --> 00:40:51.780
It'll invariably fail in some way that I didn't predict.

00:40:51.780 --> 00:41:00.400
So then I'll get it as far as I can run it in an interactive mode and try to, you know, get it to go to where I want it and then go, okay, well, these are the steps.

00:41:00.400 --> 00:41:03.620
And maybe it errored out during the build, but you couldn't figure out why.

00:41:03.620 --> 00:41:07.420
So you want to go explore something to see what the log generated for that failure.

00:41:07.420 --> 00:41:07.780
Right.

00:41:07.780 --> 00:41:08.900
There's a little bit of back and forth.

00:41:08.900 --> 00:41:09.180
Yes.

00:41:09.180 --> 00:41:09.800
A hundred percent.

00:41:09.800 --> 00:41:10.440
A hundred percent.

00:41:10.440 --> 00:41:10.680
Yeah.

00:41:10.800 --> 00:41:23.600
What do you think about things like attaching, basically using Docker within some of these tools like PyCharm and VS Code both have these ways to say, just run this, but in Docker when I pressed debug.

00:41:23.600 --> 00:41:23.960
Yeah.

00:41:23.960 --> 00:41:29.400
My old school developer, you know, no fancy editors, right?

00:41:29.400 --> 00:41:33.300
Text editor, you know, it dies a little bit inside, but I've had to get over that.

00:41:33.300 --> 00:41:33.540
Right.

00:41:33.540 --> 00:41:35.340
I'm like, no, do these, right?

00:41:35.340 --> 00:41:37.520
Like I tell my mentees too.

00:41:37.520 --> 00:41:41.680
I'm like, okay, when we start, like you're in a text editor, remove all, remove all the tools.

00:41:41.680 --> 00:41:44.700
Cause you've got to feel the pain to understand what helps.

00:41:44.700 --> 00:41:44.940
Yeah.

00:41:44.940 --> 00:41:45.120
Yeah.

00:41:45.120 --> 00:41:45.280
Sure.

00:41:45.280 --> 00:41:46.600
But with that said, right.

00:41:46.600 --> 00:41:47.100
Yeah.

00:41:47.100 --> 00:41:49.100
I mean, the tools are fantastic, right?

00:41:49.100 --> 00:41:50.600
The context switching, right?

00:41:50.600 --> 00:41:56.360
If you can stay right in your ID, your main tool and do everything within there and do it really well is super powerful.

00:41:56.360 --> 00:41:59.380
The VS Code plugin is super powerful, right?

00:41:59.380 --> 00:42:06.600
Of managing your containers, running containers, dev containers, connecting into ACI and Azure and launching your containers right there.

00:42:06.600 --> 00:42:08.100
It's extremely powerful.

00:42:08.100 --> 00:42:08.380
Yeah.

00:42:08.380 --> 00:42:08.640
Yeah.

00:42:08.640 --> 00:42:12.700
I feel like it's going to get to the point where you might be running stuff in Docker, but you don't even know it.

00:42:12.700 --> 00:42:12.920
Yeah.

00:42:12.920 --> 00:42:18.200
You might conceptually know, but there's nothing about what you do or what you see that makes you feel like, oh, it's running in Docker.

00:42:18.200 --> 00:42:19.860
You just, I pressed run.

00:42:19.860 --> 00:42:21.040
It did these things.

00:42:21.040 --> 00:42:23.200
I saw it in my browser or I saw the output.

00:42:23.200 --> 00:42:23.500
Yeah.

00:42:23.500 --> 00:42:24.400
I don't know where that happened.

00:42:24.400 --> 00:42:24.620
Right.

00:42:24.620 --> 00:42:25.540
But it happened in Docker.

00:42:25.540 --> 00:42:26.080
Exactly.

00:42:26.080 --> 00:42:26.520
Yeah.

00:42:26.520 --> 00:42:27.100
It just works.

00:42:27.100 --> 00:42:27.420
Right.

00:42:27.420 --> 00:42:27.660
Yeah.

00:42:27.660 --> 00:42:33.180
That's where we're trying to go is like with our tools is like you, the more, you know, you're, they get out of the way, right?

00:42:33.180 --> 00:42:35.380
They're not in your way is maybe the best way to say it.

00:42:35.380 --> 00:42:35.540
Yeah.

00:42:35.540 --> 00:42:36.800
Really good tools.

00:42:37.100 --> 00:42:40.280
You kind of, you kind of go, does that really doing a lot for me?

00:42:40.280 --> 00:42:42.560
And then when you figure it, you're like, oh yeah, it's doing a ton.

00:42:42.560 --> 00:42:43.880
I just didn't, don't know it.

00:42:43.880 --> 00:42:45.040
It does it so well.

00:42:45.040 --> 00:42:45.320
Right.

00:42:45.320 --> 00:42:45.760
Exactly.

00:42:45.760 --> 00:42:49.360
I think we have time for a few more topics that we can touch on.

00:42:49.360 --> 00:42:54.640
So we talked about the multi-container stuff and we talked about, you know, run this on my cloud.

00:42:54.640 --> 00:42:58.540
And I feel like a lot of times what that means these days is Kubernetes, right?

00:42:58.540 --> 00:43:01.680
Everybody seems to have a hosted Kubernetes offering.

00:43:01.960 --> 00:43:03.880
Sometimes that means just give us your container.

00:43:03.880 --> 00:43:10.340
Others that means, well, we'll really just run the cluster sort of configure it for you, but you kind of got to still own those VMs that run it.

00:43:10.340 --> 00:43:11.920
There's some sort of spectrum there.

00:43:11.920 --> 00:43:20.320
What are your thoughts on people working with Kubernetes versus just directly with Docker itself or maybe even a pass, like almost a serverless type thing?

00:43:20.320 --> 00:43:22.340
If you spend a lot of time on the internet, right?

00:43:22.340 --> 00:43:24.720
We're all on the bleeding edge, right?

00:43:24.720 --> 00:43:25.840
Yeah, we absolutely are.

00:43:25.980 --> 00:43:26.300
Yeah.

00:43:26.300 --> 00:43:31.140
You read a lot of blog posts about Kubernetes and service meshes and serverless.

00:43:31.140 --> 00:43:33.700
And those are all fantastic and wonderful, right?

00:43:33.700 --> 00:43:39.060
But a lot of us out there are not, we're not the Googles or the Netflix or, you know, Disney Plus, right?

00:43:39.060 --> 00:43:40.440
You can see I watch a lot of movies.

00:43:40.440 --> 00:43:49.160
But anyways, you know, so you have small teams, small three, five person teams that really are writing the majority of the software out there, right?

00:43:49.300 --> 00:43:55.200
And there's nothing wrong with standing a VM up, putting a Docker engine in it and running your containers like that, right?

00:43:55.200 --> 00:43:56.260
That's the way we started.

00:43:56.260 --> 00:43:58.280
It's extremely powerful.

00:43:58.280 --> 00:44:02.520
You know, before I came to Docker, I had a consulting business, a custom dev.

00:44:02.520 --> 00:44:05.060
And that's how we ran all of our containers, right?

00:44:05.060 --> 00:44:08.420
We had a Docker engine installed on a VM, sometimes two VMs, right?

00:44:08.420 --> 00:44:10.420
That we managed as the orchestrator.

00:44:10.420 --> 00:44:12.580
And it ran fantastic.

00:44:12.580 --> 00:44:14.720
And we could scale, we had load, right?

00:44:14.800 --> 00:44:24.080
And to update it and to maintain it, all the things we've kind of been talking about today were super simple because the only prerequisite for the VM was to have the engine installed.

00:44:24.080 --> 00:44:24.340
Yeah.

00:44:24.340 --> 00:44:26.340
And to be honest, that's how my stuff is running now.

00:44:26.340 --> 00:44:28.780
I have a CI, CD stuff set up.

00:44:28.780 --> 00:44:30.480
So I do git pushed to a certain branch.

00:44:30.480 --> 00:44:33.200
My VMs automatically work with the load balancer.

00:44:33.200 --> 00:44:35.120
They automatically update themselves.

00:44:35.120 --> 00:44:38.200
They restart and like it's hands off, right?

00:44:38.200 --> 00:44:41.960
And, you know, the small, small set of us, like it works.

00:44:41.960 --> 00:44:42.280
Yeah.

00:44:42.280 --> 00:44:43.200
A hundred percent.

00:44:43.200 --> 00:44:43.720
A hundred percent.

00:44:43.980 --> 00:44:45.040
And serverless.

00:44:45.040 --> 00:44:48.360
And then also kind of the container passes that are out there.

00:44:48.360 --> 00:44:50.360
So ECS, ACI.

00:44:50.360 --> 00:44:54.080
So ECS is Elastic Container Service from Amazon.

00:44:54.080 --> 00:44:56.800
ACI is Azure Container Instances.

00:44:56.800 --> 00:44:58.700
And I don't know if Google has one.

00:44:58.700 --> 00:44:59.360
They probably do too.

00:44:59.360 --> 00:44:59.600
Yeah.

00:44:59.600 --> 00:45:00.140
Love you, Google.

00:45:00.140 --> 00:45:02.160
But yeah.

00:45:02.160 --> 00:45:09.420
Anyways, you know, it's being able to take your container and just run it in the cloud and worry about the container running and what it needs to do and how it needs to run, right?

00:45:09.420 --> 00:45:13.120
And ECS will take care of the rest underneath the covers.

00:45:13.160 --> 00:45:15.180
That's a fantastic option.

00:45:15.180 --> 00:45:18.340
I mean, it's kind of, you know, it's like those progressions, right?

00:45:18.340 --> 00:45:26.660
If you're doing a single VM with the Docker engine or two of them, a couple of them, and that becomes painful when you need to scale, really look at ECS or ACI, right?

00:45:26.720 --> 00:45:28.840
Because that will help you scale a lot easier.

00:45:28.840 --> 00:45:30.660
And you don't need to be a Kubernetes expert.

00:45:30.660 --> 00:45:32.780
And then if you do, then go to Kubernetes.

00:45:32.780 --> 00:45:35.680
But I always tell people, and Swarm is a great option too.

00:45:35.680 --> 00:45:37.520
Swarm is an incredible orchestrator.

00:45:37.520 --> 00:45:38.480
It works.

00:45:38.740 --> 00:45:40.760
How does that compare to Kubernetes?

00:45:40.760 --> 00:45:42.260
You know, I hear Docker Compose.

00:45:42.260 --> 00:45:42.960
I hear Swarm.

00:45:42.960 --> 00:45:43.680
I hear Kubernetes.

00:45:43.680 --> 00:45:46.220
I'm not sure when I should be thinking about which.

00:45:46.220 --> 00:45:48.460
So Compose is fantastic for local development.

00:45:48.460 --> 00:45:50.360
I would use it primarily there.

00:45:50.360 --> 00:45:52.660
You can use Compose to deploy and production.

00:45:52.760 --> 00:45:57.140
Would I use Compose if I had only a single container I wanted to run?

00:45:57.140 --> 00:46:00.360
But maybe it had a complicated layering, potentially?

00:46:00.360 --> 00:46:00.740
Yeah.

00:46:00.740 --> 00:46:02.140
So Compose works great there too.

00:46:02.140 --> 00:46:11.740
Even if you're running one container and all the command line switches and flags and environment variables and secrets, all those type of things, like put them all in your Compose file.

00:46:11.740 --> 00:46:14.520
So one, you don't have to remember all of them.

00:46:14.520 --> 00:46:19.180
And two, you don't write bash scripts to just run the Docker command, right?

00:46:19.180 --> 00:46:21.840
Yeah, you plug them all in just like that.

00:46:21.840 --> 00:46:25.120
You can see you're passing ports, volumes, all those type of things, right?

00:46:25.120 --> 00:46:27.980
You know, and I tell people start, think about Swarm, right?

00:46:27.980 --> 00:46:32.680
If you're doing one instance, don't jump to, like have really good reasons to jump into Kubernetes.

00:46:32.680 --> 00:46:34.000
It's super powerful.

00:46:34.000 --> 00:46:35.540
It's a great tool.

00:46:35.540 --> 00:46:38.400
It really is, but it comes with a ton of complexity, right?

00:46:38.400 --> 00:46:39.320
So if you don't need to go.

00:46:39.320 --> 00:46:46.080
Well, there's, like I said before, there's a difference between I want to run this on Kubernetes and I want to have my own Kubernetes cluster for which I'm the admin.

00:46:46.080 --> 00:46:46.440
Right.

00:46:46.440 --> 00:46:46.920
Right.

00:46:46.920 --> 00:46:47.160
Yeah.

00:46:47.160 --> 00:46:48.540
And don't get stuck in.

00:46:48.540 --> 00:46:49.600
Also another advice.

00:46:49.600 --> 00:46:53.600
And some engineers, you're like, don't get focused on developing for your resume, right?

00:46:53.600 --> 00:46:55.280
A lot of times, oh, we got to get in Kubernetes.

00:46:55.280 --> 00:46:55.860
I want to have Kubernetes.

00:46:55.860 --> 00:46:56.880
I've done all this, right?

00:46:56.880 --> 00:47:00.920
And yeah, you know, you want to learn new technology and stay cutting edge.

00:47:00.920 --> 00:47:02.360
But that's a tough one.

00:47:02.360 --> 00:47:03.620
That's a tough one to go to.

00:47:03.620 --> 00:47:04.080
Yeah.

00:47:04.100 --> 00:47:09.000
You can get very far with single engines, with Compose, and then with Swarm.

00:47:09.000 --> 00:47:10.960
And Swarm is a great orchestrator.

00:47:10.960 --> 00:47:12.300
It's built into the engine.

00:47:12.300 --> 00:47:17.200
It moved to the enterprise with Mirantis when they bought the Docker Enterprise business.

00:47:17.200 --> 00:47:18.420
So they maintain it.

00:47:18.420 --> 00:47:19.720
We got out of Docker proper.

00:47:19.720 --> 00:47:21.520
It's gotten out of the orchestration business.

00:47:21.520 --> 00:47:23.160
But it's a fantastic orchestrator.

00:47:23.160 --> 00:47:24.020
It just works.

00:47:24.020 --> 00:47:27.520
A prior life at Docker, I ran all the customer success technology.

00:47:27.520 --> 00:47:31.420
So our knowledge base, our search engine, our training tools and everything.

00:47:31.420 --> 00:47:32.740
And we ran on Compose.

00:47:32.740 --> 00:47:34.220
Compose and Swarm.

00:47:34.220 --> 00:47:35.060
All on Swarm.

00:47:35.060 --> 00:47:36.200
Five, nine uptime.

00:47:36.200 --> 00:47:37.000
Never touched it.

00:47:37.000 --> 00:47:38.620
Didn't have a DevOps team, right?

00:47:38.620 --> 00:47:39.720
It just, it really works.

00:47:39.720 --> 00:47:46.500
When you need things like sidecars and more complex networking and the more complex data storage,

00:47:46.500 --> 00:47:50.060
volumes, those type of things, that's where Kubernetes really shines.

00:47:50.440 --> 00:47:55.160
But other than that, Swarm is fantastic and single engines will get you very far.

00:47:55.160 --> 00:47:59.220
And then, like you said, I would go to EKS or something like that first, right?

00:47:59.220 --> 00:48:03.940
Have a Kubernetes cluster and manage at the level that you need to manage at and nothing lower,

00:48:03.940 --> 00:48:04.440
right?

00:48:04.440 --> 00:48:05.360
Until you have to.

00:48:05.360 --> 00:48:05.540
Makes sense.

00:48:05.540 --> 00:48:08.680
Chris McDonough, creator of the creators of Pyramid.

00:48:08.680 --> 00:48:10.260
Framework out there is in the live stream.

00:48:10.260 --> 00:48:14.440
It says, Compose kind of fills the same space as Buildout did in Python land for managing one

00:48:14.440 --> 00:48:15.680
or multiple containers locally.

00:48:15.680 --> 00:48:16.400
Yeah, awesome.

00:48:16.400 --> 00:48:17.120
Hello, Chris.

00:48:17.120 --> 00:48:17.640
Thanks for being here.

00:48:17.640 --> 00:48:18.060
Hey, Chris.

00:48:18.060 --> 00:48:18.600
Yeah, very cool.

00:48:18.600 --> 00:48:23.320
So the last thing that I want to touch on, the last topic I think we have time to talk

00:48:23.320 --> 00:48:24.680
about is the future.

00:48:24.680 --> 00:48:27.300
Where are things going with Docker, right?

00:48:27.300 --> 00:48:31.900
Like we've seen this move to focusing more on, you said, shift the left, more on the developer

00:48:31.900 --> 00:48:32.720
tools and whatnot.

00:48:32.720 --> 00:48:33.900
I'm glad you brought it to roadmap.

00:48:33.900 --> 00:48:34.460
Thank you.

00:48:34.460 --> 00:48:35.560
My bosses will be happy.

00:48:35.560 --> 00:48:38.660
My masters.

00:48:38.660 --> 00:48:40.180
Anyways, love you, Matt.

00:48:40.180 --> 00:48:45.340
So GitHub out there for forward slash Docker forward slash roadmap.

00:48:45.340 --> 00:48:47.060
That is our public roadmap.

00:48:47.060 --> 00:48:48.600
That is our roadmap, right?

00:48:48.600 --> 00:48:49.580
We work on that roadmap.

00:48:49.580 --> 00:48:51.920
We're actually coming out with a blog post with a feature.

00:48:51.920 --> 00:48:54.800
And that was spawned, came out of the roadmap, right?

00:48:54.800 --> 00:48:56.200
It was an idea from the community.

00:48:56.200 --> 00:48:59.780
It's integrating in with different terminals with Docker desktop.

00:48:59.780 --> 00:49:01.900
And that came out of the community.

00:49:01.900 --> 00:49:05.220
And people said, hey, I run iTerm on my Mac.

00:49:05.220 --> 00:49:08.540
And so does 99% of the other developers on Mac.

00:49:08.700 --> 00:49:11.060
We want that integrated, our integrated desktop.

00:49:11.060 --> 00:49:13.700
And so the upticks were really great.

00:49:13.700 --> 00:49:14.900
Anyways, we implemented it.

00:49:14.900 --> 00:49:20.540
So you'll see Ben, if you're looking at the screen on the right, Ben is the best PM I've

00:49:20.540 --> 00:49:21.240
ever worked with.

00:49:21.240 --> 00:49:22.560
Seriously, he's fantastic.

00:49:22.560 --> 00:49:23.880
But he is in there constantly.

00:49:23.880 --> 00:49:24.880
Yeah.

00:49:24.880 --> 00:49:25.740
So we look at this roadmap.

00:49:25.740 --> 00:49:26.660
We follow this roadmap.

00:49:26.660 --> 00:49:27.860
We build off of this roadmap.

00:49:28.040 --> 00:49:30.900
We don't have a secret shadow internal roadmap, right?

00:49:30.900 --> 00:49:32.460
And we say, hey, yeah.

00:49:32.460 --> 00:49:36.580
You've got different channels for like Windows and Microsoft and the engine and all that stuff,

00:49:36.580 --> 00:49:36.820
right?

00:49:36.820 --> 00:49:37.120
Yep.

00:49:37.120 --> 00:49:39.060
And so go read through there.

00:49:39.060 --> 00:49:41.520
Put in an issue if you have one.

00:49:41.520 --> 00:49:44.860
If you don't find it, it's where you can interact, add comments, those type of things.

00:49:44.860 --> 00:49:46.240
We do use that constantly.

00:49:46.240 --> 00:49:47.540
You know, I don't.

00:49:47.540 --> 00:49:49.140
So we have DockerCon coming up.

00:49:49.140 --> 00:49:50.760
So I don't want to give any secrets away.

00:49:50.760 --> 00:49:55.200
But yeah, we have, I would say, look for us in this year, the past year, we really kind

00:49:55.200 --> 00:49:56.900
of solidified the business, right?

00:49:56.900 --> 00:50:02.140
Really did a lot of things that Docker didn't do early in its early days, right?

00:50:02.140 --> 00:50:06.580
As a business wise, you know, we're shifting around a lot, but focus back on Hub and say,

00:50:06.580 --> 00:50:08.240
hey, you know, let's tighten up Hub.

00:50:08.240 --> 00:50:11.460
This is a place where a massive amount of developers come for value.

00:50:11.460 --> 00:50:16.720
So we tightened it up, put in good features like audit logging and more team features and

00:50:16.720 --> 00:50:20.240
fixed our plans and seats and how the pricing and how that works.

00:50:20.600 --> 00:50:22.780
And then started moving towards developer tools.

00:50:22.780 --> 00:50:26.600
So integrating it with ECS, ACI into the public clouds.

00:50:26.600 --> 00:50:28.320
You'll see a lot more of that coming.

00:50:28.320 --> 00:50:33.200
See a lot more tools around local development, container first development, a lot of sharing.

00:50:33.200 --> 00:50:36.220
So it'd be interesting to say, I'm working on a feature.

00:50:36.220 --> 00:50:39.240
I have a branch and I want to share that with you, Michael.

00:50:39.240 --> 00:50:40.800
Hey, you know, take a look at this real quick.

00:50:40.800 --> 00:50:42.580
And now you're in that same scenario, right?

00:50:42.580 --> 00:50:43.740
I have to check out your branch.

00:50:43.740 --> 00:50:46.420
If I'm doing everything on my machine, do I have all the versions correct?

00:50:46.420 --> 00:50:47.380
Do I have everything right?

00:50:47.380 --> 00:50:50.440
Well, what if you could just wrap that all up a container and I just share it with you?

00:50:50.440 --> 00:50:54.460
And you fire that container up and you're in a dev environment and it not just running

00:50:54.460 --> 00:50:59.000
the container, but able to see my code and everything and the app running inside the container and

00:50:59.000 --> 00:51:00.040
interact with it, right?

00:51:00.040 --> 00:51:00.760
Yeah, that's cool.

00:51:00.760 --> 00:51:01.520
That's powerful.

00:51:01.520 --> 00:51:06.000
That sounds a little bit like the VS Code feature where they have that's like launch this in

00:51:06.000 --> 00:51:07.020
code off of GitHub.

00:51:07.020 --> 00:51:07.440
Yep.

00:51:07.500 --> 00:51:09.960
And it just like sets up that remote environment.

00:51:09.960 --> 00:51:10.460
Exactly.

00:51:10.460 --> 00:51:11.200
Exactly.

00:51:11.200 --> 00:51:11.800
Yep.

00:51:11.800 --> 00:51:13.340
Launch, launch this for me.

00:51:13.340 --> 00:51:15.180
And also too, I can notify you, right?

00:51:15.180 --> 00:51:17.220
So you get in a little desktop notify.

00:51:17.220 --> 00:51:21.540
Hey, you got something shared with you and you launch this in VS Code and it brings it all

00:51:21.540 --> 00:51:22.100
in for you.

00:51:22.100 --> 00:51:22.520
Yeah, cool.

00:51:22.520 --> 00:51:26.360
And to your earlier point, you go, oh, if you didn't know you're running containers, you

00:51:26.360 --> 00:51:27.020
might not know it.

00:51:27.020 --> 00:51:27.420
Right.

00:51:27.640 --> 00:51:31.160
It's like, oh, I just got this PR shared with me and I want to check it out.

00:51:31.160 --> 00:51:31.440
Right.

00:51:31.440 --> 00:51:33.500
And it's just the run button and it's good.

00:51:33.500 --> 00:51:34.500
I push the run button.

00:51:34.500 --> 00:51:34.680
Yeah.

00:51:34.680 --> 00:51:35.160
Yeah.

00:51:35.160 --> 00:51:35.520
Awesome.

00:51:35.520 --> 00:51:36.840
A lot of stuff coming around that.

00:51:36.840 --> 00:51:40.280
A lot of more features in for teams and sharing features coming in Hub.

00:51:40.280 --> 00:51:42.740
We have scanning and the security scanning in there now.

00:51:42.740 --> 00:51:43.260
Yeah.

00:51:43.260 --> 00:51:43.960
A lot of interesting.

00:51:43.960 --> 00:51:50.260
One thing that GitHub added was notifications of security CVEs and whatnot.

00:51:50.260 --> 00:51:54.740
Like periodically I'll log in and I did this class that interacted in a very minor way

00:51:54.740 --> 00:51:56.200
with an Electron JS app.

00:51:56.460 --> 00:52:01.300
And it's always like your repository has this critical vulnerability because some random

00:52:01.300 --> 00:52:07.240
version in a package lock dot JSON is, you know, like, so for me, I'm like, I don't really

00:52:07.240 --> 00:52:11.460
need that, but I'll go ahead and just accept it because I just need it to be quiet to me.

00:52:11.460 --> 00:52:15.880
But in general, those features are super useful when those come up for your actual code.

00:52:15.880 --> 00:52:17.600
Anything like that you guys are thinking about?

00:52:17.600 --> 00:52:23.000
So we partnered with Snyk, which is a dev security scanning company, security company.

00:52:23.000 --> 00:52:24.880
I shouldn't say just scanning because they do a bunch of stuff.

00:52:25.280 --> 00:52:26.880
But now you have Docker space scan.

00:52:27.060 --> 00:52:31.620
So you can scan your images locally, get reports, see high, low severity.

00:52:31.620 --> 00:52:31.920
Yeah.

00:52:31.920 --> 00:52:33.760
And then that'll run in Hub.

00:52:33.760 --> 00:52:37.620
So when you push into Hub, your images will be scanned if you have it turned on.

00:52:37.620 --> 00:52:39.600
And so you have a central place where you can see all those.

00:52:39.600 --> 00:52:43.640
And then you can use Snyk to remediate them and those types of stuff.

00:52:43.640 --> 00:52:44.940
And Snyk has really good tools.

00:52:44.940 --> 00:52:45.120
Right.

00:52:45.120 --> 00:52:49.260
Because maybe you could have scanned locally, push your stuff to production.

00:52:49.260 --> 00:52:49.700
Right.

00:52:49.700 --> 00:52:51.260
And then you haven't touched it for three weeks.

00:52:51.260 --> 00:52:51.500
Right.

00:52:51.500 --> 00:52:54.020
But in the meantime, something's come out you need to take action on.

00:52:54.020 --> 00:52:54.520
Right.

00:52:54.520 --> 00:52:58.760
And so having it on the Hub, giving you notifications is constantly running.

00:52:58.760 --> 00:52:58.980
Right.

00:52:59.100 --> 00:52:59.460
Exactly.

00:52:59.460 --> 00:53:00.140
Exactly.

00:53:00.140 --> 00:53:00.940
Yeah.

00:53:00.940 --> 00:53:02.940
Being able to get notified of your base images.

00:53:02.940 --> 00:53:03.280
Right.

00:53:03.280 --> 00:53:06.840
So if you run in the node or the Python base image.

00:53:06.840 --> 00:53:07.080
Right.

00:53:07.080 --> 00:53:09.100
When that changes underneath you.

00:53:09.100 --> 00:53:09.360
Right.

00:53:09.360 --> 00:53:11.040
And there's security vulnerabilities introduced.

00:53:11.040 --> 00:53:11.620
Do you want to know?

00:53:11.620 --> 00:53:12.180
Right.

00:53:12.180 --> 00:53:14.220
Should I go to the next version or not?

00:53:14.380 --> 00:53:18.880
And then I think, too, to your earlier point of, you know, it's like I'm not a security professional.

00:53:18.880 --> 00:53:19.220
Right.

00:53:19.220 --> 00:53:24.180
So I see these reports and I do a scan and I go, oh, heck, you know, 300, you know, high

00:53:24.180 --> 00:53:25.000
severity vulnerabilities.

00:53:25.000 --> 00:53:25.340
Right.

00:53:25.340 --> 00:53:25.940
What do I do?

00:53:25.940 --> 00:53:29.640
And I think what we're trying to do is say, hey, here's how you remediate that.

00:53:29.640 --> 00:53:29.900
Right.

00:53:29.900 --> 00:53:31.640
You're on version 3.2.

00:53:31.640 --> 00:53:34.080
If you bump up to 3.3, it fixes these.

00:53:34.080 --> 00:53:35.240
So you should do that.

00:53:35.240 --> 00:53:35.540
Right.

00:53:35.540 --> 00:53:40.440
A little minor version upgrade or major upgrade takes you to instead of 300.

00:53:40.440 --> 00:53:41.780
Now you have 20 vulnerabilities.

00:53:41.780 --> 00:53:42.200
Right.

00:53:42.200 --> 00:53:43.280
And they're all medium.

00:53:43.280 --> 00:53:43.700
So.

00:53:43.700 --> 00:53:44.040
Yeah.

00:53:44.140 --> 00:53:47.520
You know, I think we need that as engineers to be able to get our job done quicker writing

00:53:47.520 --> 00:53:47.940
code.

00:53:47.940 --> 00:53:49.160
You know, it's a primary function.

00:53:49.160 --> 00:53:49.460
Right.

00:53:49.460 --> 00:53:50.880
So I got a bunch of these vulnerabilities.

00:53:50.880 --> 00:53:54.840
And to your point, you kind of like just, yes, just clearly these red X is off of here.

00:53:54.840 --> 00:53:55.040
Right.

00:53:55.040 --> 00:53:56.800
We might not know exactly what's going on.

00:53:56.800 --> 00:54:00.940
So really trying to help you remediate those vulnerabilities, but also understand why and

00:54:00.940 --> 00:54:01.480
what you're doing.

00:54:01.480 --> 00:54:01.700
Right.

00:54:01.700 --> 00:54:01.960
Yeah.

00:54:01.960 --> 00:54:02.900
That sounds really valuable.

00:54:02.900 --> 00:54:04.060
We got it for our code.

00:54:04.060 --> 00:54:05.980
We should have it for basically our infrastructure.

00:54:05.980 --> 00:54:07.620
Comment from the live stream.

00:54:07.620 --> 00:54:12.960
Could Docker potentially be able to share really big files across the globe, allowing others to recode

00:54:12.960 --> 00:54:13.340
easily?

00:54:13.640 --> 00:54:14.320
How would this work?

00:54:14.320 --> 00:54:15.260
Honestly, I don't know.

00:54:15.260 --> 00:54:19.640
I mean, it certainly will allow you to share files as images and it will definitely allow

00:54:19.640 --> 00:54:23.800
you to have environments set up like data science environments that could analyze those.

00:54:23.800 --> 00:54:25.020
But what are your thoughts?

00:54:25.020 --> 00:54:26.500
I think we could do some of that now.

00:54:26.500 --> 00:54:30.560
So I'm through hub being able to just Docker push and Docker pull is very powerful.

00:54:30.560 --> 00:54:30.920
Right.

00:54:31.100 --> 00:54:33.100
You can get a whole disk image, let's say.

00:54:33.100 --> 00:54:33.300
Right.

00:54:33.300 --> 00:54:33.480
Right.

00:54:33.480 --> 00:54:36.840
Because instead of getting just the Docker file, you got to build, you get the result, which

00:54:36.840 --> 00:54:40.240
could have had files copied in locally and all set up in the file system internally.

00:54:40.240 --> 00:54:40.560
Right.

00:54:40.560 --> 00:54:40.820
Yeah.

00:54:40.820 --> 00:54:41.220
Yeah.

00:54:41.220 --> 00:54:41.540
Yeah.

00:54:41.540 --> 00:54:45.720
So two ways to share with just the Docker file and say, hey, build this yourself or I've

00:54:45.720 --> 00:54:46.180
built it.

00:54:46.180 --> 00:54:46.900
Here you go.

00:54:46.900 --> 00:54:47.180
Right.

00:54:47.180 --> 00:54:47.700
Yeah.

00:54:48.000 --> 00:54:51.020
I would love to hear, you know, reach out to me on Twitter or something.

00:54:51.020 --> 00:54:51.320
Right.

00:54:51.320 --> 00:54:52.080
And let me know.

00:54:52.080 --> 00:54:53.740
I'd love to hear more of what you're trying to do.

00:54:53.740 --> 00:54:54.960
And because that sounds interesting.

00:54:54.960 --> 00:54:55.240
Right.

00:54:55.240 --> 00:54:55.460
Yeah.

00:54:55.460 --> 00:54:57.740
Bandwidth is interesting too around the world.

00:54:57.740 --> 00:54:58.000
Right.

00:54:58.000 --> 00:55:01.180
So, you know, I sit here in Austin where, you know, high speed internet.

00:55:01.180 --> 00:55:03.740
Well, really the rest of the world doesn't have that.

00:55:03.740 --> 00:55:04.000
Right.

00:55:04.000 --> 00:55:05.100
So low bandwidth.

00:55:05.100 --> 00:55:08.520
And, you know, of course I got a screaming desktop laptop.

00:55:08.520 --> 00:55:08.960
Right.

00:55:08.960 --> 00:55:13.120
That I use in fast and not, you know, the whole world doesn't have those advantages.

00:55:13.120 --> 00:55:16.480
So, you know, and if I'm pulling down a Mongo, some image, right.

00:55:16.480 --> 00:55:20.040
And I'm picking on Mongo all the time, but you know, if it's, if it's over a gig, that's,

00:55:20.040 --> 00:55:20.960
that's big, right.

00:55:20.960 --> 00:55:22.640
That it'll take a while on some network.

00:55:22.640 --> 00:55:23.260
So yeah.

00:55:23.260 --> 00:55:23.560
Yeah.

00:55:23.560 --> 00:55:28.500
All the video and video courses and audio processing and file exchange.

00:55:28.500 --> 00:55:34.720
I've had to buy unlimited data from Comcast because I was going over my 1.2 terabyte per

00:55:34.720 --> 00:55:36.320
month data caps every month.

00:55:36.320 --> 00:55:36.800
That was ridiculous.

00:55:36.800 --> 00:55:37.020
Yeah.

00:55:37.020 --> 00:55:37.280
Yeah.

00:55:37.280 --> 00:55:38.640
So a lot, a lot of data these days.

00:55:38.640 --> 00:55:39.060
All right.

00:55:39.060 --> 00:55:41.540
Well, you know, fantastic stuff you guys have coming up there.

00:55:41.540 --> 00:55:45.660
I guess maybe we should probably wrap it up just for the sake of time, but yeah, I guess

00:55:45.660 --> 00:55:49.460
we'll, we'll hit the two final questions I always ask.

00:55:49.460 --> 00:55:51.560
First of all, notable PyPI package.

00:55:51.560 --> 00:55:54.100
This is like something interesting that you ran across.

00:55:54.100 --> 00:55:57.400
Maybe you want to just share people that find useful, some Python library.

00:55:57.400 --> 00:55:58.320
I love testing.

00:55:58.320 --> 00:56:00.440
So test containers.python.

00:56:00.440 --> 00:56:04.560
That's a little inside joke that no one on here really knows, but I have, I have developer

00:56:04.560 --> 00:56:04.880
friends.

00:56:04.880 --> 00:56:09.440
So I will, one of my favorite things to argue against is testing just as a thought experiment,

00:56:09.440 --> 00:56:10.580
but it's, it's really fun.

00:56:10.580 --> 00:56:10.780
Right.

00:56:10.780 --> 00:56:13.140
But anyways, but don't listen to me.

00:56:13.140 --> 00:56:14.420
Testing is super important.

00:56:14.420 --> 00:56:14.860
Right.

00:56:14.860 --> 00:56:19.540
And being able to test in containers and pick off these prebuilt containers and use right

00:56:19.540 --> 00:56:23.000
in your, in your app, right in your code is super powerful, extremely powerful.

00:56:23.000 --> 00:56:25.100
So definitely interested in test containers.

00:56:25.100 --> 00:56:25.440
Yeah.

00:56:25.440 --> 00:56:25.960
It's super cool.

00:56:25.960 --> 00:56:31.520
It lets you basically create a with block that says with my SQL container as my SQL or with

00:56:31.520 --> 00:56:33.980
my MongoDB and DB container as that.

00:56:33.980 --> 00:56:35.560
And it just fires up a Docker container.

00:56:35.680 --> 00:56:41.180
You do your tests within that thing and maybe use a high test fixture to preload the test

00:56:41.180 --> 00:56:42.800
data, then run your code against it.

00:56:42.800 --> 00:56:47.420
So instead of mocking out the database and mocking out Redis, you just run a test Redis

00:56:47.420 --> 00:56:49.960
and then throw it away, which I think that's fantastic.

00:56:49.960 --> 00:56:54.580
It's like hybrid between integration tests and unit tests, isolation type stuff.

00:56:54.580 --> 00:56:57.500
It goes back to our earlier conversations around reproducibility, right?

00:56:57.500 --> 00:56:57.940
Yeah.

00:56:58.000 --> 00:57:00.000
Having same environments are very important, right?

00:57:00.000 --> 00:57:00.580
Yeah, absolutely.

00:57:00.580 --> 00:57:04.020
And then final question, if you're going to write some code, what editor do you use these

00:57:04.020 --> 00:57:04.240
days?

00:57:04.240 --> 00:57:07.760
If you would have asked me that about two years ago, it would have been Sublime.

00:57:07.760 --> 00:57:11.680
Been in a plain text editor, you know, back and forth, alt tabbing and back and forth

00:57:11.680 --> 00:57:12.540
between my terminal.

00:57:12.540 --> 00:57:14.340
But now I've fallen in love with VS Code.

00:57:14.340 --> 00:57:14.660
Yeah.

00:57:14.660 --> 00:57:15.780
It's extremely powerful.

00:57:15.780 --> 00:57:19.920
So I feel like Sublime, like so many of the people who love Sublime have just naturally

00:57:19.920 --> 00:57:21.140
moved to VS Code.

00:57:21.140 --> 00:57:22.380
I mean, Sublime was really cool.

00:57:22.380 --> 00:57:24.440
It just had all these like weird community stuff.

00:57:24.540 --> 00:57:28.660
Like there was Sublime and then Sublime 3 and there was like permanently in beta and like,

00:57:28.660 --> 00:57:29.560
are these getting updated?

00:57:29.560 --> 00:57:30.980
Which one is like the real thing?

00:57:30.980 --> 00:57:34.120
It's just, it was always kind of a little unclear where it was going.

00:57:34.120 --> 00:57:38.120
And then, you know, VS Code came along with a similar model and just said, well, why don't

00:57:38.120 --> 00:57:40.960
we put a hundred people just like constantly adding features to this?

00:57:40.960 --> 00:57:41.600
Yeah, exactly.

00:57:41.600 --> 00:57:42.980
I don't know what the number is, but it's high.

00:57:42.980 --> 00:57:43.320
Yeah.

00:57:43.320 --> 00:57:46.320
And it's interesting you say that because I was a long time Sublime.

00:57:46.320 --> 00:57:47.980
I bought it, right?

00:57:47.980 --> 00:57:48.860
And purchased it forever.

00:57:48.860 --> 00:57:52.860
And yeah, it was like two or three and I have a theme over here, but it doesn't work in three.

00:57:52.860 --> 00:57:53.540
And how do you get it?

00:57:53.540 --> 00:57:54.460
It was just weird.

00:57:54.460 --> 00:57:57.320
And then VS Code just kind of snuck in and I said, yeah, I'm going to use it.

00:57:57.320 --> 00:57:57.720
I'm going to use it.

00:57:57.720 --> 00:58:01.260
And now I keep just using, I use it as a text editor back then, right?

00:58:01.260 --> 00:58:03.440
And now I just keep using more and more features, plugins.

00:58:03.440 --> 00:58:06.380
I mean, the ecosystem around that is so powerful.

00:58:06.380 --> 00:58:07.100
There's neat stuff.

00:58:07.100 --> 00:58:09.760
And especially there's a lot of neat Docker things going on in it.

00:58:09.760 --> 00:58:09.940
Yeah.

00:58:09.940 --> 00:58:13.380
I'm going to run my VS Code in a Docker and then run, you know, dev containers.

00:58:13.380 --> 00:58:16.120
And it'll be like Inception.

00:58:16.120 --> 00:58:16.680
It'll be Docker.

00:58:16.680 --> 00:58:17.180
Yeah, a little Inception.

00:58:17.180 --> 00:58:18.540
Docker VS Code all the way down.

00:58:18.540 --> 00:58:19.560
All right.

00:58:19.560 --> 00:58:22.600
You got a moment for a couple more audience questions before we wrap it up?

00:58:22.600 --> 00:58:23.040
Absolutely.

00:58:23.040 --> 00:58:24.020
You know me.

00:58:24.020 --> 00:58:27.140
I'll chat away for days, but I know your audience might get bored.

00:58:27.140 --> 00:58:28.600
All right.

00:58:28.600 --> 00:58:30.220
So Brian Sands out there.

00:58:30.220 --> 00:58:35.240
Hey, Brian says, do you know of any good examples using Docker Compose with Postgres for persistent

00:58:35.240 --> 00:58:36.080
local storage?

00:58:36.080 --> 00:58:39.300
I have a hard time finding up-to-date working info to do this properly.

00:58:39.460 --> 00:58:39.700
Yeah.

00:58:39.700 --> 00:58:41.460
Check out Awesome Compose.

00:58:41.460 --> 00:58:43.080
So it's a GitHub repo.

00:58:43.080 --> 00:58:44.300
Docker owns it.

00:58:44.300 --> 00:58:46.500
So Awesome-Compose.

00:58:46.500 --> 00:58:51.600
I can't remember if it was under the Docker organization or not, but there's a ton of different

00:58:51.600 --> 00:58:53.360
kind of configurations with different stacks.

00:58:53.360 --> 00:58:54.380
That's super interesting.

00:58:54.380 --> 00:58:55.580
I had no idea about this.

00:58:55.580 --> 00:58:56.520
Good question, Brian.

00:58:56.680 --> 00:58:56.900
Yeah.

00:58:56.900 --> 00:58:57.420
Thank you, Brian.

00:58:57.420 --> 00:58:58.020
I paid him.

00:58:58.020 --> 00:58:59.060
I'll send you that.

00:58:59.060 --> 00:59:00.460
I'll Venmo you here in a minute.

00:59:00.460 --> 00:59:01.920
No, but yeah, check that out.

00:59:01.920 --> 00:59:05.920
If you can't get your specific stack, you're going to get something very close, right?

00:59:05.920 --> 00:59:07.460
So there's Flask in there.

00:59:07.460 --> 00:59:13.080
There's Nginx like Flask and Postgres, different kind of three-tiered stacks.

00:59:13.080 --> 00:59:15.200
And then within that, you'll have Docker files.

00:59:15.200 --> 00:59:18.040
And then you'll have a Compose file to kind of bring it all together.

00:59:18.040 --> 00:59:20.500
And you should get some really great examples in there.

00:59:20.720 --> 00:59:23.880
If not, please do hit me up on Twitter and I'll get you pointed in the right direction

00:59:23.880 --> 00:59:24.480
for sure.

00:59:24.480 --> 00:59:25.120
Yeah, very cool.

00:59:25.120 --> 00:59:25.440
Awesome.

00:59:25.440 --> 00:59:30.300
And then Tino asks, what is the current state of Windows-based Docker containers?

00:59:30.300 --> 00:59:31.560
I know there's Nano Server.

00:59:31.560 --> 00:59:32.960
I got to tread lightly on this one.

00:59:32.960 --> 00:59:37.960
You know, I was super excited when Microsoft, when we started supporting it for Windows containers.

00:59:37.960 --> 00:59:40.580
You know, the focus has been not as much.

00:59:40.580 --> 00:59:46.720
The amount of people actually using Windows containers is very, very small compared to Unix-based

00:59:46.720 --> 00:59:47.260
containers.

00:59:47.740 --> 00:59:50.760
So, you know, just because of that, the focus has not been on that.

00:59:50.760 --> 00:59:51.820
There's still a thing.

00:59:51.820 --> 00:59:53.240
They're still being developed on.

00:59:53.240 --> 00:59:56.840
They're just not as prominent in the industry for whatever reason, especially with .NET.

00:59:56.840 --> 01:00:01.180
Well, you know where I would say they probably, as is standard with Microsoft these days,

01:00:01.180 --> 01:00:06.180
their focus seems to be if it runs on Azure, we love it, right?

01:00:06.180 --> 01:00:11.000
This is where we will sacrifice many, many of the things so that it will run on Azure.

01:00:11.420 --> 01:00:15.720
And a lot of that, I believe, is check this thing in Windows and like say Visual Studio

01:00:15.720 --> 01:00:18.840
Code so I can push deploy to run on Docker on Azure.

01:00:18.840 --> 01:00:19.300
Yep.

01:00:19.300 --> 01:00:21.100
I think that's probably where a lot of it is.

01:00:21.100 --> 01:00:21.340
Yeah.

01:00:21.340 --> 01:00:24.040
And WSL2 is huge, right?

01:00:24.040 --> 01:00:25.760
So talking to the Microsoft folks, right?

01:00:25.760 --> 01:00:28.220
They want to be the place where you come.

01:00:28.220 --> 01:00:31.160
The Windows platform is the place you come for developing, right?

01:00:31.160 --> 01:00:33.840
So whether you're a Windows developer or Linux developer, right?

01:00:33.840 --> 01:00:34.900
You're using VS Code.

01:00:34.900 --> 01:00:35.960
You're running on Windows.

01:00:35.960 --> 01:00:40.080
You're using WSL2 for Unix development or you're using Windows for Windows development.

01:00:40.080 --> 01:00:41.460
That's their thought, right?

01:00:41.460 --> 01:00:45.700
So the underlying platforms kind of change and with containers, they can do some of that.

01:00:45.700 --> 01:00:49.100
So they're focusing a lot on WSL2, which is super powerful.

01:00:49.100 --> 01:00:49.520
Right.

01:00:49.520 --> 01:00:53.800
Which really just means make WSL2 good so that it runs on Ubuntu or something like that,

01:00:53.800 --> 01:00:53.940
right?

01:00:53.940 --> 01:00:56.160
I mean, we just leverage that Ubuntu Docker support, I suspect.

01:00:56.160 --> 01:00:56.420
Yeah.

01:00:56.420 --> 01:01:01.800
While we're talking platforms, I've been doing basically nothing but M1 stuff these

01:01:01.800 --> 01:01:02.180
days.

01:01:02.180 --> 01:01:07.380
Since mid-December, I thought I would, you know, I got my Mac mini M1 and I thought I'd be juggling

01:01:07.380 --> 01:01:08.880
this would work here, that would work there.

01:01:08.880 --> 01:01:12.100
And I just literally have just turned off my laptop and just do this.

01:01:12.100 --> 01:01:12.860
And I love it.

01:01:12.860 --> 01:01:14.800
What's the story of Docker and M1?

01:01:14.800 --> 01:01:15.200
Yeah.

01:01:15.200 --> 01:01:16.140
So we love Apple.

01:01:16.140 --> 01:01:20.080
It was nice to see our little, I don't know if you saw an Apple's keynote, you know,

01:01:20.080 --> 01:01:22.920
where you saw the Docker desktop on there, which was super cool.

01:01:22.920 --> 01:01:26.920
We're getting very, very close to shipping, you know, a release.

01:01:26.920 --> 01:01:27.340
Okay.

01:01:27.340 --> 01:01:27.960
A GA.

01:01:27.960 --> 01:01:28.320
Yeah.

01:01:28.320 --> 01:01:29.400
I mean, really close.

01:01:29.400 --> 01:01:32.040
I don't want to give a date or anything, but really close.

01:01:32.040 --> 01:01:32.580
But you know, tomorrow?

01:01:32.580 --> 01:01:33.040
Yeah.

01:01:33.040 --> 01:01:33.680
Tomorrow will be okay.

01:01:33.680 --> 01:01:34.220
We'll do that.

01:01:34.220 --> 01:01:35.240
I'll take it.

01:01:35.240 --> 01:01:35.840
Very, very close.

01:01:35.840 --> 01:01:36.680
They're working on it.

01:01:36.680 --> 01:01:40.800
It's one of our primary feature sets to finish, to get done, right?

01:01:40.800 --> 01:01:42.440
And again, it came from the community.

01:01:42.440 --> 01:01:44.280
It was our number one issue, right?

01:01:44.280 --> 01:01:48.620
When the M1s dropped, you know, I think everybody jumped into our GitHub issue and said, we need

01:01:48.620 --> 01:01:48.840
support.

01:01:48.840 --> 01:01:52.000
I think this whole M1 stuff has come out way stronger than I expected.

01:01:52.000 --> 01:01:54.180
I thought, oh, that'll be kind of a neat, who knows what they're doing.

01:01:54.180 --> 01:01:57.680
But like, as it came out, it's like, wow, this is really transformative in some ways.

01:01:57.680 --> 01:01:57.940
Yeah.

01:01:57.940 --> 01:01:59.260
You can get the tech preview.

01:01:59.260 --> 01:02:00.820
It's pretty stable right now.

01:02:00.820 --> 01:02:05.380
You know, it's just going to be on probably, you know, one-off little issues on your environment,

01:02:05.380 --> 01:02:10.200
how you run containers and what exactly, what container, you know, because they got to be

01:02:10.200 --> 01:02:11.360
compiled for the different lines.

01:02:11.360 --> 01:02:12.900
It's got to basically be an ARM image.

01:02:12.900 --> 01:02:13.220
Yeah.

01:02:13.220 --> 01:02:13.740
Yeah.

01:02:13.740 --> 01:02:17.480
And sometimes you run ARM, but then, you know, Mongo doesn't have an ARM version yet.

01:02:17.480 --> 01:02:20.720
So you're running an emulation and, you know, so there's those type of things.

01:02:20.720 --> 01:02:23.340
We're very, very close to releasing GA.

01:02:23.340 --> 01:02:24.080
Stay tuned.

01:02:24.080 --> 01:02:25.040
Next couple of weeks, I would say.

01:02:25.040 --> 01:02:25.240
Yeah.

01:02:25.240 --> 01:02:25.700
Fantastic.

01:02:25.700 --> 01:02:27.020
And shout out to the MongoDB people.

01:02:27.020 --> 01:02:27.820
Where's your M1 version?

01:02:27.820 --> 01:02:28.180
Come on.

01:02:28.180 --> 01:02:28.420
All right.

01:02:28.420 --> 01:02:29.140
Final question.

01:02:29.140 --> 01:02:30.020
We're going to wrap it up.

01:02:30.020 --> 01:02:36.940
Ricardo says, networking on Docker feels like it's easier with LXC, one of the other container

01:02:36.940 --> 01:02:37.600
styles.

01:02:37.600 --> 01:02:38.880
Am I doing something wrong?

01:02:39.060 --> 01:02:41.340
I'm interested in giving a container-in-zone IP address.

01:02:41.340 --> 01:02:42.240
Peter, this is you.

01:02:42.240 --> 01:02:42.780
I have no idea.

01:02:42.780 --> 01:02:43.140
Yeah.

01:02:43.140 --> 01:02:46.720
Ricardo, I thought I was going to get out of here without any networking questions.

01:02:46.720 --> 01:02:48.420
But Ricardo, you are not alone.

01:02:48.420 --> 01:02:50.920
Networking in containers is difficult, right?

01:02:50.920 --> 01:02:54.520
You got to deal with different networking technologies, even locally.

01:02:54.520 --> 01:02:56.340
So yeah, it's not easy.

01:02:56.340 --> 01:03:00.860
Is this easier in something like Swarm or Kubernetes or something else that maybe controls them more?

01:03:00.860 --> 01:03:02.380
No, it gets even more complicated.

01:03:02.380 --> 01:03:02.740
Okay.

01:03:02.740 --> 01:03:03.160
Yeah.

01:03:04.160 --> 01:03:07.920
Once you step outside of, if you have cloud-native apps, right?

01:03:07.920 --> 01:03:11.220
And I'm not a huge fan of that term because what the heck does that mean?

01:03:11.220 --> 01:03:12.460
But if you don't-

01:03:12.460 --> 01:03:14.220
I want to permanently pay to run my app forever.

01:03:14.220 --> 01:03:15.300
Thank you.

01:03:15.300 --> 01:03:17.420
Yeah, exactly.

01:03:17.420 --> 01:03:18.020
But yeah.

01:03:18.020 --> 01:03:23.000
So if you're in microservices, you're using configuration outside of your app to control

01:03:23.000 --> 01:03:23.700
your app, right?

01:03:23.700 --> 01:03:24.240
Is the best.

01:03:24.240 --> 01:03:25.980
But I see a lot of legacy apps.

01:03:25.980 --> 01:03:28.440
I'll do legacy in double quotes also, right?

01:03:28.440 --> 01:03:32.040
Because just meaning not more microservice type apps, right?

01:03:32.280 --> 01:03:36.340
And so you're trying to run those apps inside of containers and they have unique networking

01:03:36.340 --> 01:03:38.360
needs, unique volume needs, right?

01:03:38.360 --> 01:03:42.580
They're still writing to disk and reading from disk and you can't control that without changing

01:03:42.580 --> 01:03:47.220
code or they have IP addresses or subnets kind of hardwired in, right?

01:03:47.220 --> 01:03:48.340
And you can't do a lot of that.

01:03:48.340 --> 01:03:52.760
So you got to configure your networking around your app with inside a container and that's where

01:03:52.760 --> 01:03:54.060
the complexity comes in.

01:03:54.060 --> 01:04:00.660
So in this scenario, giving your container its own IP address, it's a little bit against

01:04:00.660 --> 01:04:01.860
best practices, right?

01:04:02.000 --> 01:04:03.820
So containers should be ephemeral.

01:04:03.820 --> 01:04:05.120
They should go away, right?

01:04:05.120 --> 01:04:05.820
You should think of them.

01:04:05.820 --> 01:04:07.040
And I got to get a better analogy.

01:04:07.040 --> 01:04:12.720
My apologies to anybody if this offends you, but we used to think of our VMs as pets, right?

01:04:12.720 --> 01:04:17.180
And we take care of them, keep them up and love them and hope they live forever, right?

01:04:17.180 --> 01:04:18.380
Configure them.

01:04:18.380 --> 01:04:22.880
And then now you have containers, which are more like, let's say, I used to say cattle, but

01:04:22.880 --> 01:04:24.020
I'm more that offends people.

01:04:24.020 --> 01:04:26.960
So let's say consumable foods, right?

01:04:26.960 --> 01:04:28.860
You know, like you get-

01:04:28.860 --> 01:04:29.620
Fungible elements.

01:04:29.760 --> 01:04:29.860
Yeah.

01:04:29.860 --> 01:04:32.740
So you get more like a cake, right?

01:04:32.740 --> 01:04:34.720
If I get cake in my house, I'm eating that, right?

01:04:34.720 --> 01:04:35.380
And it's gone.

01:04:35.380 --> 01:04:37.180
And then if I want new cake, I got to put new cake, right?

01:04:37.180 --> 01:04:37.980
So same with containers.

01:04:37.980 --> 01:04:38.160
It goes bad.

01:04:38.160 --> 01:04:39.600
You don't try to rehabilitate it.

01:04:39.600 --> 01:04:40.320
You just get new cake.

01:04:40.320 --> 01:04:40.840
Right, right.

01:04:40.840 --> 01:04:41.060
Yeah.

01:04:41.060 --> 01:04:44.660
But you don't eat half the cake and then bake, you know, put another bake the half.

01:04:44.660 --> 01:04:46.440
This analogy is going poor, but-

01:04:46.440 --> 01:04:47.500
Speak for yourself.

01:04:47.500 --> 01:04:48.860
We refill our cake.

01:04:48.860 --> 01:04:50.760
We don't ever want to go down to zero cake.

01:04:50.760 --> 01:04:51.040
Right.

01:04:51.040 --> 01:04:51.680
But that's the idea.

01:04:51.800 --> 01:04:55.140
So if you're assigning an IP to a container, that container goes away, right?

01:04:55.140 --> 01:04:58.780
And the idea is if I'm orchestrating that I have multiple containers all running, they

01:04:58.780 --> 01:05:00.560
shouldn't have the same IP, right?

01:05:00.560 --> 01:05:04.740
If one goes away, one comes back up, you don't want to, you know, so those are the type of

01:05:04.740 --> 01:05:05.500
things you're getting into.

01:05:05.500 --> 01:05:09.840
And Ricardo, you're probably shaking your head going, yes, but, but, but, but, but, and I

01:05:09.840 --> 01:05:10.380
totally-

01:05:10.380 --> 01:05:10.680
But I need it.

01:05:10.680 --> 01:05:11.120
Yeah.

01:05:11.120 --> 01:05:11.920
I totally understand.

01:05:11.920 --> 01:05:14.100
And you can do it, but it's just a little more complex.

01:05:14.100 --> 01:05:14.700
Yeah.

01:05:14.700 --> 01:05:17.640
A little hard to answer on, you know, with a couple of minutes here, but-

01:05:17.640 --> 01:05:17.660
Yeah.

01:05:17.660 --> 01:05:18.660
I hit you up on Twitter.

01:05:18.780 --> 01:05:19.020
All right.

01:05:19.020 --> 01:05:21.000
So thank you so much for being here, Peter.

01:05:21.000 --> 01:05:21.700
It's super interesting.

01:05:21.700 --> 01:05:22.580
Final call to action.

01:05:22.580 --> 01:05:25.720
People want to get started maybe making Docker more of their life.

01:05:25.720 --> 01:05:26.380
What do they do?

01:05:26.380 --> 01:05:27.820
Definitely go hit me up on Twitter.

01:05:27.820 --> 01:05:28.560
Say hello.

01:05:28.560 --> 01:05:29.760
Love to talk to folks.

01:05:29.760 --> 01:05:31.020
Join our community.

01:05:31.020 --> 01:05:32.480
Jump into community Slack.

01:05:32.480 --> 01:05:35.400
If you're, questions like that, Ricardo, the community's there.

01:05:35.400 --> 01:05:36.800
They'll be very, very helpful.

01:05:36.800 --> 01:05:39.180
A lot of our engineers, our developers are in there.

01:05:39.180 --> 01:05:40.440
All of our PMs are in there.

01:05:40.440 --> 01:05:41.600
Ton of captains are in there.

01:05:41.600 --> 01:05:42.880
Docker captains are in there.

01:05:42.880 --> 01:05:44.120
And they're very, very helpful.

01:05:44.120 --> 01:05:46.400
So this is a great way to get plugged into the community.

01:05:46.740 --> 01:05:49.320
And then the last thing is DockerCon is coming up here in the May.

01:05:49.320 --> 01:05:50.760
Sign up for DockerCon.

01:05:50.760 --> 01:05:52.700
It's going to be an online live event.

01:05:52.700 --> 01:05:56.960
Last year, we had 80,000 registrants, a really, really big show.

01:05:56.960 --> 01:05:59.160
So you're not going to want to miss a great content coming.

01:05:59.160 --> 01:06:01.400
You get to see more of my smiley face.

01:06:01.400 --> 01:06:03.540
And then CFP is still open.

01:06:03.540 --> 01:06:05.100
We're getting ready to close it on the 15th.

01:06:05.100 --> 01:06:07.960
So if you ever thought about giving a talk, right?

01:06:07.960 --> 01:06:08.740
Please submit.

01:06:08.740 --> 01:06:11.880
If you're a first-time speaker, don't let that deter you, right?

01:06:11.880 --> 01:06:15.100
DockerCon is traditionally a pretty big conference and well-attended, right?

01:06:15.100 --> 01:06:18.120
And it might, you know, first-time speakers might not submit.

01:06:18.120 --> 01:06:18.720
Please do.

01:06:18.720 --> 01:06:20.020
We do read all of them.

01:06:20.020 --> 01:06:22.760
And we do take an account, you know, what you've done in the past.

01:06:22.760 --> 01:06:24.700
But we also do look for new speakers, right?

01:06:24.700 --> 01:06:25.360
A hundred percent.

01:06:25.360 --> 01:06:27.420
Don't let that deter you, for sure.

01:06:27.420 --> 01:06:27.820
All right.

01:06:27.820 --> 01:06:28.400
Fantastic.

01:06:28.400 --> 01:06:29.680
Well, thanks for taking the time, Peter.

01:06:29.680 --> 01:06:30.760
It's been great to chat with you about this.

01:06:30.760 --> 01:06:31.000
Yeah.

01:06:31.000 --> 01:06:32.140
Hey, thanks for having me on.

01:06:32.140 --> 01:06:33.000
Really enjoyed it.

01:06:33.000 --> 01:06:33.320
You bet.

01:06:33.320 --> 01:06:33.760
See you later.

01:06:33.760 --> 01:06:34.160
All right, bye.

01:06:34.160 --> 01:06:38.080
This has been another episode of Talk Python To Me.

01:06:38.080 --> 01:06:42.720
Our guest on this episode was Peter McKee, and it's been brought to you by Datadog and

01:06:42.720 --> 01:06:44.280
us over at Talk Python Training.

01:06:44.280 --> 01:06:48.280
Datadog gives you visibility into the whole system running your code.

01:06:48.280 --> 01:06:52.080
Visit talkpython.fm/datadog and see what you've been missing.

01:06:52.080 --> 01:06:54.260
Don't throw in a free t-shirt with your free trial.

01:06:54.260 --> 01:06:56.100
Want to level up your Python?

01:06:56.100 --> 01:07:00.160
We have one of the largest catalogs of Python video courses over at Talk Python.

01:07:00.160 --> 01:07:04.120
Our content ranges from true beginners to deeply advanced topics like this.

01:07:04.120 --> 01:07:05.340
Like memory and async.

01:07:05.340 --> 01:07:08.000
And best of all, there's not a subscription in sight.

01:07:08.000 --> 01:07:10.900
Check it out for yourself at training.talkpython.fm.

01:07:11.280 --> 01:07:13.020
Be sure to subscribe to the show.

01:07:13.020 --> 01:07:15.800
Open your favorite podcast app and search for Python.

01:07:15.800 --> 01:07:17.120
We should be right at the top.

01:07:17.120 --> 01:07:22.900
You can also find the iTunes feed at /itunes, the Google Play feed at /play, and the

01:07:22.900 --> 01:07:26.460
direct RSS feed at /rss on talkpython.fm.

01:07:27.340 --> 01:07:29.900
We're live streaming most of our recordings these days.

01:07:29.900 --> 01:07:34.020
If you want to be part of the show and have your comments featured on the air, be sure to

01:07:34.020 --> 01:07:37.740
subscribe to our YouTube channel at talkpython.fm/youtube.

01:07:37.740 --> 01:07:39.580
This is your host, Michael Kennedy.

01:07:39.580 --> 01:07:40.880
Thanks so much for listening.

01:07:40.880 --> 01:07:42.040
I really appreciate it.

01:07:42.280 --> 01:07:43.940
Now get out there and write some Python code.

01:07:43.940 --> 01:07:44.940
Bye.

01:07:44.940 --> 01:07:45.940
Bye.

01:07:45.940 --> 01:07:45.940
Bye.

01:07:45.940 --> 01:07:45.940
Bye.

01:07:45.940 --> 01:07:46.940
Bye.

01:07:46.940 --> 01:07:47.940
Bye.

01:07:47.940 --> 01:07:48.940
Bye.

01:07:48.940 --> 01:07:49.940
Bye.

01:07:49.940 --> 01:07:50.940
Bye.

01:07:50.940 --> 01:07:51.940
Bye.

01:07:51.940 --> 01:07:52.940
Bye.

01:07:52.940 --> 01:07:53.940
Bye.

01:07:53.940 --> 01:07:54.940
Bye.

01:07:54.940 --> 01:07:55.940
Bye.

01:07:55.940 --> 01:07:56.940
Bye.

01:07:56.940 --> 01:07:57.940
Bye.

01:07:57.940 --> 01:07:57.940
Bye.

01:07:57.940 --> 01:07:57.940
Bye.

01:07:57.940 --> 01:07:57.940
Bye.

01:07:57.940 --> 01:07:57.940
Bye.

01:07:57.940 --> 01:07:57.940
Bye.

01:07:57.940 --> 01:07:57.940
Bye.

01:07:57.940 --> 01:07:57.940
Bye.

01:07:57.940 --> 01:07:58.940
Bye.

01:07:58.940 --> 01:07:59.940
Bye.

01:07:59.940 --> 01:07:59.940
Bye.

01:07:59.940 --> 01:08:00.940
Bye.

01:08:00.940 --> 01:08:01.440
you

01:08:01.440 --> 01:08:01.940
you

01:08:01.940 --> 01:08:03.940
Thank you.

01:08:03.940 --> 01:08:33.920
Thank you.