基于真实应用学习docker

未匹配的标注

docker的官方教程是基于一个真实的 Node.js 应用的。这个应用是一个简单的待办任务列表程序。如果不熟悉Node.js的话,也不用担心。教程中不会用到JS。

假设你们现在是一个小型开发团队,你正在构建一个应用原型。不考虑大型团队,多开发者等问题的情况下,希望通过原型来展示你们的产品能做什么以及如何工作。

获取应用

在开始运行应用之前,需要把应用的源代码下载到我们的机器上。

点击图中红框链接即可下载源代码:

下载教程源码

下载之后,进行解压。使用你惯用的代码编辑器打开解压后的文件夹即可。我这里使用的是 vscode 打开文件夹。你可以看到 package.json 文件以及2个子路径:src 和 spec

vscode打开项目后所看到的项目结构

打造应用的容器镜像

为了构建应用,我们需要使用一个 Dockerfile 。

Dockerfile 是一个基于文本的脚本,它包含了一些指令,这些指令用来创建一个容器镜像。如果你之前已经创建过 Dockerfile ,你可能会发现下面的 Dockerfile 中有一些小问题。不过别担心,我们之后会修复它们。

1、在package.json所在的文件夹下,也就是package.json边上,创建一个文件,起名:Dockerfile,文件内容如下:

基于真实应用学习docker
Dockerfile

注意 Dockerfile 是没有扩展名的,VSCode 已经自动识别出文件,并且加上鲸鱼图标。不过有些代码编辑器会自动给文件加上扩展名,如果随便加扩展名,后面的步骤就会报错了,注意一下。

2、打开命令行工具,定位到 Dockerfile 文件所在的 app 文件夹。接着,通过 docker build 命令构建容器镜像。

docker build -t getting-started .

讲真,如果不会上网的话,这一步很可能等了很久还报错,走不下去了。

构建docker镜像

这个命令使用 Dockerfile 来构建一个新的容器镜像。你可能已经注意到,下载了很多 “layers”。这是因为,我们告诉构造器:我们想基于 node:12-alpine 镜像构建。但是因为我们的机器上还没有这个镜像,所以需要先下载这个镜像。

镜像下载完成后,我们把应用拷贝进去,并使用 yarn 来安装应用的依赖。CMD指定了,基于这个镜像启动容器的时候,默认要运行的命令。

最后,-t 旗标给镜像打了标签。可以将其理解为,成品镜像的一个你我都能读懂的名字。因为我们把镜像命名为 getting-started 了,当我们运行容器的时候,就可以通过这个名字来指定这个镜像。

docker build 命令末尾的 . 告诉Docker在当前目录下找Dockerfile,并按照找到的Dockerfile构建镜像。

启动应用容器

构建完镜像之后,我们就可以运行镜像中的应用了!使用 docker run 命令。

1、使用 docker run 命令,同时指定我们刚才给镜像起的名字,来启动容器:

docker run -dp 3000:3000 getting-started

基于镜像启动docker容器

还记得** -d** 和 -p 旗标么?上篇文章有提到。以分离模式启动新容器,并在宿主机的3000端口和容器的3000端口之间创建映射。不做映射的话,我们是无法访问应用的。

2、几秒钟后,浏览器访问网址 localhost:3000 。应该就能看到应用了。

3、在应用里面创建1到2个待办任务吧,看看我们的应用是不是和你想的一样。你还可以把待办任务设为完成,并且移除待办任务。刷新一下网页,你会发现你刚才创建的代办任务还在,说明数据已经从前端保存到了后端。很简单吧?

现在,你应该已经有一个运行中的待办任务列表管理器,里面有几个待办任务,整个应用都是你自己构建的!后续,让我们做一些小修改,并且学着如何管理容器。

如果你瞅一眼Docker仪表盘的话,你会看到2个容器正在运行,一个是待办任务列表,还有一个就是你正在读的教程。

Docker Dashboard

回顾

这一章中,我们学习了关于如何构建容器镜像,以及为了创建镜像,如何创建 Dockerfile。镜像构建成功后,我们启动了容器,并且见证了一个运行中的应用,前后端都有!

接下去,我们会对我们的应用做一些修改,并且学习如何通过一个新镜像来更新运行中的应用。过程当中,我们还会学习一些其它有用的命令。记得关注哦。

本文章首发在 LearnKu.com 网站上。

上一篇 下一篇
秦晓武
讨论数量: 0
发起讨论 只看当前版本


暂无话题~