本教程将通过一个最简单的、使用 JavaScript 开发的待办事项管理 Web 应用程序贯穿始终,下文简称为:todo-app。这个应用程序的代码已经写好并提供了源码的下载地址,所以如果你不太熟悉 JavaScript 和 Node.js 也完全没有任何关系,依旧可以很轻松的学习本教程,因为我们的学习重点是 Docker,所以放心的继续往下看吧。
此时,你只是想开发一个最小可行产品(MVP)来证明自己的想法,展示它的工作原理和功能,暂时无需考虑其他复杂因素。
获取 todo-app 源码
在运行 todo-app 之前,需要将它的源代码下载到自己的计算机上。在实际工作中开发的项目,通常是去公司的代码仓库克隆。但是,针对本教程,我们创建好了一个包含应用程序源码的 ZIP 压缩文件。
- 点击这里下载 并解压,解压之后默认文件夹名称是
app, 非必要的情况下,不要修改文件夹名称,因为保存名称一致,有利于后续文档的说明。 使用你喜欢的编辑器打开,下图使用的是 Visual Studio Code 编辑器作为演示,你可以使用任何自己喜欢的编辑器打开它,打开之后会看到
package.json文件、yarn.lock文件和两个子目录src和spec。
为
todo-app创建镜像需要一个
Dockerfile文件来为我们的应用程序创建 Docker 容器镜像。Dockerfile文件就是一个文本文件,文本的内容描述着如何一步步构建出我们需要的镜像。创建一个名为
Dockerfile的文件,与package.json文件同一层级,内容如下:FROM node:12-alpineWORKDIR /appCOPY . .RUN yarn install --productionCMD ["node", "src/index.js"]
这个
Dockerfile的每一行都代表着告诉 Docker 镜像构造器每一步该怎么做:- 我们的镜像要基于
node: 12-alpine镜像 - 指定镜像的工作目录是
/app - 接着将主机上当前项目目录下的所有内容(即:
app目录下的所有内容)复制到镜像中的当前工作目录(即:/app目录下) - 接着执行
yarn install --production命令为todo-app安装依赖 - 最后一步通过
CMD指定镜像被启动时默认要执行的命令,即通过 node 真正启动我们的todo-appWeb 应用程序。备注:确保刚刚创建的
Dockerfile文件没有文件扩展名,有些编辑器可能会自动附加文件扩展名。
- 我们的镜像要基于
打开命令行并进入到
Dockerfile文件所在的app目录,执行如下命令:docker build -t todo-app .
这条命令就是使用刚刚创建的
Dockerfile文件构建出一个新的容器镜像。从这条命令的输出结果中,你应该已经注意到有很多步骤,对应着Dockerfile文件的每一行。-t标志代表为我们的镜像打标签,可以简单地理解成为镜像取一个易于理解的名称。由于我们将镜像命名为todo-app因此可以在运行容器时引用这个镜像名称。docker build 命令最后的.代表告诉 Docker 在当前目录下查找Dockerfile文件。用刚创建的镜像启动容器
现在已经为我们的
todo-app应用创建了一个名字为todo-app的 Docker 镜像,看看如何使用它:使用
docker run命令启动一个新容器,并指定使用我们刚刚创建的镜像:docker run -dp 3000:3000 todo-app
还记得
-d和-p标记吗?-d- 让容器保持在后台运行;-p 3000:3000- 将容器中的 3000 端口映射到本机的 3000 端口。
因此,通过这条命令,我们使用自己创建的todo-app镜像启动了一个新容器。在容器中的 3000 端口上启动着我们自己的todo-appWeb 应用程序,并将容器中的 3000 端口映射到本机的 3000 端口。- 在本机上访问 http://localhost:3000 就可以看到我们自己的应用了:

此时,一个由我们自己亲手创建的 todo-app 应用已经运行在 Docker 上了。
回顾
在这一小节中,我们学习了有关构建容器镜像的基础知识,并创建了一个 Dockerfile 来完成此操作。构建镜像完成之后,我们使用该镜像启动了一个新容器并看到了正在运行的、我们自己的 todo-app 应用。
接下来,将对我们的应用程序进行修改。在此过程中,进一步学习 Docker 的其他知识。
原始资料:Our Application
