Placeholder Image

Subtitles section Play video

  • COLTON OGDEN: Good morning, good afternoon, good evening,

  • depending on where you are in the world.

  • This is CS50 on Twitch.

  • My name is Colton Ogden and I'm joined today by--

  • DAVID MALAN: David Malan, also of CS50.

  • Good to see everyone again.

  • It's been a while.

  • COLTON OGDEN: Yeah, it's been a while.

  • When was the last stream that you were on, do you remember?

  • DAVID MALAN: Oh, it was good December.

  • I think we've played Zelda last time.

  • COLTON OGDEN: Oh, that's true.

  • It was not as much of an educational stream as today.

  • DAVID MALAN: It was very educational.

  • COLTON OGDEN: We could say a little bit of game development stuff.

  • DAVID MALAN: What game are we here to play today?

  • I'm all set to accrue some points.

  • COLTON OGDEN: It's a game called Docker.

  • I believe it stars a whale of some kind and some boxes on top of them.

  • DAVID MALAN: Indeed.

  • COLTON OGDEN: We have a bunch of people that are in the chat already.

  • DAVID MALAN: I see.

  • A lot of people have tuned in already.

  • Nice to see some familiar names.

  • COLTON OGDEN: We're almost at the magic number of 50.

  • We have 49 viewers currently.

  • DAVID MALAN: Oh, and what happens after 50?

  • COLTON OGDEN: Then we just get tons of-- just tons of money,

  • just showered with money.

  • Yeah, we have a lot of people in the chat.

  • There's a lot of regulars.

  • I shouted out a bunch of people in the chat,

  • but thanks so much for everybody who's joining.

  • Dan Nurell, Bavick Night, we have Belicures, Elias, Assly, Brenda,

  • Mr. Frigg--

  • who I think is a new person.

  • Kugie Snipers, We Be, ISO TV.

  • I think ISO TV was one of the first people.

  • DAVID MALAN: I'm impressed you can pronounce all these so easily.

  • COLTON OGDEN: I've gotten a lot of practice at this point.

  • M. Kloppenburg, thanks for joining-- another regular.

  • For Sunlight, Suraton, GP Guy.

  • We have an absolute ton of people.

  • DAVID MALAN: Oh, we've got a first-timer here.

  • 1Jacko0TS.

  • I don't know.

  • COLTON OGDEN: Oh, yeah, 1JackOTS.

  • Thanks so much for the follow layout.

  • They followed right before this stream as well.

  • DAVID MALAN: Nice.

  • Hello, Elasorsa.

  • COLTON OGDEN: Elasorsa, yeah, that's a new person as well,

  • and Adamantine Bipartite.

  • What's up, David and Colton?

  • What's up?

  • That's the first I've seen that name.

  • That's a long name.

  • DAVID MALAN: Yeah, we've got a lot.

  • Nice to see everyone here.

  • COLTON OGDEN: Yeah, Amed Osman, and--

  • DAVID MALAN: Another first-timer from Adam.

  • COLTON OGDEN: Yeah, M. Gonayni says hello.

  • WhipStreak23, there we go, another regular.

  • DAVID MALAN: 52.

  • Oh, we missed the 50.

  • We blinked and it was gone.

  • COLTON OGDEN: We did, yeah.

  • So what are we--

  • what exactly is Docker?

  • That's what we-- we sort of spoiled what we're talking about today.

  • It's not actually a game.

  • DAVID MALAN: No, I'm sorry.

  • So tune out now if you don't want to learn something really interesting,

  • though technically.

  • So Docker is containerization.

  • COLTON OGDEN: Oh, wait.

  • It looks like your laptop is not--

  • DAVID MALAN: Oh, we're not plugged in.

  • Oh, user error, apologies.

  • COLTON OGDEN: Sorry.

  • Sorry, that's my fault. I should have--

  • DAVID MALAN: And if Colton is going to tell some jokes here for just a moment.

  • COLTON OGDEN: Oh, man.

  • I didn't have any.

  • DAVID MALAN: Did you hear about the guy who--

  • I don't know.

  • COLTON OGDEN: Who forgot to plug-in his dongle?

  • DAVID MALAN: Yeah.

  • Here we go.

  • Let me go ahead and--

  • today's lesson will be about how to change your display preferences.

  • Here we are going under Scaled so as to do 720p,

  • which isn't actually a very high resolution,

  • but for our purposes of streaming technical content,

  • makes it all a lot more readable on the screen.

  • COLTON OGDEN: Oh, look, Brian's actually on the chat.

  • He says hello--

  • BrianU28.

  • DAVID MALAN: Oh, nice.

  • Please send all of your questions to Brian U, who is here from CS50's team.

  • COLTON OGDEN: Yeah, Brian I'm sure knows a lot about Docker too.

  • DAVID MALAN: So let's begin.

  • Again, so Docker is containerization technology.

  • But what does that actually mean?

  • Well, let's rewind a little bit.

  • Normally when you're running software it's

  • on your Mac, or your PC, or your server, or somewhere else,

  • and you have installed whatever operating system was installed when you

  • bought it or when you first set it up--

  • Mac OS, Windows, Linux, or whatnot.

  • The problem, though, arises in a server side environment

  • where you want to run multiple applications.

  • Like CS50 has a whole suite of web apps.

  • We have the CS50 Sandbox, CS50 Lab, if you started tuning in to CS50X 2019.

  • We have help50, and style50, and bunches more.

  • So all of these apps have their own dependencies, like certain software,

  • and libraries, and frameworks that they need.

  • And frankly, not all apps need the same things.

  • And so in yester year, only five plus years ago, we, CS50,

  • used to have a centralized architecture for all of our web apps.

  • We had what were called vhost servers, virtual hosting servers

  • running popular web server software called Apache.

  • And what we would do is we pretty much had

  • to find the greatest common denominator among all of our apps

  • and actually install on those servers every library

  • and every piece of software that every app might possibly need.

  • The problem, of course, is that eventually you

  • run into incompatibilities.

  • One needs this version, another needs that, and now you're just out of luck.

  • And if something breaks in one app, it's not isolated from another,

  • and so one app can take down the rest.

  • So Docker ultimately is about isolating your applications from one another.

  • COLTON OGDEN: And so it says on your web page there, what is a container?

  • I'm guessing that the whale and the boxes on top of the whale

  • are like a representation of this idea of containers?

  • DAVID MALAN: Indeed.

  • We can pull this up if I enhance this image up here.

  • So Docker is a company that also makes and contributes

  • to open source software, which is also called Docker.

  • And indeed, you can see those little boxes represent those big--

  • we call them containers.

  • That really big--

  • COLTON OGDEN: Shipping containers.

  • DAVID MALAN: Shipping containers that tractor trailer trucks generally

  • cart around.

  • So it's actually pretty cute.

  • The whale is instead the ship and it's holding up the containers,

  • and it's really cute.

  • If you want to go ahead today even, install Docker, at least on Mac OS,

  • the first message that the software will print for you is,

  • "We are whaley glad to see you."

  • COLTON OGDEN: Wow, that's cringey.

  • DAVID MALAN: A little bit, a little hard to say.

  • But I should say, some folks out there might be familiar perhaps

  • with virtualization software.

  • For instance, has anyone used VMware, or Parallels, or other such tools?

  • Those are--

  • COLTON OGDEN: That's certainly been around for a while, a long--

  • DAVID MALAN: A long time.

  • COLTON OGDEN: Much longer than Docker has.

  • And I know I've definitely used it quite a bit.

  • DAVID MALAN: Yeah, and we use those too.

  • But with virtualization software, or virtual machines,

  • or virtual machine monitors-- bunch of different ways to describe essentially

  • the same thing--

  • you would have to run, you could run, multiple operating systems

  • on your same computer.

  • Essentially, each OS in its own window.

  • The problem with a VM or virtual machine is

  • it virtualizes the entire hardware-- the CPU, and the memory, and the disk,

  • and the files, and everything.

  • So it actually is a lot heavier weight.

  • You have a lot of redundancy.

  • If you have Linux in your virtual machines,

  • you have as many copies of Linux running and installed

  • as you have virtual machines.

  • COLTON OGDEN: So a Docker-- part of what Docker does is sort of mitigates

  • that resource use on your machine?

  • DAVID MALAN: Indeed.

  • So I pulled this up in advance, one, to learn what Docker is, and two,

  • to actually show some of the fun pictures that they have.

  • That actually does paint a nice picture here.

  • I think if we scroll down--

  • yeah, indeed.

  • So here on the right--

  • this is just on Docker/resources/what-container.

  • On the right, you see an artist's rendition of what a virtual machine is.

  • At the lowest level you have your hardware, your infrastructure,

  • like the physical servers.

  • The blue bar above that is the hypervisor, a.k.a.

  • virtual machine monitor, a.k.a.

  • VMware, or Parallels, or other software too.

  • And then on top of that conceptually you have maybe Windows installed,

  • and Linux installed, and maybe Mac OS-- but Apple does not make that easy--

  • otherwise known as your "guest operating systems."

  • And on those guest operating systems, you

  • have your individual apps each running.

  • So now if you look to the left, what seems to be missing, for instance?

  • COLTON OGDEN: Well, there's no virtual machines separating the apps.

  • They're all running in sort of the same bucket, which

  • is the container as applications arrow.

  • That's what that's referring to?

  • DAVID MALAN: Yeah, exactly.

  • Yeah, each of those apps is a containerized application,

  • which means each app is using Docker.

  • Docker is now the software beneath them that makes all this possible.

  • And notice, you only have one operating system.

  • So you run, for instance, Linux or something

  • on your own based computer, and thanks to Docker,

  • can you now share just one other operating system,

  • if you'd like, across all of those applications.

  • And moreover and most excitingly, if all of those apps--

  • A, B, C, D, E, F-- are all running Ubuntu Linux Version 18, well, then

  • what you'll have is one base installation of Ubuntu.

  • And if app A and B need slightly different software,

  • they're just going to be layered on top.

  • Docker supports what's called a "union file system."

  • So if we both have apps that we've written

  • using Linux but I need a library called Foo and you need Bar,

  • we'll share the same base layer.

  • But for you, Docker will layer Bar on it,

  • but for me, Docker will layer Foo on it, but still have that commonality

  • underneath.

  • COLTON OGDEN: And if we both need two different versions of Ubuntu,

  • does it do similar types of things?

  • DAVID MALAN: It does.

  • You go a little lower level, but then each of us has our own copy of Ubuntu--

  • 15, or 16, or 18, or whatnot--

  • and then, yes, those are isolated from each.

  • COLTON OGDEN: Pretty cool.

  • Yes, so it sounds like in factors out a lot of the bulk, the unnecessary bulk

  • associated with running multiple VMs.

  • DAVID MALAN: Indeed.

  • COLTON OGDEN: I know we definitely have a bunch of messages here.

  • DAVID MALAN: Well, let's catch up on these.

  • COLTON OGDEN: Some people have definitely talked about Apache in hear.

  • And people are asking, "What is Docker?

  • I wear Dockers."

  • They think it's a clothing brand.

  • I'm trying to do this in code recover--

  • 55 people.

  • DAVID MALAN: There we go.

  • This is what we'll be talking about today.

  • COLTON OGDEN: CS50 fashion.

  • For Sunlight asks, "Is it a simulator or an emulator?"

  • And they're talking about Docker.

  • DAVID MALAN: It's technically neither.

  • It is, in and of itself, its own technology.

  • Yeah, I mean it's closer I think to a virtual machine

  • than to either of those.

  • Where those are implementations truly in software of just one specific runtime,

  • but emulator is pretty close to virtual machine.

  • There's just a little more sophistication

  • I think under today's VMs, because you're

  • virtualizing an entire architecture and the operating system on top of it.

  • COLTON OGDEN: And they're saying, "David sure is fun."

  • DAVID MALAN: Oh, nice.

  • COLTON OGDEN: So we're going to get all the views today.

  • "Left looks like hosted VM and the right is a type one VM,"

  • is what For Sunlight said on the screen there.

  • "I'm trying to see CS50 offline, but it needs Docker.

  • Could you at some point this video explain?"

  • DAVID MALAN: That's a perfect segue way, actually.

  • Let me-- just so folks can play along at home, if you would like,

  • I'm not sure Colton and I alone can provide technical support

  • for everyone who wants to try this.

  • But if you Google "Docker download," odds are that will lead you to this

  • page, Docker.com/get-started, and it's actually pretty straightforward to get

  • Docker up and running on your machine.

  • So what we did in advance of today is--

  • I'm using a Mac right now.

  • You can click on "Download for Mac."

  • That's going to take you to a longer, harder to pronounce URL.

  • And if you scroll down here, you'll see a number

  • of different versions of Docker, for instance, Docker Desktop,

  • and you can scroll through.

  • Follow these instructions here and actually go

  • about getting this up and running on your own Mac.

  • And it looks like--

  • let's see here.

  • Looks like they're going to make you download--

  • you've got a log in these days, because they want to get your email address.

  • Then you can go ahead and download Docker for Windows, or Mac OS,

  • or Linux for free.

  • So feel free to do that behind the scenes if you'd like to play.

  • COLTON OGDEN: Cool, cool, awesome.

  • You can use Windows Education if you can get that through school--

  • talking about Windows.

  • "If you use Windows, you need the Pro version of Windows."

  • DAVID MALAN: Oh, maybe.

  • COLTON OGDEN: Does that have anything to do with CPU virtualization?

  • I know that's something that--

  • DAVID MALAN: No, it probably has to do with licensing, honestly, and charging

  • more for the fancier support.

  • COLTON OGDEN: I know Windows Education is very, very generous.

  • "Windows Education is greater than Windows Pro."

  • "Is Docker used for web apps?" says Adamantine Bipartite.

  • DAVID MALAN: It can be.

  • Docker is agnostic to what you do with it,

  • which means that you can run any type of software inside of a container,

  • inside of Docker, which is the very specific product we're talking about.

  • So yes, in fact, all of--

  • is this true still?

  • I think every one of CS50's web apps is in fact "Dockerized" or "containerized"

  • to say it more generically.

  • So, yes.

  • COLTON OGDEN: And then we have some other apps that are not web apps.

  • Is check50 in Docker?

  • DAVID MALAN: check50 is also Dockerized, yeah.

  • COLTON OGDEN: That's the CLA.

  • Oh, and do we want to point people to the CS50 docs?

  • Do we have a CS50 docs report?

  • DAVID MALAN: Sure, let me pull that up.

  • So I'll zoom in on this URL.

  • If anyone wants to see some of CS50's own documentation,

  • you can go to CS50.readthedocs.com.

  • COLTON OGDEN: I plugged it in the--

  • DAVID MALAN: Nice, Colton just pasted it into the chat.

  • And you'll see documentation for all of our stuff related to Docker and more.

  • And in fact, I'll pull these up very specifically soon,

  • but someone mentioned the offline IDE earlier.

  • If I go ahead and scroll down to--

  • let's see here--

  • CS50 IDE at the bottom, you'll see a mention of offline,

  • and these instructions will walk you through the process

  • of starting to get your own IDE up and running locally.

  • To be fair, there's a little bit of complexity,

  • and I definitely plan to get more comfortable with Docker

  • as you do that, because you can do quite a few more things with it as well.

  • COLTON OGDEN: [INAUDIBLE] a server on it.

  • "Is it better installing Docker to a dedicated server

  • or using a CLOD instance, which is a VM, also like more layer?

  • What would be better in the context of performance?"

  • DAVID MALAN: Oh, anything running on bare metal,

  • so to speak, without a virtual machine, is

  • going to give you somewhat better performance, because you've

  • got to pay some price for having the virtualization.

  • With that said, it's a little annoying to install thing on bare metal,

  • so to speak, these days, because if something goes wrong

  • or you want to reinstall, you have to wipe the whole thing.

  • Whereas, installing things on a VM isolates it from everything else.

  • So it really depends on your own.

  • I would not be worrying about performance just yet.

  • If you're just trying to learn Docker and you want to experiment,

  • do what is easiest.

  • And honestly, do it on your own Mac or PC,

  • assuming the hardware in your version of the OS will support it.

  • COLTON OGDEN: "Docker is a PaaS or IaaS?

  • DAVID MALAN: Docker enables IaaS, which is a funny acronym these days

  • for infrastructure-as-a-service.

  • These are things like AWS, Amazon Web Services, or Microsoft

  • Azure, and Google Compute Cloud, but it really

  • is a piece of software you can use on your infrastructure

  • so as to do anything higher level.

  • Platform-as-a-service is something like Heroku.

  • Docker is not a web application like Heroku is.

  • It's lower level, so it's related more to IaaS.

  • COLTON OGDEN: And then, "Would Docker containers

  • be a similar concept to Ubuntu Snap?"

  • DAVID MALAN: Sort of.

  • I don't know too much about Ubuntu Snap.

  • We're still just using app to get install and such on our setup.

  • But my understanding of Snaps is that it's a cleaner way

  • to distribute individual software packages.

  • Correct me if I'm wrong.

  • Docker and containerization more generally

  • is about containerizing an entire operating system and everything

  • therein.

  • So it's probably fair to say that Docker is a bigger product.

  • Whereas, Snaps, I think, are more isolated to individual client side

  • app--

  • well, not even client side, individual pieces of software.

  • Containers give you a whole environment.

  • COLTON OGDEN: I think we're all caught up on all the questions

  • here if you want to maybe start diving into some documents.

  • DAVID MALAN: Yeah, absolutely.

  • So let's go ahead here and let's get started.

  • So here, again, on Docker.com/getstarted is where you can probably download this

  • for yourself if you would like to play along.

  • But I think it's perhaps most fun if we just dive in by way of example,

  • see what's going on, and then actually understand hopefully

  • how we built these various tools.

  • COLTON OGDEN: Sure.

  • DAVID MALAN: With CS50, we have a few different use cases for Docker.

  • We run all of our web apps using Docker in the following way.

  • We write our web app locally on our Mac or PC.

  • We push our code to a GitHub repository or any repository.

  • We then automatically build the code installing anything we want,

  • but we do this by way of what's called a "Dockerfile."

  • It's just a text file, which is a configuration file, that just specifies

  • line by line what pieces of software do you want this application to need,

  • and therefore install for you.

  • So why don't we go ahead and take a look.

  • Why don't we go ahead and open up a terminal window

  • here, and I've gotten another one ready to go when we get to another topic too.

  • And I'm going to go ahead and run Vim, which is a command line text

  • editor here.

  • And I'm going to go ahead and open up a file called Dockerfile.

  • Actually, let's do this.

  • Let me go ahead and make a directory called Twitch

  • just so that we have somewhere to work.

  • I'm going to go ahead and now run Vim on Dockerfile.

  • So I've just got an empty file in which I can do really anything I want now.

  • Now, you would only know the syntax for Docker

  • if you actually read the documentation or followed along here at home,

  • and I'm going to go ahead and say something like, "From Ubuntu 18.04."

  • From, I've capitalized.

  • That's a Docker command.

  • Ubuntu is the name of a Docker image, a snapshot in time

  • of some base installation of Ubuntu.

  • And the colon 18.04 means that's the specific tag.

  • So Canonical, the company that makes Ubuntu and the whole ecosystem

  • out there that uses Linux, installed for us into a file Ubuntu

  • with a whole bunch of packages and specifically tagged it,

  • this is a release 18.04.

  • What that means is that my own application, whatever

  • it is I'm building here, is going to be based on Ubuntu 18.04.

  • So let's go ahead and run Docker and see what happens.

  • If I go ahead first and run Docker and type PS,

  • I'll see all of the containers that are running on my Mac, which at the moment

  • are none.

  • I don't actually see anything.

  • Docker itself is running.

  • On Mac OS, I can see this here with the logo in the top.

  • And this is where the menu is, and you can see Docker Desktop is running.

  • If you're on Windows or Linux, your menu is going to look different.

  • It's going to be somewhere different altogether,

  • but the fact that it's running is a good thing and that's

  • why I was able to run Docker PS.

  • It queries the underlying server software.

  • I'm going to go ahead now and say go ahead and Docker run a specific image,

  • and I'm going to go ahead and-- actually, no, sorry.

  • I'm going to go ahead and build my current image

  • and say go ahead and build this thing here called

  • dot, which is my current directory.

  • COLTON OGDEN: This is in the Twitch folder.

  • DAVID MALAN: This is in my Twitch folder.

  • So there's really nothing interesting going on here yet,

  • because all that file had, the Dockerfile, was that one line.

  • But notice what happened.

  • So as soon as I ran that step one of one was from Ubuntu 18.04,

  • Docker went ahead and pulled, so to speak, from its library of free images

  • and installation of Ubuntu.

  • That image happens to be broken down, and you only

  • know this by looking at the results, into four layers, so to speak.

  • I mentioned a union file system before, so odds

  • are one of these layers is like the very first pieces of software

  • that are installed by Ubuntu.

  • The next layer, it goes on top of that, then the third, then the fourth,

  • and each of those has additional packages or files most likely.

  • COLTON OGDEN: Would it be accurate to say one of the first two layers

  • would be like the kernel of the operating system?

  • DAVID MALAN: Yeah, most likely.

  • COLTON OGDEN: And that's probably or less the same amongst--

  • well, I don't know if it'd be the same amongst versions of Ubuntu.

  • DAVID MALAN: It depends.

  • We'll see a bit more of this when I add to the Dockerfile in just a moment.

  • We'll see exactly what each of these lines corresponds to.

  • So this is just the SHA-256 hash, which is like a big seemingly random string

  • that uniquely identifies this version of the image.

  • You'll see that my status was successful.

  • It downloaded a newer image, because I didn't have any for Ubuntu 18.04,

  • and it successfully built this hash.

  • So these are the last, what, 10 or 12 characters of a longer SHA-256

  • hash that uniquely represents now my application.

  • I'm in a Twitch folder.

  • If I type LS, the only file I have is Dockerfile.

  • So I've got nothing interesting in this folder yet,

  • but I now have a unique image that I can now run.

  • So I am on Mac OS.

  • Let's see if we can see this.

  • If I do you name, you'll see that I'm running Darwin,

  • which is the code name for Mac OS.

  • If, though, I do Dockerrun-IT--

  • and I'll come back to some of the command line arguments later,

  • that particular unique identifier.

  • Well, let's cross our fingers, and oh my god, I now am inside of Linux

  • running on my Mac.

  • Now, I feign surprise.

  • I kind of knew or hoped that would happen, but indeed, if I type LS now,

  • you'll see a whole bunch of folders that are not on your Mac or your own PC.

  • They are now local to this container.

  • And so curiously, excuse me, I seem to have this base in the Linux file

  • system, but you can actually mount files from your own Mac

  • inside of this container.

  • So let me take a step back.

  • I'm going to go ahead and do I think Exit, which gets me out of that.

  • Now, if I type you name I'm back in Mac OS.

  • And if I type LS now, there's my Dockerfile and none

  • of those blue folders are actually there.

  • But if I do this, and I'm going to have to remember the syntax,

  • if I do Dockerrun-IT-v.: let's say MNT for mount--

  • don't quote me on this just yet-- and then paste in that image.

  • Nope, volume name is too short.

  • Let's see.

  • No, maybe it's capital V?

  • Nope.

  • Dockerrun, OK, we're going to run Dockerrunhelp to see how to mount.

  • Volume, find and mount a volume, mount directory--

  • David's blanking on how to do this properly.

  • Let's go ahead here and do this once more.

  • Dockermount-- damn it.

  • No.

  • COLTON OGDEN: That's part of the fun of the live coding stuff.

  • DAVID MALAN: Yeah, this is not what I wanted to do.

  • Volume name is too short.

  • OK, so here, folks, we're going to do Dockermountdirectory,

  • since I have essentially aliases for all of these things.

  • Yeah, -v. That's what I want to do.

  • So here, folks, we're going to introduce you to a website called Stack Overflow.

  • That's what I wanted to do.

  • Oh, I might need to do a fully qualified path.

  • No, let's try this again.

  • Sorry, folks.

  • COLTON OGDEN: Oh, so Adamantine Bipartite, Elasura, and Gigantorex911,

  • thank you very much for following, appreciate it.

  • DAVID MALAN: Oh, very welcome.

  • So let me go ahead and try this--

  • Dockerrun-v/mount and now -IT, and then this image.

  • COLTON OGDEN: Nice.

  • DAVID MALAN: I'm sorry.

  • It's just I think I needed the fully qualified path and not the dot,

  • so that's just me being stupid.

  • Apologies.

  • So now, what does this actually mean?

  • If I type LS, because I'm now back inside of that Linux environment,

  • all seems to be fine.

  • But if I go into this MNT directory, which

  • is a Linux convention for a folder in which you can mount stuff-- a CD,

  • a hard drive, a folder, or whatever-- and type LS now,

  • you'll see that that file from my Mac is inside of the container.

  • COLTON OGDEN: That's pretty cool.

  • DAVID MALAN: Which is neat, because now I can use Linux on my Mac

  • but still access my files, any of my Mac actual files.

  • COLTON OGDEN: Yeah, that's a nice thing that some VMs have a little bit

  • of issue with sometimes too.

  • DAVID MALAN: Yeah, and now funny enough, let's try this.

  • Now I'm inside of Linux.

  • I'm going to go ahead and run Vim.

  • And uh-oh, what happened to my Vim?

  • COLTON OGDEN: Yeah, I guess it's not a default

  • program in Ubuntu, at least 18.04.

  • DAVID MALAN: Yeah, exactly.

  • It doesn't seem to come with at least the base image

  • that the folks out there have created for folks to use with Docker.

  • So on Linux, if you're unfamiliar, you can do apt-get install and then

  • something like Vim to install software.

  • Unfortunately, it doesn't even have the cache of local packages,

  • so in this world, you do apt-get update and that should now

  • download from Ubuntu's web servers or CDN

  • and all of the latest indexes of the software that's available.

  • COLTON OGDEN: So like a DNS server almost?

  • DAVID MALAN: Not so much DNS.

  • It's a package manager, apt, and it's--

  • COLTON OGDEN: Because it almost puts a DNS on your machine

  • that then allows you to get your package using a name sort of, maybe?

  • DAVID MALAN: I wouldn't conflate it with DNS, honestly,

  • because I think it goes a little too low level.

  • This is like Windows Update or the app store,

  • just checking what the latest software is, honestly, that's available.

  • So now if I do apt-get install Vim, you're

  • going to see a whole bunch of crazy messages,

  • because Vim needs all these dependencies.

  • Do I want to continue?

  • Sure.

  • I'll type y for yes, hit Enter, and now inside

  • of this Linux container inside of Docker,

  • I now have just installed software.

  • I'm going to go ahead and clear my screen just

  • to get rid of this distraction, and I'm going to go ahead and do Vim now,

  • and viola, now I'm running Vim.

  • COLTON OGDEN: Nice.

  • DAVID MALAN: But notice this.

  • If I hit Escape and quit out of Vim, which itself is kind of a feat

  • sometimes, and now I go ahead and Exit out of the container,

  • rerun the container, and run Vim, it's gone.

  • COLTON OGDEN: So it's ephemeral.

  • DAVID MALAN: It is, at least in the way we've configured Docker.

  • Now I have a pristine, clean environment.

  • COLTON OGDEN: Interesting.

  • DAVID MALAN: Both a good thing and a bad thing.

  • If you want it to be isolated from everything else,

  • you now have a deterministic starting point.

  • Bad in that, oh my god, that just took like two minutes.

  • Now I have to do it all again.

  • So how do we do it again?

  • Well, let me actually exit out of Docker, and in Mac OS--

  • just to be clear, here's Darwin--

  • I'm going to run Vim, which is already installed by Apple for me on my Mac.

  • I'm going to open that Dockerfile, and now we're

  • going to create another layer.

  • So this From command gives me a base layer with all the default Ubuntu

  • software.

  • Now I can go ahead and do this, run apt-get install Vim,

  • but I need to be a little smart about this, but not yet.

  • Save it.

  • Now I'm going to do Dockerbuild.

  • To build my current directory, and you'll

  • see "unable to locate package Vim."

  • COLTON OGDEN: Do you have to do the apt-get update first in here as well?

  • DAVID MALAN: Yeah, exactly.

  • So we'll see that this return to nonzero code.

  • Like my build of my container didn't work,

  • so I'm going to go ahead and open that Dockerfile again.

  • And I'm going to do apt-getupdate, and then run apt-getinstallVim.

  • COLTON OGDEN: Can you do like a semicolon

  • space and then apt-getinstallVim or will that work or something?

  • DAVID MALAN: You can.

  • So let's come back to that, because I specifically

  • want to see these two runs for just a moment.

  • COLTON OGDEN: Sure, OK.

  • DAVID MALAN: So now I'm going to go ahead and save that.

  • Let's clear the screen and rerun Dockerbuild.--

  • cross our fingers.

  • You'll see it's doing more work when you build the container now,

  • and you only have to build your containers once.

  • Unfortunately, it failed again.

  • COLTON OGDEN: Because it looks like it's asking for a yes or no

  • and I don't know how it would know how to get that input.

  • DAVID MALAN: Yeah, exactly.

  • This is meant to be an automated process,

  • and yet here I am just expecting it to know yes from no.

  • So it turns out-- you would only know this by reading the documentation

  • or the man page--

  • if you actually say dash y you can proactively say just

  • say yes to any questions that get asked.

  • So let's go ahead and save this, clear the screen, Dockerbuild.

  • And now notice what it didn't have to do a moment ago.

  • Notice that it's immediately trying to install Vim,

  • but notice that on this line, runapt-getupdate, it's

  • using the cache this time.

  • And that cache has a unique hash identifier, which means all of that

  • work we did last time we do not have to do again

  • because we baked it into a layer.

  • COLTON OGDEN: So some stuff will be ephemeral

  • and some stuff will sort of be saved?

  • DAVID MALAN: Exactly.

  • Anything you put in your Dockerfile will persist by way of the file

  • system layers you are effectively creating.

  • Let's go down to the bottom and you'll see successfully built.

  • And all the stuff above refers to Vim having been installed.

  • Now, this unique identifier is different from before.

  • The other one, I don't think, started with F9.

  • So now this is a new image on my Mac.

  • So I'm going to do-- if I can get this right, forget the directory--

  • Dockerrun-v for volume, userjharvardtwitch:mount--

  • but you can mount it anywhere inside of Linux if you want--

  • -IT-- for reasons we'll come back to--

  • and then this new hash.

  • Enter.

  • I seem to be inside of the root account of Linux.

  • Indeed, I am.

  • Now, let's go ahead and run Vim and it's there.

  • COLTON OGDEN: It's preinstalled, that's cool.

  • DAVID MALAN: And now if I quit, exit out of the container, rerun the container,

  • top random again, now it's persisting.

  • COLTON OGDEN: Nice, solved that problem.

  • DAVID MALAN: Indeed.

  • COLTON OGDEN: I'm assuming we can do a lot more complicated stuff than install

  • Vim.

  • DAVID MALAN: Yes, you can build entire applications, but notice this.

  • Suppose now that I didn't quite appreciate what I was doing

  • and I did Dockerbuild.

  • Oh, maybe I need to build my image every time.

  • Uh-uh.

  • Notice, but done.

  • COLTON OGDEN: It's all cache, because it was in the Dockerfile.

  • DAVID MALAN: Exactly, and you can see here

  • that every time we had a run command--

  • step one, step two, step three--

  • we got a new identifier for that layer.

  • And so every one of these run commands or in a few others in Dockerfiles,

  • gives you a new layer that just keeps getting layered on top, and top,

  • and top.

  • COLTON OGDEN: Would you want to ever make

  • those changes not persistent, for example,

  • maybe it fetches remotely a library that could change day to day?

  • DAVID MALAN: Yeah.

  • Short answer, yes.

  • And the best way to explain that--

  • how best to do that?

  • COLTON OGDEN: If it's too complicated, we don't have to.

  • DAVID MALAN: No, no, you can.

  • Let me show-- let me give a teaser of something.

  • We'll perhaps see a bit more later.

  • Implicit in a Dockerfile is this last line here,

  • and I might be getting the specifics a little off.

  • Is essentially this-- command bash.

  • So by default, if you don't specify a command,

  • the Docker container is just going to spawn

  • bash, which is a shell that is an interactive prompt for you.

  • You can override that.

  • So you could do something like, by the way, at the very last minute,

  • do apt-getinstall-yFoo to make sure you have the very latest version of Foo,

  • and then go ahead and run bash.

  • That would be one work around to that that comes to mind.

  • COLTON OGDEN: Interesting.

  • DAVID MALAN: Indeed.

  • COLTON OGDEN: Let's make sure we didn't miss any--

  • DAVID MALAN: Yeah, let's catch up on any questions.

  • COLTON OGDEN: That was really good though.

  • DAVID MALAN: Thank you.

  • COLTON OGDEN: We have a bunch of stuff up here.

  • We're just trying to figure out where we left off.

  • I think this is roughly where we left off.

  • "So are LXC containers something similar to Docker Container?"

  • DAVID MALAN: Yeah, LXC is just another approach to containerization.

  • It's not Docker, it's just a different technology,

  • but that too is quite popular.

  • COLTON OGDEN: Sigmund Penney is saying "LXC is paravirtualization,

  • if I'm not wrong."

  • And that's a word that I've never seen before.

  • DAVID MALAN: Yeah, there's some differences,

  • and I'm not good at appreciating the differences here.

  • I think, frankly, Docker has a really nice and user-friendly ecosystem, which

  • is just why I personally gravitated toward it early on.

  • COLTON OGDEN: ZB is saying, "If you're an Inception fan,

  • you can install Linux Subsystem for Windows, and then add Docker to that."

  • DAVID MALAN: That's right.

  • And then you can run Windows, and Linux on top of it, and Linux on top of,

  • inside of that, and even Linux inside of the Linux in Linux,

  • but you have to start hacking around to make that possible.

  • COLTON OGDEN: And then your computer will just not function.

  • DAVID MALAN: Yeah, just that's bad.

  • No need to add too much overhead here.

  • COLTON OGDEN: Blah, blah, blah.

  • They were saying, "no problem."

  • I think you were apologizing when you had--

  • DAVID MALAN: Well, no.

  • Let me scroll up here.

  • COLTON OGDEN: Oh, I'm sorry.

  • DAVID MALAN: The blah, blah comment.

  • Docker volume create-- I didn't want to create a volume.

  • To be clear, I wanted to mount an existing directory on my existing Mac

  • into the container.

  • But that is another way--

  • maybe you're actually responding to the other goal.

  • You can create persistent volume so that everything in /temp, or /userlocal,

  • or whatnot actually does persist on your Mac and gets remounted every time.

  • COLTON OGDEN: Several times I've seen that.

  • "The first few lines for running Linux."

  • DAVID MALAN: Yeah, indeed.

  • COLTON OGDEN: "Use nano, fi is the default."

  • DAVID MALAN: We could try it.

  • Wait, here we're getting-- try Nando.

  • Sure, we'll try this.

  • So I want to go ahead and just run Dockerrun again

  • with this command, nano.

  • I'm sorry, it's not installed.

  • VI now is, because it came with Vim.

  • COLTON OGDEN: Does it have--

  • does Linux Ubuntu have any editors that come with it by default?

  • DAVID MALAN: Well, it depends what you mean.

  • Distributions of Ubuntu-- distributions of Linux come with different packages.

  • COLTON OGDEN: I guess it's layer then is what I--

  • I guess more technically?

  • DAVID MALAN: So short answer, no, and let me pull this up in just a second.

  • The image that's made available by Canonical or whoever for Docker

  • is by design super, super small.

  • Honestly, if you have a server side environment, the goal of which

  • is to isolate the app from every other, no human

  • should really be SSHing into that container

  • and doing anything with a text editor.

  • To be fair, probably every one of us, if you--

  • [INAUDIBLE] have done this before.

  • But you're just wasting bytes and megabytes,

  • and just by installing Vim, my god, you're

  • slowing down the build for your server side application.

  • Probably doesn't need to be there by default.

  • That's all that's going on here.

  • COLTON OGDEN: It makes sense.

  • DAVID MALAN: If you download and install Ubuntu on a CD, you're in ISO,

  • then odds are it, yes, has a text editor.

  • COLTON OGDEN: I think Adamantine Bipartite

  • was saying, way up above, that they were doing all this CS50x stuff.

  • They're working on the final project.

  • So that's pretty exciting.

  • DAVID MALAN: Nice.

  • COLTON OGDEN: And then someone else was saying that they were--

  • DAVID MALAN: Almost there.

  • [INTERPOSING VOICES]

  • DAVID MALAN: Catching up, good.

  • COLTON OGDEN: "Probably the hardest one," says Adamantine.

  • He's referring to Pset5.

  • They're saying, "Just a package manager was apt-get."

  • "Can we see the GUI in Docker?" says For Sunlight.

  • DAVID MALAN: There isn't really a GUI here.

  • You could certainly run in Docker an operating system

  • that then has a Window Manager, like Xfce

  • or something else with Gnome or something on top of it.

  • I don't have an X server installed.

  • So even though we could install all that requisite software,

  • I couldn't-- without wasting some time--

  • pull up an actual GUI, but you could do it.

  • But for the most part, Docker is not about giving you a pretty user

  • interface.

  • It's about giving you an isolated installation of some OS and some app.

  • COLTON OGDEN: "VI versus Vim, I don't know the difference."

  • I'm guessing they're just version differences probably?

  • DAVID MALAN: Vim is VI improved.

  • So it's like the new and improved version of VI.

  • And mostly, they're--

  • VI is typically alias effectively to VIM,

  • so you wouldn't notice the difference anyway these days.

  • COLTON OGDEN: Devin is saying Neovim is Vim.

  • More--

  • DAVID MALAN: More [LAUGHS].

  • COLTON OGDEN: A person like VS coder, Adam, [INAUDIBLE] from the Netherlands.

  • DAVID MALAN: OK, we're getting a little distracted by text editor debates here.

  • COLTON OGDEN: Oh, I think Soupman was saying

  • you don't want to separate the commands into two layers,

  • referring to there are two run commands--

  • DAVID MALAN: Yeah, and that's actually true.

  • And I mentioned this earlier when you proposed as much.

  • If I go back into my Dockerfile, I probably

  • don't want to decouple the updating of my sources list from the installation,

  • because those really should be happening both together,

  • so that when I've updated the list, I'm installing based on that list.

  • So I'm actually going to pull this up onto the first line

  • and do something like and, and.

  • This is better than typically doing something like this, because and, and--

  • these are two separate commands.

  • And, and it's going to ensure logically that this whole line will only

  • succeed if both the left command and the right command succeed from me.

  • COLTON OGDEN: Oh, it's like short circuit

  • logic in programming, same thing.

  • DAVID MALAN: Yeah, exactly.

  • So this would be a better way.

  • And it also creates one layer, couches the layer

  • itself is going to be a little bigger.

  • But for installation of software, that tends to be the best practice.

  • COLTON OGDEN: "Streams more users than a super stream."

  • Cool, that's good.

  • The educational content is successful.

  • DAVID MALAN: I don't know.

  • I kind of miss playing Mario Brothers.

  • I thought we were playing Excite Bite today.

  • I was led to believe that.

  • COLTON OGDEN: Yeah, that's like the old carrot on a stick.

  • "I finished spellcheck today.

  • I think it's just examining your programming way of thinking.

  • Nice Pset--

  • DAVID MALAN: Nice, congrats.

  • What was that one up here?

  • "I personally--"

  • COLTON OGDEN: I personally struggled a lot with recover.

  • Took a break.

  • DAVID MALAN: Oh, C Primer Plus book.

  • Oh, nice.

  • So you finished Speller.

  • That's pretty quick actually, that's great.

  • COLTON OGDEN: "You want to show off how layers work?"

  • says Sigmund Penny I think.

  • Maybe one of the next things to talk about?

  • Or the entry point.

  • DAVID MALAN: Entry point, yeah, that's actually a step before the command.

  • COLTON OGDEN: And I think you read off this question.

  • DAVID MALAN: Yeah, we did that.

  • COLTON OGDEN: Can we access the container?

  • DAVID MALAN: Hi, from Peru.

  • HI, FROM THE US in all caps.

  • Hello.

  • COLTON OGDEN: Diggivolts, "I just installed an Ubuntu

  • VM using VMware on my machine.

  • Should I have used Docker instead?

  • DAVID MALAN: Good question.

  • So just to read it a little more slowly.

  • "David, I just installed an Ubuntu VM using VMware on my machine.

  • Should I have used Docker instead?"

  • It depends.

  • If you just want to have Ubuntu available to you

  • and persist all of its state and just be like a locally installed operating

  • system, no, the VM is perfectly fine.

  • That's what we used to do back in the day.

  • With that said, I personally have transitioned

  • to using containers for everything.

  • They start nearly instantly. , Whereas, a pain in the neck years ago to run

  • VirtualBox or VMware on my own Mac or PC.

  • So there's less overhead with Docker, which is super, super compelling.

  • And in fact, in a little bit I think we can demo a tool that CS50 built called

  • CS50CLI, Command Line Interface, which, Adam, is perhaps the solution

  • to your problem or your interest there.

  • Whereby, we can just run a command, CLI50 enter, and voila,

  • you're running Linux within a split second on your Mac.

  • And I go in and out of Linux all the time on my Mac thanks to that tool.

  • COLTON OGDEN: And are you--

  • you're typically doing most of your actual development in Mac

  • probably, right?

  • DAVID MALAN: On a Mac using Linux, yeah.

  • Honestly, and why?

  • Let me-- why, someone asks on there.

  • I like Macs in terms of the user interface.

  • They're just pleasant to use.

  • It talks to your iPhones and whatever other devices you have,

  • so it's kind of a nice environment.

  • The hardware is great, but all of our software runs on Linux.

  • I prefer the Linux environment.

  • I'm not such a fan of Darwin just because of conventions that they have.

  • And so you kind of get the best of both worlds this way.

  • I still use my own terminal window on the Mac,

  • but inside that window is Linux.

  • So David the human uses Macs, and David the programmer uses Linux.

  • COLTON OGDEN: So you're not as inclined to use

  • a VM to get the Ubuntu interface as much, because you have the Mac

  • interface?

  • But the actual development--

  • DAVID MALAN: Yeah, I don't care about--

  • COLTON OGDEN: --actual development without needing

  • all the overhead of a full VM?

  • DAVID MALAN: Yeah, I don't care for Gnome

  • or any of the other window managers.

  • They just don't solve any problems that Mac OS doesn't.

  • COLTON OGDEN: "How do you edit your sources.lists without an editor

  • to install an editor?"

  • DAVID MALAN: Oh, without an editor?

  • So theoretically, you should not have to update sources.lists,

  • because by default from Ubuntu you should have a list of all of the URLs

  • via which you can get the standard distribution of Ubuntu software.

  • So apt-getupdate should update your cache of URLs essentially,

  • and of package names, and versions.

  • An apt-getinstall will then install those.

  • You're only in a bind if you have no text editor

  • and you want to install third party text editor that's

  • in some other repository for which you have

  • to edit your sources.lists file, in which case

  • the easiest approach is just install Vim, or nano, or Emacs,

  • or whatever from the standard repository and then go and edit the file.

  • But honestly, if you're comfy with Linux,

  • or learn a bit more about Linux command lines,

  • or really this is bash command lines, you can do something like--

  • let me go back into the VM.

  • KAT@capt-- what is it-- sources.D?

  • No.

  • Sources.lists?

  • Yeah, here it is.

  • So here's a line for--

  • let's not do the security line.

  • Let's do the more generic one up top.

  • So all of these lines here just refer to where can you get

  • from Ubuntu's archives more software.

  • You could do something like this, echo this string onto--

  • this is the append operator-- the end of @captapt--

  • what did I call it-- sources.list and hit Enter,

  • and that would concatenate onto the end of the file exactly that string.

  • And with very, very high probability will something

  • like echo or KAT be installed, because they're either built into bash

  • or they're part of the core utilities that are installed.

  • COLTON OGDEN: Looks like Sigmund has a very similar suggestion here.

  • "Small Linux version named Alpine, which docked like five megabytes,

  • if I don't remember incorrectly."

  • Alpine Linux, are you familiar?

  • DAVID MALAN: Yeah, I know a little bit about it.

  • Five megabyte-- yeah.

  • No, there's super small distributions of Linux.

  • We have not bothered with that, because, frankly, we want access

  • to some of the more popular packages.

  • And honestly, Debian and Ubuntu just have so much momentum these days

  • that anytime software comes out for Linux it's almost always packaged

  • for the deb format, so we just use that and the whole ecosystem

  • that comes with it.

  • So we actually pay the price of bigger images,

  • but it just makes our lives easier.

  • We don't have to compile software from source just to get it up and running.

  • COLTON OGDEN: True.

  • Totilla Worthing, "Main advantage of Docker,

  • it compartmentalizes what runs on it separately as contrasted

  • with the heavier overhead of a VM."

  • DAVID MALAN: Yeah, absolutely.

  • Yeah it's-- yes, much, much less overhead, which is pleasant.

  • COLTON OGDEN: Lilia Viavaras, who I believe is on Facebook is joining us.

  • DAVID MALAN: Hello.

  • COLTON OGDEN: This is the first time she's joined us on Twitch, so hello,

  • Lilia.

  • DAVID MALAN: Welcome aboard.

  • COLTON OGDEN: Good to have you.

  • DAVID MALAN: Yeah, exactly.

  • So this commenter here, Sigmund, "Alpine is very small, yes,

  • but it does not contain glibc I think."

  • I'm not sure about that, but I believe you.

  • "And a lot of the regular Linux software is not supported."

  • Absolutely on that last point, for sure.

  • COLTON OGDEN: GX Evolves, "Does Harvard provide lecture videos

  • for all of their CS courses?"

  • DAVID MALAN: Not all, no.

  • Relatively few are online.

  • Harvard's Extension School does provide some others.

  • If you want type maybe www.extension.harvard.edu,

  • but there is tuition for those courses.

  • There's relatively few free courses available at the moment

  • via Open Courseware for free.

  • COLTON OGDEN: Neils has to say, "You're famous.

  • Thanks for your passion."

  • DAVID MALAN: Oh, that could be about you.

  • COLTON OGDEN: I think that's about you.

  • "The whole school isn't free," which Adamantine

  • was saying, which is that what you just said about the extension stuff.

  • "You're the guy who lectured about scalability-- love that video."

  • DAVID MALAN: Oh, nice.

  • I like that one too.

  • And let's check out CS75.

  • Yeah, 75 and 76 are getting a little old, to be honest,

  • but I would certainly check out-- if you go to ed--

  • actually, can I type a URL here too?

  • COLTON OGDEN: Yeah, sure.

  • DAVID MALAN: So if you go to edx.org/CS50,

  • you can see all of CS50's currently available sites and see

  • what's available for free there.

  • So just getting us set up for the next bit.

  • So should we actually transition maybe to CLI50, partly for Adam's sake,

  • for instance.

  • COLTON OGDEN: Yeah, sure, let's do that.

  • DAVID MALAN: So if anyone wants to play around

  • with something that's a little more accessible perhaps,

  • let me suggest that you go back to CS50's

  • documentation, CS50.readthedocs.io.

  • And if you look at the menu for CLI50, command line interface 50,

  • this is just a Python script really that we

  • wrote that makes it easier to run Docker commands.

  • And honestly, this is why I forgot how to run the command before,

  • because I always use this, which to be fair, I wrote.

  • So I knew it at one point, just not 20 minutes ago.

  • So here, if you follow these instructions,

  • you can install CLI50 yourself, but per the documentation here,

  • step one and two, you're going to want to install Docker first

  • and Python 3.6, because both of those are dependencies of CLI50.

  • But what I love about this tool, if I may say so myself,

  • is that we use it all the time to actually develop

  • software and work in a Linux environment with, honestly,

  • without having to type these crazy long commands that clearly I can't remember.

  • So I just run CLI50 anytime I want to run a Linux environment, and viola.

  • There's a little more output here, because what's going on?

  • You'll see that, one, by default, it's using

  • the latest tab called "latest," which is the Docker convention,

  • pulling from CS50CLI.

  • You don't have to name your images using weird hashes.

  • You can give them more descriptive names.

  • So our image is called CS50/CLI, and I'll pull that up in a web browser

  • soon.

  • Here's my crazy long hash for it.

  • It doesn't have to pull anything, because it's up to date,

  • because I got my laptop ready before the screen.

  • There's some port mapping going on here.

  • We very often do web development inside containers,

  • and I want to make sure that inside my container, if I have a web server,

  • it's accessible on my Mac or PC.

  • So these are port mapping.

  • So if I have a server running inside the container on 8080TCP,

  • I mapped it pseudo-randomly to 32,773, and then I

  • can actually have multiple web apps on my Mac

  • all running on port 8080 inside the containers, but exposed, so to speak,

  • to my Mac on different ports, which is great for development purposes.

  • COLTON OGDEN: Which is pretty cool, yeah because then you

  • can test within your Mac.

  • You don't have to worry about testing within the Linux environment.

  • DAVID MALAN: Yeah, exactly.

  • You'll see one of the first features we made was a print out this string.

  • This is CS50CLI.

  • I also changed the default directory in CS50CLI, and changed the prompt a bit,

  • and we preinstalled a lot of software in advance

  • so that it's all just readily available to you among the Vim here.

  • So why don't we see fast forward now.

  • Let me show you the Dockerfile for CS50CLI.

  • COLTON OGDEN: Sure, let's take a look at it.

  • DAVID MALAN: So all of these images are freely available,

  • as is Docker, and Python, and everything else we've been talking about.

  • If I go to--

  • let me find my image--

  • Docker Hub, so if you've go to hub.docker.com/r, for repository,

  • /CS50, you'll see all of CS50's free Docker images.

  • And if you pick the one called CLI, you'll see this interface here.

  • There's not too much you can do on Docker Hub

  • other than see what images are available.

  • But what's cool is that here you can actually see

  • the Dockerfile we made for this image.

  • Now, it's a little cryptic-looking and we

  • don't have to go all into the details, because a lot of this

  • is just Linux stuff, not Docker stuff, but you'll see the following,

  • "This image does not inherit from the Ubuntu image."

  • It actually inherits from a parent image CS50

  • makes called "base image," which is a generic layer we

  • use across all of our images.

  • More on that in a moment.

  • User and arg, these are just lower level details.

  • Let me wave my hand at them for now.

  • Expose is relevant though.

  • This is saying go ahead and expose those three ports to the outside Mac or PC,

  • just like Cloud 9 on which CS50IDE is based,

  • so that we can mimic CS50IDE on our Macs and PC.

  • By default, so just like an Alpine, not all software

  • comes by default, same on the Ubuntu Docker image.

  • You don't even get the man pages by default,

  • because they're blacklisted to save space.

  • That's not good for us pedagogically, so we go in and put them back,

  • essentially, by way of this line by unexcluding something

  • that was excluded.

  • So now we're doing some really funky stuff

  • here using some Linux commands to make sure that we are reinstalling them.

  • This is a little more obvious.

  • Here we have now a run line that spans multiple lines in Linux.

  • If you do a backslash and then hit enter,

  • it's not going to move you to the next command.

  • It's going to let you finish your thought on the next line.

  • So all those backslashes just mean this is a really long apt-getinstall line.

  • And you'll see-- there it is--

  • Vim and dozens of other programs that we, or a couple

  • dozen other programs, that we use as well in the class.

  • COLTON OGDEN: Much cleaner than having them on one massive line.

  • DAVID MALAN: Yeah, it's just unmaintainable.

  • Here now, we use a lot of JavaScript stuff in the class.

  • No JS internally, not in the class pedagogically.

  • But I wanted to install these tools here, one of which we do use in CS50.

  • HTTP server we use in the middle of CS50 to run your own HTTP server literally.

  • We have a few gems in Ruby that we tend to use in CS50's various platforms,

  • so we preinstall those here.

  • COLTON OGDEN: A lot for markdown it looks like.

  • DAVID MALAN: Yeah, all markdown related to a lot of our text-based websites.

  • Here are some Python packages, some related to Amazon Web Services.

  • These are just comments I made to myself, frankly,

  • so I remember what these lines do.

  • COLTON OGDEN: Some of our own tools there too.

  • DAVID MALAN: Yeah, you can install our tools for free-- help50, render50,

  • submit50, and others via pip, which is Python's package manager.

  • COLTON OGDEN: under50 is a pretty cool tool.

  • DAVID MALAN: I do.

  • We could do a whole session on that one, how to make PDFs.

  • COLTON OGDEN: Actually, that'd be pretty cool actually.

  • DAVID MALAN: You can see that I have my notes to self temporary.

  • There are bugs or missing features in some

  • of the software that's open source that we use,

  • so we fix on specific branches or tags sometimes

  • so that we can mitigate any of those issues.

  • And then lastly, you just can see that I'm

  • installing some files, config files.

  • We don't have to go poking around too much.

  • But here, this is my favorite feature.

  • We have a message of the day, which every day is, "This is CS50CLI."

  • And you can see I'm using that echo trick.

  • I'm echoing a string, "This is CS50CLI."

  • And this time I'm just blowing away the file,

  • if it's even there, so that the only message of the day, MOTD,

  • is that particular file.

  • And then lastly, just like on Cloud 9, we're

  • adding J. Harvard to the [INAUDIBLE] giving it admin privileges as well.

  • COLTON OGDEN: Pretty cool.

  • DAVID MALAN: So that escalated quickly, to be fair,

  • but this was after weeks or months of sort of realizing,

  • oh, we need this too, or oh, we should add this and build, and build,

  • and build.

  • And let me just real quick open up base image, the thing on which it's based.

  • So we use CS50 base image for check50, for all of our web apps, for CLI50,

  • and I think one or two other things as well.

  • And that just has even more common software,

  • like Clang, and cURL, and Git that we want

  • across all of CS50's usage of Docker.

  • We just factored it out like good design.

  • COLTON OGDEN: Yeah, and altogether it's not that monolithic.

  • DAVID MALAN: No.

  • No, and it's a pretty nice hierarchy.

  • That's what this is.

  • We're making a family tree.

  • CS50 base image is the root.

  • We then have CS50CLI.

  • We've got another called CS50 Server, which you can perhaps pull up later,

  • and then we have a few others that are a little leaner for efficiency.

  • COLTON OGDEN: And no more vhosts.

  • DAVID MALAN: No more vhosts.

  • That's what we've gotten rid of.

  • We used to have a pair of servers, two servers, running Apache

  • and an old version of Linux that, honestly, is still

  • on like Ubuntu 12 or something.

  • COLTON OGDEN: Something like that, yeah.

  • DAVID MALAN: That's the problem too.

  • If you want to update your operating system,

  • you have to put your entire server at risk.

  • Because God forbid something goes wrong, you've

  • just screwed up your whole system.

  • So with containers, they are disposable.

  • If I screw up a container, no big deal, exit, rerun it,

  • and I'm back in business.

  • COLTON OGDEN: So for folks to play in web apps,

  • this is probably the future of most companies

  • trying to deploy their business on--

  • well, at least if they're on-- well, probably even on AWS too, right?

  • DAVID MALAN: Yeah, I think for the foreseeable future.

  • Not necessarily Docker specifically, but LXC was mentioned earlier.

  • Containerization-- and I'm sure humans will come up

  • with something better after that.

  • But yeah, these are kind of replacing what

  • were virtual machines for some time.

  • And in fact, a lot of people are running virtual machines on bare metal

  • and then running Docker on virtual machines.

  • And if you're using AWS, Azure, or Google,

  • you're running on VMs by definition of how they run their architecture.

  • COLTON OGDEN: It seems like good damage control, like you were talking about.

  • DAVID MALAN: Yeah, for sure.

  • COLTON OGDEN: GX Evolved looks like they're also asking

  • about CS550, CS161, 121, and 124.

  • DAVID MALAN: That might be a typo.

  • No such thing as CS550.

  • CS161 is operating systems.

  • Is available through Harvard's--

  • might be available through Harvard's Extension School.

  • CS121 definitely is.

  • That's introduction to theory in CS.

  • And CS124 definitely is.

  • That's introduction to algorithms and data structures.

  • Those are at www.extension.harvard.edu, but they're not free.

  • You would have to pay tuition, but you do get a transcript and course credit.

  • COLTON OGDEN: And they're not--

  • CS50 hasn't produced those courses.

  • Those are other instructors.

  • DAVID MALAN: Other instructors, other groups, yeah.

  • COLTON OGDEN: Surotons says, "I have to go."

  • Actually, they're probably already long gone at this point.

  • But if they're still in the stream, thank you very much for tuning in,

  • appreciate it.

  • "What sort of cost is this," says Adamantine Bipartite,

  • "to make the CS50IDE available to everyone for edX and Harvard?"

  • DAVID MALAN: It's a good question.

  • It depends on how many people are using it.

  • And we're actually in the process of transitioning to AWS, because Cloud 9

  • was recently acquired by Amazon itself.

  • So ask that question again in a few months

  • when we have a better sense of what the new architecture is like.

  • COLTON OGDEN: Yeah, because they're saying, "Even if using Docker,

  • it seems like you must maintain a massive infrastructure."

  • DAVID MALAN: Yeah.

  • It definitely depends on the number of students, but thanks to the cloud,

  • it can grow and shrink as needed.

  • COLTON OGDEN: And ME4L mentioned just what you just

  • did, saying that it's not quote unquote "The CS50IDE per say.

  • Underneath the hood, at least, it's actually provided by Amazon,

  • called Cloud 9."

  • DAVID MALAN: Yes, not Cloud 0, Cloud 9.

  • Indeed, it's an open source tool that is hosted now by Google and also now

  • by Amazon instead that we have layered pedagogical features on top of.

  • COLTON OGDEN: Sigmund was asking, "Do you

  • have any resources in creating the base images of Dockerfiles?"

  • And we took a look, certainly, at our own base image.

  • I don't know if there's more you'd want to add to that.

  • DAVID MALAN: Yeah, honestly, they're a little complicated

  • in that they have a week's worth of thought and effort

  • in there for additional software.

  • But honestly, you're welcome to just look at CS50's Docker images.

  • All of them are here at hub.docker.com/u/CS50.

  • And I said r earlier.

  • I wonder what happens if we visit the repository version.

  • Oh, yeah, that works fine too.

  • It redirects, so they're fine.

  • You can see all of our images here.

  • And honestly, the easiest one to start with is probably CLI.

  • Just ignore anything you don't understand, and exclude it

  • from your own Dockerfile, and just take those baby steps.

  • And each time do Dockerbuild.

  • to actually run it in your current directory.

  • Just a quick tour here, server we use for all of our web applications.

  • Whereas, CLI is for command line only.

  • CS50check, this is the base image-- not documented, it's done,

  • it's just not documented, hence, the to-do--

  • that we use for check50 on the server.

  • If you want to see that works, base image I just pulled up.

  • Sandbox is used by Sandbox.CS50.io now, and I'll pull that up in a second.

  • IDE is used by the new version of the IDE offline.

  • MySQL, we actually have our own image of MySQL

  • just so that we can fix it on a specific version, but it's not our software.

  • It's just our image.

  • Travis CI is something we've used with Travis CI, which

  • is a continuous integration deployment technology.

  • SMTP is our own SMTP server, and that's it.

  • There's not too much here.

  • And in fact, Sandbox, if you go to Sandbox.CS50.oi--

  • and actually, do you mind pasting that in?

  • COLTON OGDEN: Sandbox.CS50.io?

  • DAVID MALAN: That's, yeah, CS50's new platform

  • for quick and dirty programming, and it is based on Docker 2

  • and a company called Cordova that runs the servers.

  • You can see in our Dockerfile everything that is installed on here.

  • This is still a work in progress, which is why that to-do is there,

  • and at the moment, because of the way it's configured,

  • we don't have lines of complexity in the Dockerfile.

  • We instead do this.

  • We copy a script called CS50.sh into temp.

  • We then run that script and then remove it.

  • So you would actually have to look at our GitHub repo

  • for this, which is also open source.

  • And if I go into CS50/sandbox on GitHub, you'll

  • see this file, CS50.sh, and here you can see what is just a bash

  • script with all of our apt-get lines.

  • So the only difference here is there's no run lines,

  • there's no command or entry point.

  • So don't confuse the two, but this is all the lines

  • that install for you, all the stuff you see for free on Sandbox.CS50.io.

  • COLTON OGDEN: Cool, really cool.

  • DAVID MALAN: It's amazing.

  • Back in the day, and still now, and it's still very popular,

  • you have things like Chef and Puppet.

  • These are tools via which you can orchestrate your servers

  • and preinstall software, but it's like this script here.

  • CS50.sh just bootstraps your setup and installs manually all the software.

  • But there's no caching, there's no layering,

  • so Docker is just kind of a better version of these scripts

  • that have emerged over time.

  • COLTON OGDEN: They're trying to save as much time as possible

  • and the tedium of getting all the stuff up and running.

  • DAVID MALAN: Yeah.

  • COLTON OGDEN: Essentially, it looks like that's what the goal is, a lot of it.

  • DAVID MALAN: No, and you can freeze the image, which is amazing.

  • You can make your images freely available or even privately available

  • so people can just do Dockerpull, and pull down your image for free.

  • COLTON OGDEN: Yeah, super cool technology.

  • It makes it really easy it looks like.

  • DAVID MALAN: How about this one?

  • "Is GitHub Pages, similarly to Heroku, a container-like Docker?"

  • No, it's not.

  • I am pretty sure that GitHub Pages is just the fancy word for a CDN,

  • Content Delivery Network, specifically hosted by a company called Fastly.com.

  • I believe F-A-S-T-L-Y. And that is just a static service for hosting static web

  • pages, which is exactly what GitHub Pages is.

  • So there's no need for any computation.

  • That is all a disk-bound service.

  • COLTON OGDEN: "Do you have any reseources"--

  • OK, that was what we just read, sorry.

  • "Was what Google's plan, containerize browsing or something everyone--

  • everything for on the client side?"

  • They did something like that.

  • It was sort of related to I guess WebAssembly.

  • DAVID MALAN: Maybe.

  • COLTON OGDEN: I think Rob was doing some research on it at one point.

  • DAVID MALAN: I don't know the specifics, but I do think that's the future.

  • Because, honestly, Mac OS, Windows, and Linux

  • are all a huge mess right now in terms of the security model.

  • When you install software right now, consider on your Mac or PC,

  • you're prompted for admin privileges at which point all bets are off.

  • That product you just downloaded, free or not from the internet,

  • can do anything it wants on your computer.

  • That is a horrible, horrible design that we've been stuck with for decades.

  • So any attempts toward containerization on the client side

  • is most likely a very good thing.

  • COLTON OGDEN: Yeah, sounds like it'd be pretty cool.

  • "World domination," says Andre, "that's Google's plan."

  • [LAUGHS]

  • DAVID MALAN: And in fact, it used to be, "don't be evil,"

  • but that's not even the plan anymore.

  • COLTON OGDEN: Oh, yeah.

  • DAVID MALAN: So be evil.

  • COLTON OGDEN: Be evil.

  • Maybe see a question.

  • "How is this different Cloud 9, Google Cloud, AWS services?" says Bevick.

  • DAVID MALAN: Docker is a--

  • well, Cloud 9 is a web-based IDE that happens to be hosted typically

  • in the cloud on some service.

  • Google Cloud and AWS services are more similar to each other.

  • Microsoft Azure as well would be in that bucket.

  • Those are infrastructure-as-a-service, but they also have

  • platform-as-a-service stuff, and frankly,

  • they have software-as-a-service stuff, but Docker is a piece of software that

  • you can use on those architectures.

  • In fact, if I can share a screen here, AWS Elastic Beanstalk

  • is a service that Amazon makes available.

  • Similar in spirit to Heroku, but it's Amazon specific,

  • and Elastic Beanstalk lets you run Docker containers

  • on Amazon's virtual machines on Amazon's bare metal, their physical servers.

  • So when I develop an app on my Mac in a container--

  • I can test it, and run it, and play with it locally--

  • I can then just push that container essentially to AWS Elastic Beanstalk.

  • Amazon then runs the exact same image, which is extraordinary,

  • because it means what I am running on my Mac is going to behave, theoretically,

  • exactly the same way it's going to behave it on the cloud.

  • Years ago what used to happen, if you and I were collaborating

  • and we had our vhosts, our central servers,

  • I would have to tell you, oh, Colton, go ahead and install Vim, install Apache,

  • install these libraries.

  • Each of us has to agree to install the same things or we have to Chef,

  • or Puppet, or Vagrant, or other tools that facilitate that.

  • Docker just hides all of that and you don't have to worry about touching

  • your Mac, nor me, mine.

  • COLTON OGDEN: Cool, yeah, it definitely seems

  • like it saves a lot of time and energy these days.

  • DAVID MALAN: Kurbernetes is also an alternative

  • to this, very popular in Google circles as well.

  • COLTON OGDEN: "They're all based on Ubuntu.

  • I meant more like scratch."

  • I'm not sure if that's--

  • DAVID MALAN: I'm not sure what's that a response to.

  • COLTON OGDEN: Yeah.

  • "I think you need a base image," says BennyBlanco87.

  • DAVID MALAN: Mm-hmm, you can make your own base image,

  • but I think most people don't do that.

  • You just start with some distro you like.

  • COLTON OGDEN: Oh, yeah.

  • And he said right here, "You can create one just like the Ubuntu,

  • the image is maintained."

  • Yeah, because the maintenance is probably a big thing.

  • Doing something to maintain it actively probably more safe

  • bet than doing something from scratch.

  • DAVID MALAN: Yeah, let me pull up an answer to this question,

  • the Ubuntu based image.

  • So here we are on Hub.Docker.com again, /underscore.

  • Underscore is the official images that come from Docker itself, /Ubuntu,

  • and you'll see this here.

  • And you'll see that they have a crazy number of-- well, no.

  • Not as crazy as it used to be.

  • They have--

  • COLTON OGDEN: It's not as crazy.

  • DAVID MALAN: --only a few supported tags these days.

  • I was using 18.04 and there's some synonyms for those there.

  • And here you can see a lot of documentation, probably

  • some instructions in here on how they made these images.

  • And you can keep reading what is Ubuntu for folks who are a little new to it.

  • Yeah, here we-- oh, here we go.

  • "This image is built from official route FS, file system,

  • tarballs provided by Canonical, specifically those images there."

  • So it looks like you can dive deeper into how you

  • make these images if you really want.

  • So that's available too.

  • COLTON OGDEN: Cool, yeah, if you wanted to go a little bit deeper dive.

  • Do you think most people would have a reason to do something like that?

  • DAVID MALAN: To bank your base image?

  • COLTON OGDEN: Yeah.

  • DAVID MALAN: I probably wouldn't bother.

  • COLTON OGDEN: Yeah, probably too much.

  • DAVID MALAN: I mean, the base images are already pretty trim.

  • So unless you really want to customize things, it's probably not necessary.

  • COLTON OGDEN: TwitchHelloWorld's asking, "I'm confused by the term

  • 'base images.'

  • Is it documentation just to remind you what

  • is in it or is it functional as in setting up the files

  • and/or folders in the containers?"

  • DAVID MALAN: It's a little more like the latter, the second thing you proposed.

  • It is one or more layers of software that you

  • want to install into a container is perhaps the best way to say it.

  • COLTON OGDEN: Sort of like the bootstrap, the foundation,

  • upon which to build your--

  • DAVID MALAN: Yeah, it's harder to create a base image

  • than it is to create child images.

  • We have created child images.

  • They're a one-liner, where we just said, "From Ubuntu 18.04."

  • And then our two-liner where I installed Vim, or three-liner

  • when I installed apt-getupdate and then installed Vim,

  • and CLI50, which is much longer as well.

  • COLTON OGDEN: Is it accurate to think of base images

  • sort of as like the operating system and child

  • images as being the actual applications built on top of that?

  • I'm sure there are--

  • DAVID MALAN: The child images include additional software.

  • The base image includes minimally the operating system itself.

  • The child images contain more stuff, to be technical.

  • COLTON OGDEN: "I recommend Docker Compose also

  • when you've learned the basics of Docker and want

  • to have a very nice wrapper interface."

  • DAVID MALAN: Yeah, let's come back to that, because we too

  • use Docker Compose for our web applications,

  • especially when we have multiple servers, like the web server

  • and also a database server like MySQL.

  • So let's come back to that.

  • COLTON OGDEN: Cool.

  • Ademantine Bar, "I'm liking Docker.

  • I might use it."

  • Lance Maker, "Is it secure to install lots of files this way?

  • In your computer, is the Docker image sealed from the environment?"

  • DAVID MALAN: Secure?

  • I don't know what you mean by secure.

  • If someone has physical access to your computer or can SSH into your computer,

  • they can get at anything that's in the image.

  • They can just run the image just like I did with run-IT and then the tag name.

  • So let me say no.

  • There's nothing about Docker that we've discussed

  • that's any more or any less secure than any other files on your computer.

  • COLTON OGDEN: "You can make the containers privilege,

  • and they can then have access to your host network, et cetera,"

  • says Sigmund Penny.

  • DAVID MALAN: Oh, well, if we answer the question from the other direction, when

  • you're running that container, theoretically

  • it should not be able to access the host system, the Mac or PC,

  • unless you mount inside of it, as we did eventually, one or more directories.

  • But, yes, there's also privilege mode, which

  • gives the container even more access to the host OS, like networking ports,

  • and so forth, and more.

  • So you should assume, honestly, any software

  • you're running on your computer can potentially break out

  • in the case of bugs or exploits.

  • COLTON OGDEN: Sure.

  • It makes sense.

  • "Using persistent storage, shared volumes

  • between the host and the container, those files

  • can then be change from within the container."

  • This is essentially what you just said.

  • "Will Docker be faster than a VM on my local machine?"

  • DAVID MALAN: I would say most likely, but there's probably

  • some factors that could refute.

  • But generally, a VM is a little heavier weight.

  • It's doing more work to run your software.

  • Whereas, Docker and tools like it are leaning more on the host OS.

  • COLTON OGDEN: "Docker isn't designed to use a single container

  • from heavy processing.

  • It's designed to be a cluster like the diagram we looked at before."

  • Is that accurate?

  • DAVID MALAN: Well, that was the original intent, honestly,

  • but increasingly it's being used for isolation.

  • And so, yes, there's this notion of microservices

  • where you have a bunch of different pieces of software

  • that you've implemented-- one for your web server, one for your app server,

  • one for your email server, one for your database server, and whatnot.

  • And in CS50, we kind of do that.

  • We separate out our web app from our database,

  • but we don't use microservices.

  • Honestly, I find, in many cases, certainly for small applications,

  • it's just over engineering the problem, and it's

  • nice to just bundle everything up in one container.

  • Frankly, a lot of cloud services just make it easier

  • to get one container up and running as opposed to multiple, however,

  • you can with Elastic Beanstalk and other services.

  • So that was the original intent.

  • But frankly, we at least, and I daresay others, definitely

  • have heavier weight images than might have been originally intended.

  • COLTON OGDEN: Amed Osman says, "Is Docker separating the dev environment

  • from production?"

  • DAVID MALAN: You could.

  • You could have multiple instances of the same image running

  • in separate containers, so as to have a test environment, a production

  • environment, a staging environment-- makes it even easier,

  • because you know by definition all three of those are identical.

  • By contrast, in our years ago with vhost, virtual host,

  • we would have to configure two or three servers identically

  • and then hope we don't screw up and let them get out of sync.

  • Docker ensures they won't.

  • COLTON OGDEN: "What would be the proper approach to not losing data?

  • I understand you can quickly reinstall stuff,

  • but what about data stored in databases, images, et cetera?"

  • DAVID MALAN: So it depends on where things are running.

  • Docker can certainly do this.

  • You can create, as someone suggested earlier,

  • your own local volume, which is essentially

  • like a file in which you store virtually all of the files

  • from the container or folder they are in,

  • and that's where you can put images and stuff.

  • Databases can be outside of the container,

  • if that's how-- what we do on Elastic Beanstalk.

  • We run our Docker containers on Elastic Beanstalk,

  • but we run our databases on RSD, Relational Database Service,

  • which is a separate Amazon product.

  • So that takes care of the persistence of data,

  • but you can certainly persist data.

  • I was just demonstrating that by default, everything

  • is ephemeral unless you mount, and remember

  • to mount, and create your own volumes.

  • COLTON OGDEN: BennyBongus says, "Malware can break out of VMs,

  • so we can probably break out of containers."

  • Is that true?

  • DAVID MALAN: Yes, software is written by humans.

  • Humans make mistakes.

  • Things can get out, so you should mitigate those risks always anyway.

  • COLTON OGDEN: Elasuras-- Elasorsa says, "You usually don't

  • keep your database in your instance.

  • You use it through a volume, so it's more on your server."

  • DAVID MALAN: Yeah, I agree with that.

  • COLTON OGDEN: "I guess you could put on a host directory, a mount to it,

  • or run as scheduler to back up on a mounted."

  • DAVID MALAN: Sure.

  • COLTON OGDEN: "What is the best free platform to host Docker images?"

  • says LightofHell1.

  • DAVID MALAN: I don't know.

  • Let me quickly Google.

  • So it looks like Heroku supports Docker these days.

  • I know Heroku tends to have free tiers of service up

  • to like low levels of usage.

  • I would defer to you to just read a little closer the documentation

  • to see if the Docker stuff is free.

  • You can definitely use AWS.

  • You have to typically sign up with a credit card

  • even if you don't get charged.

  • You get some amount of usage for free.

  • And certainly, through educational programs-- sometimes CS50

  • has done this-- we've gotten like coupon codes for $100 of usage.

  • Then you could definitely use Elastic Beanstalk.

  • And I'm guessing Azure has something similar maybe.

  • Google does too.

  • So I would honestly Google "Docker free hosting"

  • and see what pops up initially if you want to play.

  • But you can run Docker on your own Mac and PC,

  • of course, if that's not on the internet.

  • COLTON OGDEN: "I remember the good old appliance days of the hypervisors."

  • DAVID MALAN: Then you must remember how slow that damn thing was to boot up,

  • because it was in fact a hypervisor.

  • COLTON OGDEN: "Talking from experience and production,

  • the more processes you add to a Docker container

  • the more problems you get, and you get to rely on init managers,

  • like supervisord.

  • I prefer running one to two processes per container,

  • like Nginx, or some service, plus some service.

  • DAVID MALAN: Yeah, that's fair.

  • That world is getting better, managing processes and containers.

  • But, yes, that's the intent of microservices.

  • COLTON OGDEN: "'Containers do not contain,' in quotes I read today,

  • which means that security is not isolated."

  • DAVID MALAN: I'd have to see the article to be able to tease that apart.

  • You should not assume that anything is secure,

  • but this is certainly a step in-- secure 100%--

  • but this approach to containerizing, or more generally,

  • isolating processes and services is a huge step forward.

  • COLTON OGDEN: "Running a database inside a Docker container,

  • I would seriously not recommend that.

  • It's not easily deployable," says Sigmund.

  • DAVID MALAN: I don't know if I'd agree with that, honestly.

  • MySQL, and Postgres, and such, they're just

  • pieces of software that are running.

  • The most important thing with the database is the volume

  • and you want to make sure that that is mounted consistently.

  • You want to make sure that the process shuts down cleanly

  • so you don't have any corruption.

  • But there's no reason you couldn't run the database software in a container.

  • But the data should be separate from it.

  • COLTON OGDEN: Sure.

  • Wouldn't want a sort of ephemeral database that--

  • DAVID MALAN: No, that would be the worst.

  • But actually, can I interject for a moment?

  • COLTON OGDEN: Sure.

  • DAVID MALAN: Because we can tie that thread nicely

  • into the other question about Docker Compose that came up.

  • COLTON OGDEN: Yeah, let's do that.

  • DAVID MALAN: Let me go ahead and open up, let's say, our help50 server.

  • So help50 server is freely accessible on GitHub,

  • though you probably wouldn't want to run this yourself.

  • This is at GitHub.com/CS50/help50server.

  • This is the code that drives most of help50 itself, the command line tool.

  • There's a back end server to which student's error messages are posted

  • by HTTP, and we then send back some helpful response--

  • theoretically, helpful responses based on regular expressions, excuse me.

  • And you can see in here we have a Dockerfile for that

  • and that has just a few pieces of software installed.

  • But notice, we have an abstraction here.

  • All of CS50's web-based apps extend what's

  • called CS50 Server, which in turn extends CS50CLI,

  • which in turn extends CS50 base image, which in turn extends Ubuntu 18.04,

  • I believe.

  • So we have this whole hierarchy so that each of our apps

  • has a pretty tight Dockerfile, not much complexity,

  • but we have the commonalities factored out.

  • COLTON OGDEN: It's like a Java program.

  • DAVID MALAN: Yes, but without the atrocious headaches.

  • And but you can see here that help50 server, unlike some of our apps,

  • additionally needed this flask migrate library, flask SQL alchemy, flask

  • session, and a couple of others that we didn't bother baking into our base

  • image because not everything needs it.

  • So we just saved a little bit of space, but we

  • could throw the kitchen sink in too.

  • But to someone's comment earlier about Docker Compose,

  • this is a helpful file too.

  • This is a somewhat older version of the format.

  • There's actually a fewer fancier features now.

  • But here in Docker Compose, if you want to run multiple containers locally

  • or in the cloud, you can compose them, so to speak.

  • This text file specifies how you can run multiple containers

  • and how they should be configured with respect to each other.

  • So for instance, help50 server is a nice example of one of our web apps

  • that has both a web server and a database server.

  • When we're developing this app locally, we want to have a MySQL server running,

  • but I don't really want to install it on my own Mac or PC,

  • or tell you how to do it, and then synchronize our tables.

  • That too should be containerized and abstracted away.

  • So this file here has a top-- this is YAML, which

  • is like a cleaner version of JSON data.

  • A top level key called "services," and I've defined two services--

  • Web and MySQL, but I could have called those Foo and Bar.

  • Web should be built by building dot.

  • So this is a way of automating that builds command.

  • I gave it a name just so I know how to refer to it when I type things on.

  • This is cool.

  • You can say it depends on another server, and the syntax for this feature

  • has changed over the months.

  • But this means it depends on this one down here so

  • that my database server ultimately will definitely

  • be running before my web server, because I want

  • the latter to connect to the former.

  • So the rest of this stuff is just a bunch of environment variables.

  • But what's cool here is we can stub out, so to speak,

  • a default username, and password, the hostname for the database, and a name.

  • None of this is secure.

  • This is just used locally for development.

  • This is not our actual passwords.

  • But you'll see here you have a link, which means this line.

  • We'll make sure that your web server has a fake DNS entry called

  • "MySQL," that when you do an NSLOOKUP of MySQL,

  • it will resolve to the other container wherever it is, which is cool.

  • You can expose ports, like port 8080 to port 8080,

  • because I just want to commandeer that one here.

  • And here's where I got confused before.

  • I'm not sure why Docker Compose is more tolerant of this.

  • I'm mapping the current directory dot to serve /www, which is convention.

  • And then down here, MySQL is based on our MySQL image.

  • A couple more environment variables, which per the documentation,

  • configure a default username and password.

  • And so here, if I were to run this after cloning the repo,

  • I would do on my Mac DockerCompose--

  • whoops-- Billed, to build both images, and then DockerComposeUp

  • to bring the whole architecture online.

  • COLTON OGDEN: Where was the database being stored in that example,

  • like the actual volume?

  • In server www?

  • DAVID MALAN: No.

  • Inside an ephemeral container.

  • So when that container, called MySQL, is deleted, I lose all my data.

  • COLTON OGDEN: So this is just for testing,

  • and then when you actually deploy it, it's--

  • DAVID MALAN: That's a different database, right.

  • So what we don't use Docker Compose in the cloud.

  • We instead use Elastic Beanstalk and have it talk to our DS,

  • but that is product specific, that's cloud provider specific.

  • Here is a generic approach that allows us to create the--

  • to mimic Amazon's setup, but locally in such a way that it's disposable.

  • A huge boon-- so I'm glad-- thank you for mentioning Docker Compose earlier.

  • COLTON OGDEN: Yeah, that's cool you can sort of mix containers

  • into the same setup.

  • Let me make sure we're back up to where we just left off.

  • Oh, looks For Sunlight included the Docker--

  • DAVID MALAN: Oh, good.

  • Thanks, I'll try to pull that up later.

  • COLTON OGDEN: --article.

  • And then-- oh, someone else had another article.

  • We'll come back to that.

  • "What is the advantage of using a commercial interface-as-a-service,

  • like AWS, Google Cloud, and Azure as the containerization and resulting

  • security," says TwitchHelloWorld.

  • DAVID MALAN: Don't buy anything based on someone

  • saying, "it's secure," because that's usually

  • fluffy marketing speak I would say.

  • COLTON OGDEN: Their padlock image on whatever website.

  • DAVID MALAN: They're assigned, approved, or whatever?

  • COLTON OGDEN: Yeah.

  • DAVID MALAN: Always take any mention of security with a grain of salt.

  • Using a modern cloud provider, like the ones you've enumerated here,

  • helps you be more secure if the alternative we're

  • using like a vhost-based-- virtual host-based approach of shared web

  • hosting-- that used to be in vogue.

  • With that said, shared web hosting was really

  • popularized I think by the PHP world.

  • That was the way the system was designed.

  • You have one web server, like Apache, maybe Nginx,

  • running a bunch of different websites all in the same system.

  • But right, Ruby on Rails doesn't really work that way.

  • Python and Flask and Django don't really work that way.

  • Those are isolated to individual apps by design more so,

  • and it's actually more of a pain to get them working in a shared environment.

  • So these IaaS providers are just more conducive to running a more diverse

  • ecosystem of apps I would say.

  • COLTON OGDEN: ColonelHussain says, "What are you doing here?

  • What kind of code is this?"

  • DAVID MALAN: This is Docker.

  • So if you rewind once we post the final video, you'll see all that and more.

  • COLTON OGDEN: Yeah, and actually you can go--

  • the VOD, currently, you should be able to scroll back on the slider

  • and see where the--

  • DAVID MALAN: Oh, good.

  • COLTON OGDEN: --and look back on what we were talking about previously.

  • Someone included an article that says, "Do not use Docker and Docker for CI."

  • I'm not sure if you're familiar.

  • DAVID MALAN: I'm going to say no.

  • I'll pull that up later.

  • COLTON OGDEN: "Where do you use," asking Sigmund, "where they use Docker."

  • Amed Osman says, "Is it better if I have a PHP-based platform that

  • needs a gear of Python-based platform making

  • both on separate containers talking through APIs or is there a way

  • making them communicate container to container?"

  • DAVID MALAN: So if I'm hearing this correctly, if you've got a PHP app

  • but you need to call some Python code, honestly,

  • the simplest way to do this is probably have one container, one image,

  • that has both PHP installed-- whatever version you want--

  • and Python installed-- whatever version you want.

  • And in PHP just use the system call, or exec, or whatever it's called--

  • it's been a long time--

  • that lets you run a Python script locally and not over engineer that.

  • I say that completely in the abstract.

  • I don't know what your actual needs are or your architecture is like,

  • but I would keep it simple until you need to complicate your implementation.

  • COLTON OGDEN: That makes sense.

  • Sigmund was responding to For Sunlight.

  • Development environment, "Just currently been working with Kubernetes--" Am I

  • pronouncing that--

  • DAVID MALAN: Kubernetes.

  • COLTON OGDEN: "--Kubernetes and GCP for a couple of years."

  • Totally don't know what that is.

  • "Twitch, however, using one of the services,

  • does have the advantage of having them implementing best practices for you."

  • DAVID MALAN: Very true.

  • COLTON OGDEN: "Bigger scale, more testing, and more audits."

  • DAVID MALAN: That's a good one.

  • COLTON OGDEN: "This article was cited by AWS Cloud 9,

  • because they don't allow running Docker inside their IDE

  • due to security issues."

  • DAVID MALAN: Yeah, that's true.

  • Same for us, as a result.

  • COLTON OGDEN: "What is the difference with Docker and GCP?"

  • DAVID MALAN: Docker is a Google compute platform.

  • I think you can run Docker on Google's cloud platform.

  • We've not used Google's platform here much other than indirectly

  • through other cloud services, but Docker is a piece of software

  • that allows you to contain all of your application's code and dependencies

  • inside of the illusion of a self-contained operating system.

  • GCP is, I believe, fair to say, lower--

  • well, no.

  • It's more of an isolated app environment.

  • I think it's probably close enough to say

  • Docker is a more generalized solution, but I'd need to close my mouth,

  • because I've not used Google enough to speak intelligently

  • to that beyond that.

  • COLTON OGDEN: "Is it me or is web programming

  • really a confusing but powerful soup of dozens of technologies

  • all carefully tied together?"

  • DAVID MALAN: It is not just you.

  • The world is a mess right now.

  • And will probably always be a mess like this,

  • because many people will come up with many solutions to problems,

  • and our understanding of how best to solve problems will evolve over time.

  • I think the important thing here in this world is to focus on fundamentals,

  • like understand how technologies are similar, and different,

  • and just roll your eyes when someone is preaching one technology over another.

  • And decide for yourself, based on reading the documentation,

  • reading articles like folks are proposing here,

  • and then, honestly, just go with which one is easiest and most accessible

  • to you.

  • And if you bump up against problems ultimately, fine, solve those.

  • Don't try to assume there is one best thing for everything.

  • COLTON OGDEN: Sigmund was saying, "Stay away from devices and services where

  • they say 'military-grade encryption.'"

  • DAVID MALAN: Yeah, that's silly nonsense too.

  • COLTON OGDEN: GSP's Google Cloud Platform--

  • "Better buy the ones that have 'easily hacked' on the package."

  • DAVID MALAN: There you go, very open, forthright.

  • COLTON OGDEN: Where are the puns?

  • "Where can we find a full video of the feeds?" says Degoja.

  • It'll be on here on Twitch.

  • After the broadcast is over with, it may take them a minute to encode it,

  • and it'll be on YouTube later this evening.

  • So if you're unfamiliar, we have a YouTube channel

  • as well where we post all these videos, and many more videos, including

  • David's lectures from this last year.

  • DAVID MALAN: Yeah, you want to paste that URL?

  • YouTube.com/CS50 for all of CS50's video needs.

  • COLTON OGDEN: AltProgrammer says, "hello."

  • DAVID MALAN: Hello.

  • COLTON OGDEN: ShellExecNastiest say--

  • DAVID MALAN: Yeah, there's that stuff.

  • But again, quick and dirty solution if you want.

  • COLTON OGDEN: "Comic, Colton, and professor don't stay quiet."

  • I'm not sure.

  • "Same here," Assly.

  • [INAUDIBLE], "Right back at you."

  • "Go to the Videos tab after this is done and you will find it."

  • Sigmund says, "Yeah, you can.

  • They have a section just for Kubernetes so you can set up your clusters there

  • with Docker containers inside the pods in GCP, that is."

  • So I guess they have some level of integration.

  • "What is Colton's middle name?"

  • Taylor is my middle name.

  • DAVID MALAN: Oh, wow.

  • We could have strung that out, take some guesses, and a poll or something.

  • COLTON OGDEN: Kubernetes.

  • DAVID MALAN: There you go.

  • COLTON OGDEN: I like all the humor in 2019 CS50 Pset instructions.

  • DAVID MALAN: Oh, thank you.

  • COLTON OGDEN: Cool, I think we're all caught up on the comments.

  • DAVID MALAN: Yeah, I think we're nearing the end here.

  • Please feel free to chime in with any final questions if you'd like.

  • COLTON OGDEN: Oh, sure.

  • Yeah, time flew by.

  • I didn't realize it was already almost 5 o'clock.

  • DAVID MALAN: Indeed.

  • But let me suggest, if you'd like to get started,

  • literally Google "Docker download," install it on your Mac or PC,

  • assuming your OS supports it.

  • Then you can go about playing with just the base Ubuntu image.

  • Honestly, let me pull up a little text editor.

  • I believe the first thing we did was we created a Dockerfile that quite simply

  • had "From Ubuntu 18.04" at the top.

  • So this was my Dockerfile, and then down here I

  • just ran the command, Dockerbuild., and then

  • I ran Dockerrun-IT whatever your hash is here.

  • And you can actually be fancier.

  • You can tag your own images and give them names, I think.

  • I don't want to goof here, but I think if you do tash Foo,

  • you can instead say Foo here, I think, but double check.

  • If you want instructions, just go ahead and do Dockerhelp, or Dockerrunhelp,

  • or Dockerbuildhelp, or so forth, which is pretty conventional,

  • and that will get you up and running.

  • It will get you running Linux, in this case,

  • or there's different flavors of Linux.

  • Honestly, if you are a bit of a geek and you

  • want to learn more about various Linux distributions,

  • don't bother partitioning your hard drive, and dual booting,

  • and all of that scary stuff.

  • It's so easy to just run it in a container these days,

  • get up and running, play, install stuff, and throw it away when you're done.

  • COLTON OGDEN: Yeah, it was easy even with VMware doing that, and let alone

  • this makes it even--

  • DAVID MALAN: Yeah, just a little more time consuming, but yeah.

  • COLTON OGDEN: Yeah, and this makes it even easier and much more lightweight,

  • much faster.

  • DAVID MALAN: "Could we making a stream about building multitenant

  • architectures?"

  • Maybe.

  • I would propose that you formulate a more precise question for us.

  • Like what's the problem you're trying to solve,

  • and why do you want a multitenant architecture,

  • and what does that mean to you and to us rather than our trying

  • to answer I think in the abstract.

  • COLTON OGDEN: It looks like UnsignedEd says, "Hi, David and Colton.

  • Thank you for your great job, and special to you,

  • David, to introduce me to the wonderful world of programming."

  • DAVID MALAN: Oh, very nice, very welcome, UnsignedEd.

  • COLTON OGDEN: And I think they're having a conversation in the chat here

  • asking--

  • I think Sigmund or someone--

  • who asked?

  • Adamantine, sorry.

  • It says, "Is anybody working as a programmer or developer?"

  • And people are chiming in.

  • It looks like DigiCrest says, "Not yet."

  • And then Adamantine was saying--

  • DAVID MALAN: Oh, here we go-- big one.

  • "Do you agree and think operating systems or algorithms is

  • a good such course to take in-person?"

  • If that question is to us, I'm not sure it matters to be honest.

  • I think it depends on the quality of the program,

  • the instructor, the assignments far more so than being in-person.

  • I think it's certainly nice to get to know the teaching staff and classmates

  • in-person, but I don't think-- nothing comes

  • to mind about those two topics that lend themselves better or worse

  • to in-person.

  • Honestly, if you had asked more about a physics class or a club that

  • has a hands-on lab, or especially from the physical sciences, absolutely,

  • but when it comes to most CS classes, certainly theory and software,

  • I'm not sure you really gain much.

  • If it were a hardware class or circuitry class, came to a physics class,

  • then sure, but I wouldn't worry too much about that distinction, I think.

  • COLTON OGDEN: Certainly we spend a lot of time

  • and resources making our content available to people around the world

  • to watch online.

  • So, yeah, it follows.

  • DAVID MALAN: "Why do you--

  • CS50 stopped CS50 coding event, which we had

  • to make a team for and solve 10 or so problems and see?"

  • COLTON OGDEN: The hacker ranked stuff?

  • DAVID MALAN: Oh, yeah, the coding contest.

  • There wasn't huge uptake, to be honest.

  • We ran it I think twice, and each time we had a good amount of participation,

  • but not nearly as much as with like CS50X Puzzle Day, which we'll

  • be running in a couple of months time.

  • So it just didn't seem like there was sufficient interest.

  • I daresay, when people are immersed in taking CS50 or some

  • of CS50's other courses, there's already so much

  • damn work to do that I'm not sure doing more problems in code

  • was globally appealing.

  • But if you start asking more and more and get your friends to mention it,

  • maybe we can marshal some more support.

  • COLTON OGDEN: Sure, yeah.

  • DAVID MALAN: That's all.

  • COLTON OGDEN: SolidGD, "Why all the questions in caps?

  • Like everyone's shouting today."

  • DAVID MALAN: I don't know why all the questions are in caps here.

  • COLTON OGDEN: I can't hear out of my right ear.

  • [LAUGHS]

  • COLTON OGDEN: "Always great to hear from people

  • who are passionate about technology.

  • Thanks, guys," says Degoja.

  • "I think one thing is coding with another student too, to train."

  • And there's, I think, certainly value in that, right, pair programming?

  • DAVID MALAN: Maybe.

  • I've never been a fan.

  • I can't stand working alongside of someone else on code.

  • I can't focus and I'm too embarrassed by typing what I'm typing.

  • COLTON OGDEN: Oh, like what we're doing right now?

  • DAVID MALAN: Well, we're not coding.

  • We're just talking.

  • "When is the World Puzzle Day?"

  • To be determined.

  • It will be somewhere between February and April of 2019.

  • We will start posting on social media pretty soon when we know.

  • COLTON OGDEN: Cool.

  • WhipStreak was asking, "Can we do a stream on HTML?

  • I know it's not a programming language per se,

  • but I love, love, love HTML CSS."

  • DAVID MALAN: But then maybe you should be leading the stream on HTML and CSS.

  • But that's a good one.

  • Let me-- we'll talk to the team here and see who

  • might be interested in doing that one.

  • COLTON OGDEN: "Regulars, we can pair up," says For Sunlight.

  • "Does beta testing for you guys satisfy that idea somewhat?

  • Why teach C--" oh, sorry, that's not the same person.

  • "Does beta testing for you guys satisfying that idea somewhat?"

  • I'm not sure--

  • DAVID MALAN: I'm not sure what that's referring to.

  • COLTON OGDEN: "Why teach C and not C++ for the first half of the course,"

  • says Adamantine.

  • DAVID MALAN: 60%, 70% of our students have never programmed before.

  • I think pedagogically procedural programming is best placed

  • before object-oriented programming, because I

  • think there are so many problems and so much logic

  • you can explore that does not warrant objects

  • until you actually have problems that warrant solving them

  • with it down the road.

  • So I think, if we were to introduce C++, it would be after C,

  • or you would teach C++, but the subset of it that is effectively C.

  • And it's really not until mid-semester, when we switch to Python

  • and we start talking about libraries and frameworks,

  • that it makes sense to begin encapsulating more complexity

  • and to using other people's libraries.

  • I just don't think it solves a problem early on in a class.

  • And syntactically, there's a little more messiness there.

  • I don't see a need for classes early on.

  • And even in years ago, when a colleague and I used to teach in an introduction

  • to computer science in Java, I never really liked it very much,

  • because it felt unnatural to me to be forcing students

  • to see and to think about classes, when, oh my god,

  • they just want to write Hello World, let alone any number of other programs

  • that don't require a class.

  • That is an annoying feature of Java, I think, that everything is a class,

  • an object.

  • COLTON OGDEN: So let's switch to Java then, next semester.

  • DAVID MALAN: There you go.

  • Time for a couple more questions here.

  • COLTON OGDEN: Yeah, AssemblyDragonBoard says,

  • "Docker requires Windows 10 Pro, Enterprise, or Education.

  • I have access to a Mac, but not Windows 10 Pro, et cetera.

  • Is it better to try and learn Docker on a Mac rather than upgrade my Windows

  • 10 to Pro?"

  • DAVID MALAN: Yes, less work, and no upsides to trying it on Windows anyway.

  • They're going to be functionally pretty much the same.

  • COLTON OGDEN: "I want to give Bisquit a shout out to his C++ skills."

  • So a shout out to Bisquit.

  • I'm not sure who that is.

  • "What was the reason you guys changed PHP to Python in CS50?"

  • DAVID MALAN: PHP has just lost steam.

  • Python is all the rage these days.

  • Ruby was more of the rage for some time.

  • Python is a bit more versatile.

  • You can write command line programs in PHP.

  • You can do analysis and sort of data science type applications in PHP,

  • but that's not really what it was meant for, and it's just weird to do that

  • or to teach that.

  • So as such, I think Python is more multitalented,

  • or it certainly is perceived as being more multitalented,

  • and so it just felt like it was time.

  • We were clinging to a language whose star was fading.

  • With that said, PHP's documentation, I've long felt,

  • is order of magnitude better than Python's and Ruby's.

  • So I do think that was a loss.

  • They have a wonderfully accessible documentation, great examples,

  • even some community Q&A. Python's documentation

  • I think is awful relative to that, but I do think it was the right call.

  • Otherwise, we'd be teaching the wrong language

  • for a course, one of whose goals is not just

  • a foundation in computer science, and concepts, and programming, but also two

  • offboard students, so that when they never take another CS course before,

  • they nonetheless have some practical programming experience

  • that they can then go use in the real world.

  • COLTON OGDEN: Agreed.

  • "Are you planning to teach any functional programming languages,

  • like Elixir and Elm?"

  • DAVID MALAN: No time soon, but Colton has

  • been championing that for some time.

  • So maybe, but no plans just yet.

  • COLTON OGDEN: Get more critical mass.

  • Let's ask him.

  • Keep asking.

  • "I prefer working solo.

  • The herd is good to do it in one course, since that is how coders work,"

  • says TwitchHelloWorld.

  • DAVID MALAN: Collaboratively, not necessarily next to each other

  • as peer programming, but that's just my own personal bias against.

  • COLTON OGDEN: You and I can do a little bit of that next stream.

  • DAVID MALAN: OK, I'll just sit here and watch and see how you feel.

  • COLTON OGDEN: "How can I be one of the CS50 staff?

  • I'm really interested in that.

  • It seems like CS50X in 2013

  • [INTERPOSING VOICES]

  • DAVID MALAN: Oh, just start by emailing me.

  • Malan @-- do you want to paste?

  • Malan@Harvard.edu, and we have bunches of ways to get involved,

  • either officially here on campus, or online,

  • or certainly with our online communities as well.

  • COLTON OGDEN: Tuxman, "Coming from C, I was

  • so confused when I started my Java class, but then having seen Struts,

  • it came back to me and it was smooth."

  • DAVID MALAN: So I'd like that point, because we

  • do get to Struts in C mid-semester, at which point, oh, this does make sense.

  • It solves a problem.

  • I can encapsulate data.

  • And so there, if C had classes, could you then

  • say, well, you can encapsulate not only data but functionality instead.

  • And for me at least, mentally--

  • I feel pedagogically-- that's like the right way

  • to escalate things and not hit students on day one with too much OO stuff.

  • COLTON OGDEN: And I feel like-- don't we do that with Python now?

  • Around the time we get to Stucts, don't we

  • start to segue into Python in classes or have we touched on that briefly?

  • DAVID MALAN: No, we just use dictionaries to encapsulate.

  • COLTON OGDEN: Interesting.

  • I thought in one of the lecturers, you talk about classes.

  • DAVID MALAN: A couple of years ago we had a class for like Pset7

  • where we encapsulated something, but then I

  • dropped it as just being a tangent.

  • COLTON OGDEN: "Should use classes in object-oriented programming

  • using jQuery, like in Pset8 mashup?"

  • DAVID MALAN: Not for that Pset, no.

  • What we expect of you in what was mashup,

  • the old Pset8 was very procedural, in fact, just a few lines of code.

  • And I'd be curious to see what you are proposing,

  • but my gut tells me that's over engineering the solution.

  • COLTON OGDEN: Brenda was mentioning Puzzle Day,

  • "It's not about programming.

  • It's problem-solving."

  • DAVID MALAN: Indeed, very true.

  • Thank you, Brenda.

  • Yes, anyone can participate in Puzzle Day.

  • Keep an eye on CS50's Facebook or subreddit for that.

  • COLTON OGDEN: More all caps--

  • "It's Brenda Anderson from Discord."

  • DAVID MALAN: Nice.

  • COLTON OGDEN: "If you want to read about the last one,"

  • M. Kloppenburg found an article.

  • DAVID MALAN: Yeah, thank you for pasting that URL.

  • COLTON OGDEN: For Sunlight's saying, "Super fun.

  • I never did it, but my students had so much fun.

  • I thought we could try it."

  • Maybe?

  • DAVID MALAN: Yeah, do, for sure.

  • There's our email.

  • COLTON OGDEN: Thanks for the link.

  • "Java was easier for me after seeing Python."

  • So it gets to your point.

  • DAVID MALAN: Yeah, I bet.

  • COLTON OGDEN: Yeah, after a little bit of procedural knowledge.

  • "It took a while to get around polymorphism and interfaces."

  • DAVID MALAN: That's fair.

  • COLTON OGDEN: And it sounds a little bit more Java specific too,

  • with interfaces.

  • Assly said, "Exciting that everyone can participate.

  • Thanks for that."

  • DAVID MALAN: Yeah, do you check out that URL that--

  • who just pasted that up there?

  • Do you mind scrolling down?

  • COLTON OGDEN: M. Kloppenburg, I believe.

  • This one?

  • DAVID MALAN: Yeah, that would be great.

  • There's a lot of photos.

  • You can really see some of your friends, and classmates,

  • and others around the world, literally, who had printed out the puzzles

  • and we're working on them.

  • COLTON OGDEN: Yeah, that's pretty cool.

  • I roughly remember that.

  • DAVID MALAN: Yeah, a few thousand people I think.

  • Well, thank you, everyone, for tuning in.

  • Feel free to hit us up on social media or to just email me directly.

  • My email address is in there, and it's on almost every one of our videos.

  • Colton's as well in the games videos.

  • And it's been really fun talking about this.

  • Reach out if you've got some questions.

  • COLTON OGDEN: Thanks so much for this tutorial on Docker.

  • DAVID MALAN: Oh, no problem.

  • Yeah, looking forward to the next one, when we'll be playing what game next?

  • COLTON OGDEN: Well, actually we do need to beat Zelda at some point, but--

  • DAVID MALAN: I don't know.

  • We struggled with the first time.

  • COLTON OGDEN: There was input lag, because it wasn't on--

  • DAVID MALAN: Oh, that's right.

  • It was the TV's fault. It was my excuse.

  • COLTON OGDEN: It actually was the TV's fault.

  • DAVID MALAN: There was millisecond that kept costing me lives every time.

  • COLTON OGDEN: More than one millisecond.

  • So join us next week.

  • On Monday, I'll be doing a stream on hangman.

  • We'll talk about hangman.

  • So pretty--

  • DAVID MALAN: You're just going to be playing on the whiteboard?

  • COLTON OGDEN: Yeah.

  • DAVID MALAN: I hope everyone gets a letter, please.

  • COLTON OGDEN: We'll implement hangman and Love2d,

  • and then Wednesday we may do a typing game.

  • I'm chatting with some other folks about other streams.

  • They'll be in the Facebook.

  • We'll make some events for those.

  • This was Docker.

  • This was awesome.

  • DAVID MALAN: Yeah, thanks so much.

  • Great to see everyone.

  • Until next time.

  • COLTON OGDEN: And we had a whiteboard.

  • DAVID MALAN: Yeah, we didn't need to draw any pictures,

  • but next time we'll play hangman I guess, huh?

  • COLTON OGDEN: Yeah, or maybe even to some Legend of Zelda, finish Zelda up.

  • So thanks, everybody, for tuning in.

  • This was CS50 on Twitch, and this was Docker.

  • We'll see you next week.

  • DAVID MALAN: Take care.

  • COLTON OGDEN: [INAUDIBLE].

COLTON OGDEN: Good morning, good afternoon, good evening,

Subtitles and vocabulary

Click the word to look it up Click the word to find further inforamtion about it